From 62b870517208aa1ce765cd68da75083cff3f4c1c Mon Sep 17 00:00:00 2001 From: "jakub.salavec" Date: Tue, 15 Apr 2025 13:03:53 +0200 Subject: [PATCH] Fix - old draft chat rooms are now destroyed automatically by chat server during cleanup instead of manually by tournament --- .../java/com/gempukku/lotro/chat/ChatRoom.java | 4 ++++ .../com/gempukku/lotro/chat/ChatRoomMediator.java | 4 ++++ .../java/com/gempukku/lotro/chat/ChatServer.java | 15 +++++++++++++++ .../lotro/tournament/TableDraftTournament.java | 4 ---- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoom.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoom.java index f48908a1a..951fe194a 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoom.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoom.java @@ -66,6 +66,10 @@ public class ChatRoom { } } + public long getSecsSinceLastMessage() { + return (System.currentTimeMillis() - _lastMessages.getLast().getWhen().getTime()) / 1000; + } + private void shrinkLastMessages() { while (_lastMessages.size() > MAX_MESSAGE_HISTORY_COUNT) { _lastMessages.removeFirst(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java index 92763ac64..e06eac5be 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java @@ -189,4 +189,8 @@ public class ChatRoomMediator { _lock.readLock().unlock(); } } + + public long getSecsSinceLastMessage() { + return _chatRoom.getSecsSinceLastMessage(); + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java index 3b6104f95..9db1229df 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.PrivateInformationException; import com.gempukku.lotro.db.IgnoreDAO; import com.gempukku.lotro.db.PlayerDAO; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -72,6 +73,20 @@ public class ChatServer extends AbstractServer { } protected void cleanup() { + // remove draft chat rooms if they are unused + Set toRemove = new HashSet<>(); + _chatRooms.forEach((roomName, chatRoomMediator) -> { + if (roomName.startsWith("Draft-") + && chatRoomMediator.getUsersInRoom(true).size() == 0 + && chatRoomMediator.getSecsSinceLastMessage() > 5 * 60) { + + // empty draft chat room without any messages sends in last 45 minutes + toRemove.add(roomName); + } + }); + + toRemove.forEach(this::destroyChatRoom); + for (ChatRoomMediator chatRoomMediator : _chatRooms.values()) chatRoomMediator.cleanup(); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TableDraftTournament.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TableDraftTournament.java index 119a30879..f20621ce4 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TableDraftTournament.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/TableDraftTournament.java @@ -199,10 +199,6 @@ public class TableDraftTournament extends BaseTournament implements Tournament { _tournamentInfo.Stage = Stage.PLAYING_GAMES; _tournamentService.recordTournamentStage(_tournamentId, getTournamentStage()); } else if (getTournamentStage() == Stage.PLAYING_GAMES) { - - // Chat room no longer needed - kept alive during deck-building if people stayed longer - chatServer.destroyChatRoom("Draft-" + tableDraftInfo.tableDraftParams.tournamentId); - if (_currentlyPlayingPlayers.isEmpty()) { if (_tournamentInfo.PairingMechanism.isFinished(getCurrentRound(), _players, _droppedPlayers)) { result.add(finishTournament(collectionsManager));