From a43196133e5a9cfc5cb3d8d1bd97bf5b0f20e2b2 Mon Sep 17 00:00:00 2001 From: wzp Date: Mon, 23 Dec 2024 12:44:50 +0800 Subject: [PATCH] fix: fix room cannot be clean's bug --- .../org/mmga/clubs/controller/ChessController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/mmga/clubs/controller/ChessController.java b/src/main/java/org/mmga/clubs/controller/ChessController.java index c9aa809..e7b9a22 100644 --- a/src/main/java/org/mmga/clubs/controller/ChessController.java +++ b/src/main/java/org/mmga/clubs/controller/ChessController.java @@ -211,7 +211,7 @@ public class ChessController { } @Nullable - private Room getRoomByPlayer(String id) { + private static Room getRoomByPlayer(String id) { for (Room value : rooms.values()) { if (value.isIn(id)) return value; } @@ -220,8 +220,12 @@ public class ChessController { @OnClose public void onClose(Session session) { + staticOnClose(session); + } + + public static void staticOnClose(Session session) { String sessionId = session.getId(); - Room roomByPlayer = this.getRoomByPlayer(sessionId); + Room roomByPlayer = getRoomByPlayer(sessionId); if (roomByPlayer != null) { roomByPlayer.leave(session); roomByPlayer.broadcast(roomByPlayer.getRoomInfo(users)); @@ -238,7 +242,11 @@ public class ChessController { for (Session value : sessions.values()) { if (!pingPong.getOrDefault(value, true)) { log.info("closed by connectionManager"); - value.close(new CloseReason(CloseReason.CloseCodes.CLOSED_ABNORMALLY, "链接延迟过高")); + if (value.isOpen()) { + value.close(new CloseReason(CloseReason.CloseCodes.CLOSED_ABNORMALLY, "链接延迟过高")); + continue; + } + staticOnClose(value); continue; } pingPong.put(value, false);