zoukankan      html  css  js  c++  java
  • [已解决][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 

  • 相关阅读:
    指数
    汉诺塔问题
    只用递归和当前的栈实现栈的逆序
    让你996的不是你的老板,而是其他愿意996的人
    luke towan
    2020-9-3
    2020-9-3
    springboot注解
    2020-9-2
    20200827
  • 原文地址:https://www.cnblogs.com/gifisan/p/5946297.html
Copyright © 2011-2022 走看看