#
luxiaotao1123
2024-04-03 a54e7457c3ddf1f794f3c5bacb1cc872ba12421d
#
1个文件已修改
47 ■■■■ 已修改文件
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/map/websocket/MapWebsocket.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/map/websocket/MapWebsocket.java
@@ -5,40 +5,63 @@
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
@ServerEndpoint(value = "/ws/map/websocket")
public class MapWebsocket {
    private Session session;
    private String sessionId;
    private static final ConcurrentHashMap<String, Session> sessions = new ConcurrentHashMap<>();
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        this.sessionId = session.getId();
        log.info("{} connected", this.sessionId);
        sessions.put(session.getId(), session);
        log.info("Opened new session in instance " + session.getId());
    }
    @OnMessage
    public void onMessage(String message, Session session) {
        log.info("{} sendMsg:{}", this.sessionId, message);
        log.info("Received WebSocket message: {}", message);
    }
    @OnClose
    public void onClose(Session session) {
        log.info("{} closed", this.sessionId);
        sessions.remove(session.getId());
        log.info("Closed WebSocket session: {}", session.getId());
    }
    /**
     * @ Param session
     * @ Param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        log.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);
            }
        });
    }
}