61 lines
2.3 KiB
Java

package com.supervision.websocket.handler;
import cn.hutool.json.JSONUtil;
import com.supervision.service.AskService;
import com.supervision.util.SpringBeanUtil;
import com.supervision.util.UserUtil;
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;
import java.io.IOException;
@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) throws IOException {
// 处理接收到的消息
log.info("收到消息:{}", message.toString());
try {
// 这里反序列化消息,将消息形成固定的格式
SocketMessageDTO socketMessageDTO = JSONUtil.toBean(message.getPayload(), SocketMessageDTO.class);
AskService askService = SpringBeanUtil.getBean(AskService.class);
askService.handlerMessageBySocket(socketMessageDTO);
} catch (Exception e) {
log.error("对话出现异常", e);
SocketMessageDTO res = new SocketMessageDTO();
res.setSocketId(session.getId());
res.setUserId(UserUtil.getUser().getId());
res.setTextMessage("出错了");
res.setType(1);
session.sendMessage(new TextMessage(JSONUtil.toJsonStr(res)));
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
// 连接关闭时的处理逻辑
String id = session.getId();
WebSocketUserCache.logout(id);
}
}