61 lines
2.1 KiB
Java
Raw Normal View History

2025-11-27 19:07:55 +08:00
package com.czlis.interfaceCommon.websocket;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
/**
* 示例1:获取所有在线管理员并推送通知
*/
public void pushNoticeToAdmin(String notice) {
// 根据角色筛选在线管理员
List<WebSocketUser> adminUsers = ChatWebSocketServer.getOnlineUsersByRole("ADMIN");
if (adminUsers.isEmpty()) {
System.out.println("当前无在线管理员");
return;
}
String message = "【管理员通知】" + notice;
for (WebSocketUser admin : adminUsers) {
ChatWebSocketServer.sendToUser(admin.getUserId(), message);
System.out.println("已给管理员[" + admin.getUsername() + "]推送通知,IP:" + admin.getLoginIp());
}
}
/**
* 示例2:获取指定用户的详细连接信息
*/
public void getUserConnectInfo(String userId) {
WebSocketUser user = ChatWebSocketServer.getOnlineUser(userId);
if (user == null) {
System.out.println("用户[" + userId + "]不在线");
return;
}
// 获取身份属性
System.out.println("用户名:" + user.getUsername());
System.out.println("角色:" + user.getRole());
System.out.println("登录IP:" + user.getLoginIp());
System.out.println("连接时间:" + user.getConnectTime());
System.out.println("是否在线:" + user.isConnected());
// 获取动态属性(如设备类型)
String deviceType = (String) user.getDynamicAttr("deviceType");
System.out.println("登录设备:" + (deviceType == null ? "未知" : deviceType));
}
/**
* 示例3:给在线用户设置动态属性(如设备类型)
*/
public void setUserDeviceAttr(String userId, String deviceType) {
WebSocketUser user = ChatWebSocketServer.getOnlineUser(userId);
if (user != null) {
user.setDynamicAttr("deviceType", deviceType);
System.out.println("已给用户[" + userId + "]设置设备类型:" + deviceType);
}
}
}