Files
timeline-server/timeline-user-service/src/main/java/com/timeline/user/ws/WebSocketSessionRegistry.java
jiangh277 4c7d59f87b init
2025-12-24 14:17:19 +08:00

59 lines
1.7 KiB
Java

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<String> 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<String> users = getConnectedUsers();
log.info("当前在线用户数: {}", users.size());
users.forEach(userId -> log.info("在线用户: {}", userId));
}
}