package com.timeline.user.ws; import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.messaging.simp.user.SimpUser; import org.springframework.messaging.simp.user.SimpUserRegistry; import org.springframework.stereotype.Component; import java.util.Set; import java.util.stream.Collectors; /** * WebSocket 会话注册表,用于调试和管理用户会话 */ @Slf4j @Component public class WebSocketSessionRegistry { private final SimpUserRegistry userRegistry; private final SimpMessagingTemplate messagingTemplate; public WebSocketSessionRegistry(SimpUserRegistry userRegistry, SimpMessagingTemplate messagingTemplate) { this.userRegistry = userRegistry; this.messagingTemplate = messagingTemplate; } /** * 获取所有已连接的用户 */ public Set getConnectedUsers() { return userRegistry.getUsers().stream() .map(SimpUser::getName) .collect(Collectors.toSet()); } /** * 检查用户是否在线 */ public boolean isUserOnline(String userId) { SimpUser user = userRegistry.getUser(userId); boolean online = user != null; log.info("用户 {} 在线状态: {}", userId, online); if (online) { log.info("用户 {} 的会话数: {}", userId, user.getSessions().size()); } return online; } /** * 打印所有在线用户 */ public void printOnlineUsers() { Set users = getConnectedUsers(); log.info("当前在线用户数: {}", users.size()); users.forEach(userId -> log.info("在线用户: {}", userId)); } }