From 81d0937dbac70a60a7e01f357c84847577f063e9 Mon Sep 17 00:00:00 2001 From: Wzp-2008 Date: Mon, 16 Dec 2024 12:20:03 +0800 Subject: [PATCH] feat: adding message queue to handle message before login --- .../mmga/clubs/controller/ChessController.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/org/mmga/clubs/controller/ChessController.java b/src/main/java/org/mmga/clubs/controller/ChessController.java index b19252f..1dad9fb 100644 --- a/src/main/java/org/mmga/clubs/controller/ChessController.java +++ b/src/main/java/org/mmga/clubs/controller/ChessController.java @@ -27,8 +27,10 @@ import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.util.Collection; import java.util.Optional; +import java.util.Queue; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; @Slf4j @Tag(name = "五子棋", description = "五子棋相关websocket接口") @@ -52,13 +54,18 @@ public class ChessController { ChessController.userService = userService; } + private final Queue messageQueue = new ConcurrentLinkedQueue<>(); + private boolean isLogin = false; + @SneakyThrows @OnOpen public void onOpen(Session session, @PathParam("token") String token) { + isLogin = false; Optional i = jwtUtils.verifyTokenSafe(token); if (i.isEmpty()) { WebSocketUtils.sendPacket(new ErrorPacket("token验证失败!"), session); session.close(); + messageQueue.clear(); return; } String sessionId = session.getId(); @@ -66,10 +73,18 @@ public class ChessController { WebSocketUtils.sendPacket(new UserInfoPacket(user), session); users.put(sessionId, user); sessions.put(sessionId, session); + isLogin = true; + for (String s : messageQueue) { + this.onMessage(s, session); + } } @OnMessage public void onMessage(String message, Session session) { + if (!isLogin) { + messageQueue.add(message); + return; + } try { JSONObject jsonObject = JSON.parseObject(message); String packetName = jsonObject.getString("name");