78 lines
2.3 KiB
Java
78 lines
2.3 KiB
Java
package com.czlis.interfaceCommon.websocket;
|
||
|
||
import javax.websocket.Session;
|
||
import java.net.InetSocketAddress;
|
||
import java.time.LocalDateTime;
|
||
import java.util.Map;
|
||
import java.util.concurrent.ConcurrentHashMap;
|
||
|
||
/**
|
||
* 封装WebSocket用户连接信息:聚合Session + 身份属性 + 连接元数据
|
||
*/
|
||
public class WebSocketUser {
|
||
// 核心字段:用户唯一标识
|
||
private final String userId;
|
||
// 身份属性(可根据业务扩展)
|
||
private final String username; // 用户名
|
||
private final String role; // 角色(如ADMIN/USER)
|
||
private final String loginIp; // 登录IP
|
||
// 连接元数据
|
||
private final Session session; // WebSocket连接会话
|
||
private final LocalDateTime connectTime; // 连接建立时间
|
||
// 动态属性(支持运行时更新,线程安全)
|
||
private final Map<String, Object> dynamicAttrs; // 自定义动态属性
|
||
|
||
// 构造器:初始化核心属性(必填)
|
||
public WebSocketUser(String userId, String username, String role, String loginIp, Session session) {
|
||
this.userId = userId;
|
||
this.username = username;
|
||
this.role = role;
|
||
this.loginIp = loginIp;
|
||
this.session = session;
|
||
this.connectTime = LocalDateTime.now();
|
||
this.dynamicAttrs = new ConcurrentHashMap<>(); // 动态属性用线程安全Map
|
||
}
|
||
|
||
// ========== 只读属性(getter) ==========
|
||
public String getUserId() {
|
||
return userId;
|
||
}
|
||
|
||
public String getUsername() {
|
||
return username;
|
||
}
|
||
|
||
public String getRole() {
|
||
return role;
|
||
}
|
||
|
||
public String getLoginIp() {
|
||
return loginIp;
|
||
}
|
||
|
||
public Session getSession() {
|
||
return session;
|
||
}
|
||
|
||
public LocalDateTime getConnectTime() {
|
||
return connectTime;
|
||
}
|
||
|
||
// ========== 动态属性(支持增删改查,线程安全) ==========
|
||
public void setDynamicAttr(String key, Object value) {
|
||
dynamicAttrs.put(key, value);
|
||
}
|
||
|
||
public Object getDynamicAttr(String key) {
|
||
return dynamicAttrs.get(key);
|
||
}
|
||
|
||
public void removeDynamicAttr(String key) {
|
||
dynamicAttrs.remove(key);
|
||
}
|
||
|
||
// 检查连接是否有效
|
||
public boolean isConnected() {
|
||
return session != null && session.isOpen();
|
||
}
|
||
} |