61 lines
2.3 KiB
Java
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);
|
|
}
|
|
}
|