package com.supervision.websocket.handler; import cn.hutool.json.JSONUtil; import com.supervision.service.AskService; import com.supervision.util.SpringBeanUtil; import com.supervision.websocket.cache.WebSocketUserCache; import com.supervision.websocket.dto.SocketMessageDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.lang.NonNullApi; 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; @Slf4j public class AskWebSocketHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 获取本次 String id = session.getId(); // 缓存sessionId WebSocketUserCache.login(id, session); // 返回sessionId到前端 SocketMessageDTO socketMessageDTO = new SocketMessageDTO(); socketMessageDTO.setSocketId(id); session.sendMessage(new TextMessage(JSONUtil.toJsonStr(socketMessageDTO))); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) { // 处理接收到的消息 log.info("收到消息:{}", message.toString()); // 这里反序列化消息,将消息形成固定的格式 SocketMessageDTO socketMessageDTO = JSONUtil.toBean(message.getPayload(), SocketMessageDTO.class); AskService askService = SpringBeanUtil.getBean(AskService.class); askService.handlerMessageBySocket(socketMessageDTO); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { // 连接关闭时的处理逻辑 String id = session.getId(); WebSocketUserCache.logout(id); } }