zy-acs-flow/src/map/MapPage.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-acs-flow/src/map/websocket.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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(); 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() { zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java
New file @@ -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; } zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
New file @@ -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"); } } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java
New file @@ -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); } }); } }