package com.ltkj.web.websocket;
|
|
import cn.hutool.json.JSONUtil;
|
import com.ltkj.common.core.domain.model.LoginUser;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
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 redis.clients.jedis.util.SafeEncoder;
|
|
import java.util.ArrayList;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Company: 西安路泰科技有限公司
|
* @Author: zhaowenxuan
|
* @Date: 2025/6/27 14:59
|
*/
|
@Slf4j
|
@Component
|
public class WebSockerManager extends TextWebSocketHandler {
|
|
public final ConcurrentHashMap<String, ClientSessionInfo> userSessions = new ConcurrentHashMap<>();
|
private static final ConcurrentHashMap<String, WebSocketClientInfo> sessions = new ConcurrentHashMap<>();
|
|
private WebSocketClientInfo getUser(WebSocketSession session) {
|
LoginUser loginUser = (LoginUser) session.getAttributes().get("user");
|
WebSocketClientInfo info = new WebSocketClientInfo();
|
info.setUid(Long.parseLong(loginUser.getUserId()));
|
info.setHospId(loginUser.getHospName());
|
return info;
|
// WebSocketClientInfo clientInfo = new WebSocketClientInfo();
|
// clientInfo.setUid(123L);
|
// clientInfo.setHospId("hosp");
|
// return clientInfo;
|
}
|
|
@Override
|
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
|
WebSocketClientInfo clientInfo = getUser(session);
|
// userSessions.put(clientInfo.getUid(), new ClientSessionInfo(session, clientInfo.getHospId()));
|
sessions.put(session.getId(),clientInfo);
|
ClientSessionInfo sessionInfo = new ClientSessionInfo();
|
sessionInfo.setSession(session);
|
sessionInfo.setCode(clientInfo.getHospId());
|
userSessions.put(String.valueOf(clientInfo.getUid()), sessionInfo);
|
session.sendMessage(new TextMessage("连接成功"));
|
log.info("[WebSocket] 在线列表UserIds\n{}",JSONUtil.toJsonStr(new ArrayList<>(userSessions.keySet())));
|
}
|
|
@Override
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
String payload = message.getPayload();
|
// 处理 ping/pong
|
if ("ping".equals(payload)) {
|
session.sendMessage(new TextMessage("pong"));
|
return;
|
}
|
String sessionId = session.getId();
|
WebSocketClientInfo clientInfo = sessions.get(sessionId);
|
log.info("[WebSocket] 收到客户端消息 userId:{} msg: {}",clientInfo.getUid(),payload);
|
session.sendMessage(new TextMessage("[WebSocket] 收到客户端消息 msg: " + payload));
|
}
|
|
@Override
|
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
|
log.info("[WebSocket] 连接关闭: " + status);
|
WebSocketClientInfo clientInfo = sessions.get(session.getId());
|
userSessions.remove(String.valueOf(clientInfo.getUid()));
|
}
|
}
|