From c2fccb01b972176dc3da5a497b5e904025e9e98d Mon Sep 17 00:00:00 2001
From: bsw215583320 <baoshiwei121@163.com>
Date: 星期二, 16 四月 2024 15:06:51 +0800
Subject: [PATCH] Merge branch 'master' of http://210.22.126.130:1111/r/dry/herb

---
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 146 insertions(+), 0 deletions(-)

diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java
new file mode 100644
index 0000000..8b908b6
--- /dev/null
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java
@@ -0,0 +1,146 @@
+package org.jeecg.modules.dry.websocket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.constant.WebsocketConst;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Author scott
+ * @Date 2019/11/29 9:41
+ * @Description: 姝ゆ敞瑙g浉褰撲簬璁剧疆璁块棶URL
+ */
+@Component
+@Slf4j
+@ServerEndpoint("/drySocket/{tenantId}")
+public class DrySocket {
+    
+    /**绾跨▼瀹夊叏Map*/
+    private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>();
+
+
+
+
+    //==========銆恮ebsocket鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�========================================================================================
+    @OnOpen
+    public void onOpen(Session session, @PathParam(value = "tenantId") String tenantId) {
+        try {
+            sessionPool.put(tenantId, session);
+            log.info("銆愮郴缁� WebSocket銆戞湁鏂扮殑杩炴帴锛屾�绘暟涓�:" + sessionPool.size());
+        } catch (Exception e) {
+        }
+    }
+
+    @OnClose
+    public void onClose(@PathParam("tenantId") String tenantId) {
+        try {
+            sessionPool.remove(tenantId);
+            log.info("銆愮郴缁� WebSocket銆戣繛鎺ユ柇寮�锛屾�绘暟涓�:" + sessionPool.size());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * ws鎺ㄩ�佹秷鎭�
+     *
+     * @param tenantId
+     * @param message
+     */
+    public void pushMessage(String tenantId, String message) {
+        for (Map.Entry<String, Session> item : sessionPool.entrySet()) {
+            //userId key鍊�= {鐢ㄦ埛id + "_"+ 鐧诲綍token鐨刴d5涓瞹
+            //TODO vue2鏈敼key鏂拌鍒欙紝鏆傛椂涓嶅奖鍝嶉�昏緫
+            if (item.getKey().contains(tenantId)) {
+                Session session = item.getValue();
+                try {
+                    //update-begin-author:taoyan date:20211012 for: websocket鎶ラ敊 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU
+                    synchronized (session){
+                        log.info("銆愮郴缁� WebSocket銆戞帹閫佸崟浜烘秷鎭�:" + message);
+                        session.getBasicRemote().sendText(message);
+                    }
+                    //update-end-author:taoyan date:20211012 for: websocket鎶ラ敊 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU
+                } catch (Exception e) {
+                    log.error(e.getMessage(),e);
+                }
+            }
+        }
+    }
+
+    /**
+     * ws閬嶅巻缇ゅ彂娑堟伅
+     */
+    public void pushMessage(String message) {
+        try {
+            for (Map.Entry<String, Session> item : sessionPool.entrySet()) {
+                try {
+                    item.getValue().getAsyncRemote().sendText(message);
+                } catch (Exception e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
+            log.info("銆愮郴缁� WebSocket銆戠兢鍙戞秷鎭�:" + message);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+
+
+    /**
+     * ws鎺ュ彈瀹㈡埛绔秷鎭�
+     */
+    @OnMessage
+    public void onMessage(String message, @PathParam(value = "tenantId") String tenantId) {
+        if(!"ping".equals(message) && !WebsocketConst.CMD_CHECK.equals(message)){
+            log.info("銆愮郴缁� WebSocket銆戞敹鍒板鎴风娑堟伅:" + message);
+        }else{
+            log.debug("銆愮郴缁� WebSocket銆戞敹鍒板鎴风娑堟伅:" + message);
+        }
+        
+//        //------------------------------------------------------------------------------
+//        JSONObject obj = new JSONObject();
+//        //涓氬姟绫诲瀷
+//        obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK);
+//        //娑堟伅鍐呭
+//        obj.put(WebsocketConst.MSG_TXT, "蹇冭烦鍝嶅簲");
+//        this.pushMessage(userId, obj.toJSONString());
+//        //------------------------------------------------------------------------------
+    }
+
+    /**
+     * 閰嶇疆閿欒淇℃伅澶勭悊
+     *
+     * @param session
+     * @param t
+     */
+    @OnError
+    public void onError(Session session, Throwable t) {
+        log.warn("銆愮郴缁� WebSocket銆戞秷鎭嚭鐜伴敊璇�");
+        t.printStackTrace();
+    }
+    //==========銆愮郴缁� WebSocket鎺ュ彈銆佹帹閫佹秷鎭瓑鏂规硶 鈥斺�� 鍏蜂綋鏈嶅姟鑺傜偣鎺ㄩ�亀s娑堟伅銆�========================================================================================
+    
+
+    //==========銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��========================================================================================
+
+
+
+    /**
+     * 姝や负鍗曠偣娑堟伅(澶氫汉) redis
+     *
+     * @param userIds
+     * @param message
+     */
+//    public void sendMessage(String[] userIds, String message) {
+//        for (String userId : userIds) {
+//            sendMessage(userId, message);
+//        }
+//    }
+    //=======銆愰噰鐢╮edis鍙戝竷璁㈤槄妯″紡鈥斺�旀帹閫佹秷鎭��==========================================================================================
+    
+}
\ No newline at end of file

--
Gitblit v1.9.3