From 58b6e4b42295d387eec6a5c340f5d4b306e62ab1 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Fri, 5 Apr 2013 17:14:11 +0000 Subject: [PATCH] Better handling of long requests, channels are notified of waiting request every tick (1s) so that it should not timeout due to it. --- .../java/com/gempukku/polling/LongPollableResource.java | 2 ++ .../main/java/com/gempukku/polling/LongPollingSystem.java | 2 ++ .../lotro/game/state/GameCommunicationChannel.java | 8 +++++++- .../gempukku/lotro/draft/DraftCommunicationChannel.java | 7 ++++++- .../com/gempukku/lotro/game/ChatCommunicationChannel.java | 5 +++++ .../com/gempukku/lotro/hall/HallCommunicationChannel.java | 5 +++++ 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollableResource.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollableResource.java index fa45babec..51232b966 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollableResource.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollableResource.java @@ -10,4 +10,6 @@ public interface LongPollableResource { public boolean registerRequest(WaitingRequest waitingRequest); public void deregisterRequest(WaitingRequest waitingRequest); + + public void requestWaitingNotification(); } diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollingSystem.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollingSystem.java index 27bfdc097..46c2545a2 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollingSystem.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/polling/LongPollingSystem.java @@ -82,6 +82,8 @@ public class LongPollingSystem { waitingRequest.getLongPollableResource().deregisterRequest(waitingRequest); _waitingActions.remove(waitingRequest); execute(waitingRequest.getLongPollingResource()); + } else { + waitingRequest.getLongPollableResource().requestWaitingNotification(); } } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameCommunicationChannel.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameCommunicationChannel.java index b243bc14b..e17b57e9e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameCommunicationChannel.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.game.state; import com.gempukku.lotro.common.Token; import com.gempukku.lotro.communication.GameStateListener; import com.gempukku.lotro.game.PhysicalCard; -import static com.gempukku.lotro.game.state.GameEvent.Type.*; import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.timing.GameStats; import com.gempukku.polling.LongPollableResource; @@ -11,6 +10,8 @@ import com.gempukku.polling.WaitingRequest; import java.util.*; +import static com.gempukku.lotro.game.state.GameEvent.Type.*; + public class GameCommunicationChannel implements GameStateListener, LongPollableResource { private List _events = Collections.synchronizedList(new LinkedList()); private String _self; @@ -49,6 +50,11 @@ public class GameCommunicationChannel implements GameStateListener, LongPollable return false; } + @Override + public void requestWaitingNotification() { + // Ignore, we do not remove user from it + } + private synchronized void appendEvent(GameEvent event) { _events.add(event); if (_waitingRequest != null) { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCommunicationChannel.java index 4b7563b70..c824381d4 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCommunicationChannel.java @@ -34,7 +34,7 @@ public class DraftCommunicationChannel implements LongPollableResource { } @Override - public boolean registerRequest(WaitingRequest waitingRequest) { + public synchronized boolean registerRequest(WaitingRequest waitingRequest) { if (_changed) return true; @@ -42,6 +42,11 @@ public class DraftCommunicationChannel implements LongPollableResource { return false; } + @Override + public synchronized void requestWaitingNotification() { + updateLastAccess(); + } + public synchronized void draftChanged() { _changed = true; if (_waitingRequest != null) { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/ChatCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/ChatCommunicationChannel.java index bc18b69d5..fa4e69ba7 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/ChatCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/ChatCommunicationChannel.java @@ -27,6 +27,11 @@ public class ChatCommunicationChannel implements ChatRoomListener, LongPollableR return false; } + @Override + public synchronized void requestWaitingNotification() { + updateLastAccess(); + } + @Override public synchronized void messageReceived(ChatMessage message) { _messages.add(message); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java index a91c5527e..ff66fc81d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallCommunicationChannel.java @@ -37,6 +37,11 @@ public class HallCommunicationChannel implements LongPollableResource { return false; } + @Override + public synchronized void requestWaitingNotification() { + updateLastAccess(); + } + public synchronized void hallChanged() { _changed = true; if (_waitingRequest != null) {