⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servworker.java

📁 java chat java chat简易聊天室程序源代码,有很高的参考价值,能在它的基础上进行2次开发.
💻 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 + -