package com.ruoyi.system.util.websocket;
|
|
import com.alibaba.fastjson2.JSON;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.socket.BinaryMessage;
|
import org.springframework.web.socket.CloseStatus;
|
import org.springframework.web.socket.TextMessage;
|
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/4/8 19:42
|
*/
|
@Component
|
@Slf4j
|
public class MyWebSocketHandler extends TextWebSocketHandler {
|
|
@Override
|
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
|
String sessionId = session.getId();
|
log.info("WebSocket连接建立成功:{}", sessionId);
|
}
|
|
@Override
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
String payload = message.getPayload();
|
log.info("收到消息:{}", payload);
|
Integer carId = JSON.parseObject(payload).getInteger("carId");
|
SessionMap.add(carId, session);
|
// 发送回复消息
|
String replyMessage = "服务器收到消息:" + payload;
|
session.sendMessage(new TextMessage(replyMessage));
|
}
|
|
@Override
|
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
|
String sessionId = session.getId();
|
log.info("WebSocket连接关闭:{}", sessionId);
|
}
|
|
@Override
|
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
|
log.error("WebSocket传输错误", exception);
|
}
|
|
// 广播消息给所有连接的客户端
|
public void broadcastMessage(String message) {
|
SessionMap.getAll().values().forEach(session -> {
|
try {
|
session.sendMessage(new TextMessage(message));
|
} catch (IOException e) {
|
log.error("广播消息失败", e);
|
}
|
});
|
}
|
|
|
/**
|
* 发送消息
|
* @param id
|
* @param byteBuffer
|
*/
|
public void send(Integer id, ByteBuffer byteBuffer){
|
WebSocketSession webSocketSession = SessionMap.get(id);
|
if(null != webSocketSession && webSocketSession.isOpen()){
|
try {
|
webSocketSession.sendMessage(new BinaryMessage(byteBuffer));
|
} catch (IOException e) {
|
log.error("发送失败", e);
|
}
|
}else if(null != webSocketSession && !webSocketSession.isOpen()){
|
SessionMap.del(id);
|
}
|
|
}
|
}
|