📄 servworker.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package chat.server;import chat.common.LoginMessage;import chat.common.LogoutMessage;import chat.common.Message;import chat.common.TextMessage;import chat.common.UpdateUserMessage;import chat.common.UserListMessage;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;import java.util.HashSet;import java.util.logging.Level;import java.util.logging.Logger;/** * * @author Administrator */public class ServWorker implements Runnable { private Socket socket; private ObjectInputStream ois; private ObjectOutputStream oos; private boolean stop = false; public ObjectInputStream getOis() { return ois; } public void setOis(ObjectInputStream ois) { this.ois = ois; } public ObjectOutputStream getOos() { return oos; } public void setOos(ObjectOutputStream oos) { this.oos = oos; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } public ServWorker(Socket socket) { try { this.socket = socket; /** * 如果和服务器两端同顺序(先input,后output)会发生阻塞 */ this.oos = new ObjectOutputStream(socket.getOutputStream()); this.ois = new ObjectInputStream(socket.getInputStream()); } catch (IOException ex) { Logger.getLogger(ServWorker.class.getName()).log(Level.SEVERE, null, ex); } } public boolean isStop() { return stop; } public void setStop(boolean stop) { this.stop = stop; } public void run() { while (!stop) { try { Message message = (Message) ois.readObject(); /** * 会收到空消息(客户端没有发送)? */ if(message == null){ continue; } switch (message.getType()) { case Message.TYPE_LOGIN: LoginMessage loginMessage = (LoginMessage) message; //验证用户登录情况 DefaultServerModel.getInstance().doLogin(loginMessage); oos.writeObject(loginMessage); oos.flush(); if (loginMessage.getStatus() == LoginMessage.LOGIN_OK) { //发送更新消息给所有在线用户 UpdateUserMessage updateUserMessage = new UpdateUserMessage(); updateUserMessage.setStatus(UpdateUserMessage.NEW_USER_LOGIN); updateUserMessage.setUser(message.getUser()); DefaultServerModel.getInstance().sendMessageToUsers(updateUserMessage); DefaultServerModel.getInstance().addUserToList(loginMessage.getUser(), this); } else { this.getSocket().close(); this.setStop(true); } break; case Message.TYPE_LOGOUT: LogoutMessage logoutMessage = (LogoutMessage) message; //从用户列表中删除 DefaultServerModel.getInstance().removeUserFromList(logoutMessage.getUser()); //发送所有在线用户,当前用户离开的消息 DefaultServerModel.getInstance().doLogout(logoutMessage); oos.writeObject(logoutMessage); oos.flush(); //发送更新消息给所有在线用户 UpdateUserMessage updateUserMessage = new UpdateUserMessage(); updateUserMessage.setStatus(UpdateUserMessage.USER_LOGOUT); updateUserMessage.setUser(message.getUser()); DefaultServerModel.getInstance().sendMessageToUsers(updateUserMessage); this.getSocket().close(); this.setStop(true); break; case Message.TYPE_TEXT: TextMessage textMessage = (TextMessage) message; //转发文本消息 DefaultServerModel.getInstance().sendMessageToUsers(textMessage.getTo(), message); break; case Message.TYPE_USERLIST: UserListMessage userListMessage = (UserListMessage) message; //更新用户列表 HashSet userSet = new HashSet(DefaultServerModel.getInstance().getUserMap().keySet()); userListMessage.setCurrentUsers(userSet); DefaultServerModel.getInstance().sendMessageToUser(userListMessage.getUser(), message); } } catch (IOException ex) { Logger.getLogger(ServWorker.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(ServWorker.class.getName()).log(Level.SEVERE, null, ex); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -