feat: adding message queue to handle message before login
This commit is contained in:
parent
74980005d2
commit
81d0937dba
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user