From 129855f7cd2f65b921544b15f4748d4048be76ad Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 14 十月 2024 15:16:41 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java    |   72 ++++++++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java |   21 +++++++
 zy-acs-flow/src/map/websocket.js                                                       |    2 
 zy-acs-flow/src/map/MapPage.jsx                                                        |   14 ++--
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java               |   17 +++++
 5 files changed, 118 insertions(+), 8 deletions(-)

diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index b34c92c..4b35c2f 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -80,20 +80,20 @@
             Tool.setThemeMode(themeMode);
             Http.setNotify(notify);
             Http.setMapContainer(player.mapContainer);
-            // websocket = new WebSocketClient('/ws/map/websocket');
+            websocket = new WebSocketClient('/ws/map/websocket');
 
             await Http.fetchMapData();
+            websocket.connect();
+            websocket.onMessage = (data) => {
+                console.log("ws", data);
+
+                // Tool.updateMapStatusInRealTime(data, () => curFloorRef.current, setCurSPrite);
+            }
 
             setTimeout(() => {
                 player.adaptScreen();
                 notify.info(translate('page.map.welcome'));
             }, 200)
-
-            // websocket.connect();
-            // websocket.onMessage = (data) => {
-            //     Tool.updateMapStatusInRealTime(data, () => curFloorRef.current, setCurSPrite);
-            // }
-
         }
         initialize();
 
diff --git a/zy-acs-flow/src/map/websocket.js b/zy-acs-flow/src/map/websocket.js
index 3c9ec74..9154a4a 100644
--- a/zy-acs-flow/src/map/websocket.js
+++ b/zy-acs-flow/src/map/websocket.js
@@ -6,7 +6,7 @@
         this.url = WEBSOCKET_BASE_URL + path;
         this.webSocket = null;
         this.heartbeatInterval = null; // Store the interval ID
-        this.heartbeatFrequency = 30000; // Heartbeat every 30 seconds
+        this.heartbeatFrequency = 5 * 1000; // Heartbeat every 30 seconds
     }
 
     connect() {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java
new file mode 100644
index 0000000..001a14e
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java
@@ -0,0 +1,17 @@
+package com.zy.acs.manager.core.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by vincent on 10/14/2024
+ */
+@Data
+public class MapWsVo implements Serializable {
+
+    private static final long serialVersionUID = -6988765880778795176L;
+
+
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
new file mode 100644
index 0000000..7aadde7
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -0,0 +1,21 @@
+package com.zy.acs.manager.core.scheduler;
+
+import com.zy.acs.manager.core.domain.MapWsVo;
+import com.zy.acs.manager.manager.websocket.MapWebSocket;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 10/14/2024
+ */
+@Component
+public class MapDataWsScheduler {
+
+    @Scheduled(cron = "0/1 * * * * ? ")
+    public void broadcast() {
+        MapWsVo mapWsVo = new MapWsVo();
+
+        MapWebSocket.broadcast("123");
+    }
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java
new file mode 100644
index 0000000..cdc9dbe
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java
@@ -0,0 +1,72 @@
+package com.zy.acs.manager.manager.websocket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Component
+@ServerEndpoint(value = "/ws/map/websocket")
+public class MapWebSocket {
+
+    private static final long MAX_IDLE_TIMEOUT = 120 * 1000;
+
+    private static final ConcurrentHashMap<String, Session> sessions = new ConcurrentHashMap<>();
+
+    @OnOpen
+    public void onOpen(Session session) {
+        session.setMaxIdleTimeout(MAX_IDLE_TIMEOUT);
+        sessions.put(session.getId(), session);
+        log.info("Opened new session in instance " + session.getId());
+    }
+
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        if (!message.equals("1")) {
+            log.info("Received WebSocket message: {}", message);
+        }
+    }
+
+    @OnClose
+    public void onClose(Session session) {
+        sessions.remove(session.getId());
+        log.info("Closed WebSocket session: {}", session.getId());
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        error.printStackTrace();
+        log.error("Error in WebSocket session: {}", session.getId(), error);
+        try {
+            session.close();
+        } catch (Exception e) {
+            log.error("Error closing session: {}", session.getId(), e);
+        } finally {
+            sessions.remove(session.getId());
+        }
+    }
+
+    public static void sendMessage(Session session, String message) {
+        if(session.isOpen()){
+            try {
+                session.getBasicRemote().sendText(message);
+            } catch (Exception e) {
+                log.error("Failed to send message to session: {}", session.getId(), e);
+            }
+        }
+    }
+
+    public static void broadcast(String message) {
+        sessions.forEach((id, session) -> {
+            try {
+                session.getBasicRemote().sendText(message);
+            } catch (Exception e) {
+                log.error("Failed to send message to session: {}", id, e);
+            }
+        });
+    }
+
+}

--
Gitblit v1.9.1