a-tuoheng-device/src/main/java/com/ruoyi/device/websocket/StatisticsWebSocket.java

73 lines
2.2 KiB
Java

package com.ruoyi.device.websocket;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.dto.DockDetailDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;
@Component
@ServerEndpoint("/websocket/statistics")
public class StatisticsWebSocket {
private static final Logger log = LoggerFactory.getLogger(StatisticsWebSocket.class);
private Session session;
private static final CopyOnWriteArraySet<StatisticsWebSocket> sessions = new CopyOnWriteArraySet<>();
@OnOpen
public void onOpen(Session session) {
this.session = session;
sessions.add(this);
log.info("WebSocket连接建立: sessionId={}", session.getId());
}
@OnClose
public void onClose() {
sessions.remove(this);
if (session != null) {
log.info("WebSocket连接关闭: sessionId={}", session.getId());
} else {
log.info("WebSocket连接关闭: session为null");
}
}
@OnMessage
public void onMessage(String message) {
log.info("收到WebSocket消息: sessionId={}, message={}", session.getId(), message);
}
@OnError
public void onError(Session session, Throwable error) {
log.error("WebSocket错误: sessionId={}, error={}", session.getId(), error.getMessage(), error);
}
private void sendMessage(String message) {
try {
if (session != null && session.isOpen()) {
session.getBasicRemote().sendText(message);
}
} catch (Exception e) {
log.error("发送WebSocket消息失败: error={}", e.getMessage(), e);
}
}
@Autowired
private DefaultBufferDeviceImpl bufferDeviceService;
public void broadcast(String dockerId) {
for (StatisticsWebSocket ws : sessions) {
DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(Long.valueOf(dockerId));
ws.sendMessage(JSON.toJSONString(dockDetailDTO));
}
}
}