diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringChatRoomListener.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringChatRoomListener.java index 44f969e1d..bc8493a2d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringChatRoomListener.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringChatRoomListener.java @@ -3,11 +3,13 @@ package com.gempukku.lotro; import com.gempukku.lotro.chat.ChatMessage; import com.gempukku.lotro.chat.ChatRoomListener; +import java.util.Date; import java.util.LinkedList; import java.util.List; public class GatheringChatRoomListener implements ChatRoomListener { private List _messages = new LinkedList(); + private Date _lastConsumed = new Date(); @Override public void messageReceived(ChatMessage message) { @@ -17,6 +19,11 @@ public class GatheringChatRoomListener implements ChatRoomListener { public List consumeMessages() { List messages = _messages; _messages = new LinkedList(); + _lastConsumed = new Date(); return messages; } + + public Date getLastConsumed() { + return _lastConsumed; + } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java index 6a3300c4e..9d26e6880 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java @@ -13,7 +13,7 @@ import java.util.List; public class GatheringParticipantCommunicationChannel implements GameStateListener { private List _events = new LinkedList(); private String _self; - private Date _lastConsumed; + private Date _lastConsumed = new Date(); public GatheringParticipantCommunicationChannel(String self) { _self = self; 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 f06278e35..70b771a23 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 @@ -11,6 +11,8 @@ public class ChatRoomMediator { private Map _listeners = new HashMap(); + private final int _channelInactivityTimeoutPeriod = 1000 * 10; // 10 seconds + public synchronized List joinUser(String playerId) { GatheringChatRoomListener value = new GatheringChatRoomListener(); _listeners.put(playerId, value); @@ -33,4 +35,16 @@ public class ChatRoomMediator { public synchronized void sendMessage(String playerId, String message) { _chatRoom.postMessage(playerId, message); } + + public synchronized void cleanup() { + long currentTime = System.currentTimeMillis(); + for (Map.Entry playerListener : _listeners.entrySet()) { + String playerId = playerListener.getKey(); + GatheringChatRoomListener listener = playerListener.getValue(); + if (currentTime > listener.getLastConsumed().getTime() + _channelInactivityTimeoutPeriod) { + _chatRoom.partChatRoom(playerId); + _listeners.remove(playerId); + } + } + } } 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 094e6b4b0..44879ef96 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 @@ -37,7 +37,8 @@ public class ChatServer { } private void cleanup() { - // TODO cleanup server + for (ChatRoomMediator chatRoomMediator : _chatRooms.values()) + chatRoomMediator.cleanup(); } private class CleaningTask implements Runnable { @@ -47,7 +48,7 @@ public class ChatServer { while (_running) { cleanup(); try { - Thread.sleep(100); + Thread.sleep(1000); } catch (InterruptedException e) { // Ignore } diff --git a/gemp-lotr/todo.txt b/gemp-lotr/todo.txt index 196ec1861..e80f0b71d 100644 --- a/gemp-lotr/todo.txt +++ b/gemp-lotr/todo.txt @@ -1,11 +1,10 @@ TO DO: -17. Timeout users from ChatServer the same way they are timed out of GameServer. +9. Add checkbox option to auto-pass if there is no actions to be played. 8. Add checkbox option to auto-accept choices on the client, also allow to cancel selection to reset to none-selected and go with different selection. -9. Add checkbox option to auto-pass if there is no actions to be played. 15. Add join game screen, where players can choose to play and get paired automatically when a pair becomes available. -16. Add an option to view an ongoing game. 18. Add display of site where player is on adventure path. +16. Add an option to view an ongoing game. 13. Add dead/discard pile displays. 14. Add hand/deck card count displays. @@ -28,3 +27,4 @@ with Filters.sameCard(...) filter. 11. Merge Shadow and FP support area on the UI and extend the Shadow and FP characters window. 12. Add rule of 4. 6. Change how the assignments and skirmish are displayed in the user interface, to avoid using Dialogs. +17. Timeout users from ChatServer the same way they are timed out of GameServer.