?? servworker.java
字號(hào):
/* * 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; /** * 如果和服務(wù)器兩端同順序(先input,后output)會(huì)發(fā)生阻塞 */ 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(); /** * 會(huì)收到空消息(客戶端沒(méi)有發(fā)送)? */ if(message == null){ continue; } switch (message.getType()) { case Message.TYPE_LOGIN: LoginMessage loginMessage = (LoginMessage) message; //驗(yàn)證用戶登錄情況 DefaultServerModel.getInstance().doLogin(loginMessage); oos.writeObject(loginMessage); oos.flush(); if (loginMessage.getStatus() == LoginMessage.LOGIN_OK) { //發(fā)送更新消息給所有在線用戶 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()); //發(fā)送所有在線用戶,當(dāng)前用戶離開(kāi)的消息 DefaultServerModel.getInstance().doLogout(logoutMessage); oos.writeObject(logoutMessage); oos.flush(); //發(fā)送更新消息給所有在線用戶 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; //轉(zhuǎn)發(fā)文本消息 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); } } }}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -