From e5e8e3ce7c23e161e9281be5588f04d613cb5191 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 12 九月 2024 16:58:47 +0800
Subject: [PATCH] update 优化 租户状态更改接口严谨性
---
ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java | 49 +++++++++++++++++++++++++++++--------------------
1 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
index 28679e4..8c4170a 100644
--- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
+++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
@@ -4,7 +4,6 @@
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.holder.WebSocketSessionHolder;
@@ -18,7 +17,6 @@
import java.util.List;
import java.util.function.Consumer;
-import static org.dromara.common.websocket.constant.WebSocketConstants.LOGIN_USER_KEY;
import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC;
/**
@@ -31,10 +29,10 @@
public class WebSocketUtils {
/**
- * 鍙戦�佹秷鎭�
+ * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�佹秷鎭�
*
- * @param sessionKey session涓婚敭 涓�鑸负鐢ㄦ埛id
- * @param message 娑堟伅鏂囨湰
+ * @param sessionKey 瑕佸彂閫佹秷鎭殑鐢ㄦ埛id
+ * @param message 瑕佸彂閫佺殑娑堟伅鍐呭
*/
public static void sendMessage(Long sessionKey, String message) {
WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey);
@@ -42,18 +40,18 @@
}
/**
- * 璁㈤槄娑堟伅
+ * 璁㈤槄WebSocket娑堟伅涓婚锛屽苟鎻愪緵涓�涓秷璐硅�呭嚱鏁版潵澶勭悊鎺ユ敹鍒扮殑娑堟伅
*
- * @param consumer 鑷畾涔夊鐞�
+ * @param consumer 澶勭悊WebSocket娑堟伅鐨勬秷璐硅�呭嚱鏁�
*/
public static void subscribeMessage(Consumer<WebSocketMessageDto> consumer) {
RedisUtils.subscribe(WEB_SOCKET_TOPIC, WebSocketMessageDto.class, consumer);
}
/**
- * 鍙戝竷璁㈤槄鐨勬秷鎭�
+ * 鍙戝竷WebSocket璁㈤槄娑堟伅
*
- * @param webSocketMessage 娑堟伅瀵硅薄
+ * @param webSocketMessage 瑕佸彂甯冪殑WebSocket娑堟伅瀵硅薄
*/
public static void publishMessage(WebSocketMessageDto webSocketMessage) {
List<Long> unsentSessionKeys = new ArrayList<>();
@@ -78,38 +76,49 @@
}
/**
- * 鍙戝竷璁㈤槄鐨勬秷鎭�(缇ゅ彂)
+ * 鍚戞墍鏈夌殑WebSocket浼氳瘽鍙戝竷璁㈤槄鐨勬秷鎭�(缇ゅ彂)
*
- * @param message 娑堟伅鍐呭
+ * @param message 瑕佸彂甯冪殑娑堟伅鍐呭
*/
public static void publishAll(String message) {
- WebSocketSessionHolder.getSessionsAll().forEach(key -> {
- WebSocketUtils.sendMessage(key, message);
- });
WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
broadcastMessage.setMessage(message);
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
- log.info(" WebSocket鍙戦�佷富棰樿闃呮秷鎭痶opic:{} message:{}", WEB_SOCKET_TOPIC, message);
+ log.info("WebSocket鍙戦�佷富棰樿闃呮秷鎭痶opic:{} message:{}", WEB_SOCKET_TOPIC, message);
});
}
+ /**
+ * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�丳ong娑堟伅
+ *
+ * @param session 瑕佸彂閫丳ong娑堟伅鐨刉ebSocket浼氳瘽
+ */
public static void sendPongMessage(WebSocketSession session) {
sendMessage(session, new PongMessage());
}
+ /**
+ * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�佹枃鏈秷鎭�
+ *
+ * @param session WebSocket浼氳瘽
+ * @param message 瑕佸彂閫佺殑鏂囨湰娑堟伅鍐呭
+ */
public static void sendMessage(WebSocketSession session, String message) {
sendMessage(session, new TextMessage(message));
}
- private static void sendMessage(WebSocketSession session, WebSocketMessage<?> message) {
+ /**
+ * 鍚戞寚瀹氱殑WebSocket浼氳瘽鍙戦�乄ebSocket娑堟伅瀵硅薄
+ *
+ * @param session WebSocket浼氳瘽
+ * @param message 瑕佸彂閫佺殑WebSocket娑堟伅瀵硅薄
+ */
+ private synchronized static void sendMessage(WebSocketSession session, WebSocketMessage<?> message) {
if (session == null || !session.isOpen()) {
- log.error("[send] session浼氳瘽宸茬粡鍏抽棴");
+ log.warn("[send] session浼氳瘽宸茬粡鍏抽棴");
} else {
try {
- // 鑾峰彇褰撳墠浼氳瘽涓殑鐢ㄦ埛
- LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
session.sendMessage(message);
- log.info("[send] sessionId: {},userId:{},userType:{},message:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType(), message);
} catch (IOException e) {
log.error("[send] session({}) 鍙戦�佹秷鎭�({}) 寮傚父", session, message, e);
}
--
Gitblit v1.9.3