📄 qqclient.java
字号:
package chat.client;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import chat.trans.*;
import javax.swing.JOptionPane;;
public class QQClient extends WindowAdapter implements ActionListener{
MainWindow mw;
Map<String, ChatWindow> cws =
new HashMap<String, ChatWindow>();
Socket s;
String owner;
PrintWriter out;
BufferedReader in;
public QQClient() throws Exception{
s = new Socket(Protocol.SERVER_IP,
Protocol.SERVER_PORT);
out = new PrintWriter(
s.getOutputStream());
InputStreamReader ir =
new InputStreamReader(
s.getInputStream());
in = new BufferedReader(ir);
mw = new MainWindow();
addlistener();
}
public static void main(String[] args){
try {
new QQClient().run();
} catch (Exception e) {
e.printStackTrace();
}
}
public void addlistener(){
mw.rp.ok.addActionListener(this);
mw.mp.login.addActionListener(this);
mw.mp.register.addActionListener(this);
mw.lp.ok.addActionListener(this);
mw.op.qunLiao.addActionListener(this);
mw.op.siLiao.addActionListener(this);
mw.addWindowListener(this);
}
private void process(String msg){
System.out.println("process:" + msg);
char type = msg.charAt(0);
switch(type){
case Protocol.ONLINE_USER_MSG:
mw.setTitle("QQ聊天室 -- " + owner);
mw.show("op");
String[] ss = msg.substring(1).split(",");
for(int i=0; i<ss.length; i++){
if(ss[i].equals(owner)){
mw.op.users.addItem("本人");
}else{
mw.op.users.addItem(ss[i]);
}
}
break;
case Protocol.REGISTER_RESULT:
JOptionPane.showMessageDialog(
mw.getParent(),msg.substring(1),
"系统提示",JOptionPane.OK_OPTION);
mw.show("rp");
break;
case Protocol.ADD_USER:
mw.op.users.addItem(msg.substring(1));
break;
case Protocol.DEL_USER:
mw.op.users.removeItem(msg.substring(1));
break;
case Protocol.LOGIN_RESULT:
JOptionPane.showMessageDialog(
mw.getParent(),msg.substring(1),
"系统提示",JOptionPane.OK_OPTION);
mw.show("lp");
break;
case Protocol.CHAT_MSG:
String s = msg.substring(1);
String[] s2 =
s.split(Protocol.SPLIT_CHAR+"");
System.out.println(s + " --" + owner);
if(s2[1].equals("all")){
if(cws.containsKey("all")){
System.out.println(cws.size());
cws.get("all").ta.append(s2[0]+"说: ");
cws.get("all").ta.append(s2[2] + "\n");
}
}else{
if(!cws.containsKey(s2[0]))
createChatWindow(s2[0]);
cws.get(s2[0]).ta.append(s2[0] + "说: ");
cws.get(s2[0]).ta.append(s2[2]+"\n");
}
break;
}
}
public void run() throws Exception{
while(true){
String msg = null;
try{
msg = in.readLine();
}catch(SocketException e){
System.out.println("用户下线");
System.exit(0);
}
process(msg);
}
}
public void windowClosing(WindowEvent e) {
try {
s.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if(mw.rp.ok == e.getSource()){
StringBuffer meg = new StringBuffer();
meg.append(Protocol.USER_REGISTER_MSG);
meg.append(mw.rp.loginName.getText());
meg.append(Protocol.SPLIT_CHAR);
meg.append(mw.rp.passwd.getPassword());
meg.append(Protocol.SPLIT_CHAR);
meg.append(mw.rp.realName.getText());
meg.append(Protocol.SPLIT_CHAR);
meg.append(mw.rp.sex.getSelectedItem());
out.println(meg);
out.flush();
owner = mw.rp.loginName.getText();
}else if(mw.mp.login == e.getSource()){
mw.show("lp");
}else if(mw.mp.register == e.getSource()){
mw.show("rp");
}else if(mw.lp.ok == e.getSource()){
StringBuffer s = new StringBuffer();
s.append(Protocol.USER_LOGIN_MSG);
s.append(mw.lp.loginName.getText());
s.append(Protocol.SPLIT_CHAR);
s.append(mw.lp.passwd.getPassword());
out.println(s);
out.flush();
owner = mw.lp.loginName.getText();
}else if(mw.op.qunLiao == e.getSource()){
createChatWindow("all");
}else if(mw.op.siLiao == e.getSource()){
String name = mw.op.users.
getSelectedItem().toString();
if(name.equals("本人")){
JOptionPane.showMessageDialog(
mw.getParent(),"请选择其他在线用户!",
"系统提示",JOptionPane.OK_OPTION);
}else{
createChatWindow(name);
}
}else{
Iterator it = cws.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
ChatWindow cw = (ChatWindow)cws.get(key);
if(e.getSource() == cw.tf){
int no = mw.op.users.getItemCount();
for(int i=0; i<no; i++){
if(mw.op.users.
getItemAt(i).equals(key)){
break;
}
JOptionPane.showMessageDialog(
mw.getParent(),key+"已下线!",
"系统提示",JOptionPane.OK_OPTION);
return;
}
StringBuffer sb = new StringBuffer();
sb.append(Protocol.CHAT_MSG);
sb.append(owner);
sb.append(Protocol.SPLIT_CHAR);
sb.append(key);
sb.append(Protocol.SPLIT_CHAR);
sb.append(cw.tf.getText());
out.println(sb);
out.flush();
cw.ta.append("我说: " +
cw.tf.getText() + "\n");
cw.tf.setText("");
break;
}
}
}
}
private void createChatWindow(String name){
ChatWindow cw = null;
if(name.equals("all")){
cw = new ChatWindow("群聊 -- " + owner);
}else{
cw = new ChatWindow("与" +
name + "私聊 -- " + owner);
}
cws.put(name, cw);
cw.tf.addActionListener(this);
System.out.println("已创建聊天窗口," +
"共有"+cws.size()+"个");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -