59 lines
1.7 KiB
Java
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));
|
|
}
|
|
}
|
|
|