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