#
luxiaotao1123
2024-10-14 129855f7cd2f65b921544b15f4748d4048be76ad
#
2个文件已修改
3个文件已添加
126 ■■■■■ 已修改文件
zy-acs-flow/src/map/MapPage.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/websocket.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/MapWsVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/websocket/MapWebSocket.java 72 ●●●●● 补丁 | 查看 | 原始文档 | 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);
            }
        });
    }
}