|
|
@@ -1,21 +1,24 @@
|
|
|
package com.xunmei.mediator.websocket.holder;
|
|
|
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.xunmei.common.core.constant.Constants;
|
|
|
import com.xunmei.common.core.utils.JacksonUtils;
|
|
|
import com.xunmei.common.core.utils.StringUtils;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
import com.xunmei.mediator.websocket.dto.WebsocketResult;
|
|
|
-import com.xunmei.system.api.util.LogUtils;
|
|
|
+import com.xunmei.mediator.websocket.enums.WebsocketStatus;
|
|
|
+import com.xunmei.mediator.websocket.utils.WebSocketUtils;
|
|
|
import lombok.AccessLevel;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.redisson.api.RBucket;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
-import org.springframework.web.socket.TextMessage;
|
|
|
import org.springframework.web.socket.WebSocketSession;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.time.Duration;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
@@ -79,6 +82,33 @@ public class WebSocketSessionHolder {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static void closeServe(String sessionKey) throws IOException {
|
|
|
+ if (StringUtils.isNotEmpty(sessionKey) && USER_SESSION_MAP.containsKey(sessionKey)) {
|
|
|
+ final WebSocketSession webSocketSession = USER_SESSION_MAP.get(sessionKey);
|
|
|
+ if (webSocketSession != null && webSocketSession.isOpen()) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("statusDescription", "链接服务已被中心平台编辑为停用!");
|
|
|
+ map.put("statusCode", WebsocketStatus.CLOSED.getStatusCode());
|
|
|
+ WebsocketResult result = createWebsocketResult(null, "login", map);
|
|
|
+ WebSocketUtils.sendMessage(webSocketSession, JacksonUtils.toJSONString(result));
|
|
|
+ webSocketSession.close();
|
|
|
+ }
|
|
|
+ USER_SESSION_MAP.remove(sessionKey);
|
|
|
+ RedisUtils.deleteObject(REDIS_TOPIC_WEBSOCKET_TOKEN + sessionKey);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static WebsocketResult createWebsocketResult(String id, String topic, Object object) {
|
|
|
+ WebsocketResult result = new WebsocketResult();
|
|
|
+ result.setId(id);
|
|
|
+ result.setTopic(topic);
|
|
|
+ //当前时间转换为 格式:2024-07-02T14:17:32
|
|
|
+ result.setTimestamp(DateUtil.format(new Date(), Constants.UTC_FORMAT));
|
|
|
+ result.setPayload(object);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据会话键从用户会话Map中获取WebSocket会话
|
|
|
*
|
|
|
@@ -121,7 +151,7 @@ public class WebSocketSessionHolder {
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static Map<String,WebSocketSession> map(){
|
|
|
+ public static Map<String, WebSocketSession> map() {
|
|
|
return USER_SESSION_MAP;
|
|
|
- }
|
|
|
+ }
|
|
|
}
|