feat: adding message queue to handle message before login

This commit is contained in:
Wzp-2008 2024-12-16 12:20:03 +08:00
parent 74980005d2
commit 81d0937dba

View File

@ -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<String> messageQueue = new ConcurrentLinkedQueue<>();
private boolean isLogin = false;
@SneakyThrows
@OnOpen
public void onOpen(Session session, @PathParam("token") String token) {
isLogin = false;
Optional<Integer> 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");