From b7a71b30c1c1b06a162678c90a54c8188097dc81 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期五, 13 十二月 2024 20:57:39 +0800
Subject: [PATCH] 1

---
 se-modules/se-system/pom.xml                                                                |   12 +++
 se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java                |   14 ++++
 se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java              |   88 +++++++++++++++++++++++++++++
 se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java |    6 ++
 se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java             |    2 
 5 files changed, 120 insertions(+), 2 deletions(-)

diff --git a/se-modules/se-system/pom.xml b/se-modules/se-system/pom.xml
index d6142f2..4ffb72f 100644
--- a/se-modules/se-system/pom.xml
+++ b/se-modules/se-system/pom.xml
@@ -16,7 +16,6 @@
     </description>
 	
     <dependencies>
-    	
     	<!-- SpringCloud Alibaba Nacos -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
@@ -130,6 +129,17 @@
             <artifactId>caffeine</artifactId>
             <version>2.9.3</version>
         </dependency>
+
+        <!--websocket-->
+        <dependency>
+            <groupId>javax.websocket</groupId>
+            <artifactId>javax.websocket-api</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java b/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java
index 79fa634..e13532b 100644
--- a/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java
+++ b/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java
@@ -4,8 +4,8 @@
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.client.RestTemplate;
 
-@SuppressWarnings("ALL")
 @Configuration
+@SuppressWarnings("ALL")
 public class RestTemplateConfig {
     @Bean
     public RestTemplate restTemplate() {
diff --git a/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java b/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java
new file mode 100644
index 0000000..614ccb7
--- /dev/null
+++ b/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java
@@ -0,0 +1,14 @@
+package com.se.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Component
+@SuppressWarnings("ALL")
+public class WebSocketConfig {
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+}
diff --git a/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java b/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java
new file mode 100644
index 0000000..c673a21
--- /dev/null
+++ b/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java
@@ -0,0 +1,88 @@
+package com.se.system.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Component
+@SuppressWarnings("ALL")
+@ServerEndpoint(value = "/ws/query")
+public class WebSocketService {
+    @PostConstruct
+    public void init() {
+        System.out.println("websocket 鍔犺浇瀹屾垚");
+    }
+
+    private static final Logger log = LoggerFactory.getLogger(WebSocketService.class);
+
+    private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0);
+
+    private final static CopyOnWriteArraySet<Session> SESSION_SET = new CopyOnWriteArraySet<Session>();
+
+    @OnOpen
+    public void onOpen(Session session) {
+        SESSION_SET.add(session);
+
+        int cnt = ONLINE_COUNT.incrementAndGet();
+        log.info("鏈夎繛鎺ュ姞鍏ワ紝褰撳墠杩炴帴鏁颁负锛歿}", cnt);
+        sendMessage(session, "杩炴帴鎴愬姛");
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        SESSION_SET.remove(session);
+
+        int cnt = ONLINE_COUNT.decrementAndGet();
+        log.info("鏈夎繛鎺ュ叧闂紝褰撳墠杩炴帴鏁颁负锛歿}", cnt);
+    }
+
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        log.info("鏉ヨ嚜瀹㈡埛绔殑娑堟伅锛歿}", message);
+        sendMessage(session, "鏀跺埌娑堟伅锛屾秷鎭唴瀹癸細" + message);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒锛歿}锛孲ession ID锛� {}", error.getMessage(), session.getId());
+    }
+
+    public static void sendMessage(Session session, String message) {
+        try {
+            session.getBasicRemote().sendText(String.format("%s", message));
+        } catch (Exception ex) {
+            log.error("鍙戦�佹秷鎭嚭閿欙細{}", ex.getMessage());
+        }
+    }
+
+    public static void broadCastInfo(String message) throws IOException {
+        for (Session session : SESSION_SET) {
+            if (session.isOpen()) {
+                sendMessage(session, message);
+            }
+        }
+    }
+
+    public static void sendMessage(String message, String sessionId) throws IOException {
+        Session session = null;
+        for (Session s : SESSION_SET) {
+            if (s.getId().equals(sessionId)) {
+                session = s;
+                break;
+            }
+        }
+
+        if (session != null) {
+            sendMessage(session, message);
+        } else {
+            log.info("娌℃湁鎵惧埌浣犳寚瀹欼D鐨勪細璇濓細{}", sessionId);
+        }
+    }
+}
diff --git a/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java b/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java
index ce041b5..d606e87 100644
--- a/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java
+++ b/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 import com.se.common.core.utils.DateUtils;
+import com.se.system.service.WebSocketService;
 import com.se.system.utils.CaffeineUtils;
 import com.se.system.utils.ConnectUtils;
 import com.se.system.utils.StringUtils;
@@ -128,4 +129,9 @@
 
         sysStatusCtrlMapper.updates(list);
     }
+
+    private void sendMsg(String json) throws Exception {
+        //String json = JSONObject.toJSONStringWithDateFormat(jsonObject, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue);
+        WebSocketService.broadCastInfo(json);
+    }
 }

--
Gitblit v1.9.3