[已解决][HTML5]基于WebSocket开发聊天室应用

WebSocket示例java的比较少,大部分是nodejs的,比较有名的是socket.io的chat,

借用下他的前端实现一套java的,后端基于https://github.com/generallycloud/baseio实现的WebSocket编写,

直接上代码:

public void accept(Session session, ReadFuture future) throws Exception {

        if (future instanceof HttpReadFuture) {
            super.accept(session, future);
            return;
        }

        WebSocketReadFuture f = (WebSocketReadFuture) future;

        // CLOSE
        if (f.getType() == 8) {

            msgAdapter.removeClient(session);
            
            JSONObject obj = new JSONObject();
            
            obj.put("username", session.getAttribute("username"));
            obj.put("numUsers", msgAdapter.getClientSize());
            obj.put("action", "user-left");
            
            String msg1 = obj.toJSONString();
            
            msgAdapter.sendMsg(msg1);
            
        } else {

//            String msg = getMsg(session, );
            
            String msg = f.getData().toString(Encoding.UTF8);
            
            JSONObject obj = JSONObject.parseObject(msg);
            
            String action = obj.getString("action");
            
            if("new-message".equals(action)){
                
                obj.put("username", session.getAttribute("username"));
                
                String msg1 = obj.toJSONString();
                
                msgAdapter.sendMsg(msg1);
                
            }else if("add-user".equals(action)){
                
                msgAdapter.addClient(session);
                
                String username = (String)session.getAttribute("username");
                
                if(username != null){
                    return;
                }
                
                username = obj.getString("username");
                
                session.setAttribute("username", username);
                
                obj.put("numUsers", msgAdapter.getClientSize());
                obj.put("action", "login");
                
                String msg1 = obj.toJSONString();
                
                WebSocketReadFutureImpl f2 = new WebSocketTextReadFutureImpl();
                f2.write(msg1);
                session.flush(f2);
                
                obj.put("username", username);
                obj.put("action", "user-joined");
                
                String msg2 = obj.toJSONString();
                
                msgAdapter.sendMsg(msg2);
                
            }else if("typing".equals(action)){
                
                obj.put("username", session.getAttribute("username"));
                
                String msg1 = obj.toJSONString();
                
                msgAdapter.sendMsg(msg1);
                
                
            }else if("stop-typing".equals(action)){
                
                obj.put("username", session.getAttribute("username"));
                
                String msg1 = obj.toJSONString();
                
                msgAdapter.sendMsg(msg1);
                
            }else if("disconnect".equals(action)){
                
                msgAdapter.removeClient(session);
                
                obj.put("username", session.getAttribute("username"));
                obj.put("numUsers", msgAdapter.getClientSize());
                obj.put("action", "user-left");
                
                String msg1 = obj.toJSONString();
                
                msgAdapter.sendMsg(msg1);
            }else{
                
                f.write("no action matched:"+action);
                
                session.flush(f);
            }
        }
    }

 

演示地址:https://www.generallycloud.com/web-socket/chat/index.html

文章来自:http://www.cnblogs.com/gifisan/p/5946297.html 

 

posted @ 2016-10-10 16:25  gifisan  阅读(1071)  评论(0编辑  收藏  举报