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