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 46c2545a2..5499e2b2a 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 @@ -66,26 +66,30 @@ public class LongPollingSystem { @Override public void run() { while (true) { - Set resourcesCopy; - synchronized (_waitingActions) { - resourcesCopy = new HashSet(_waitingActions); - } - - long now = System.currentTimeMillis(); - Iterator iterator = resourcesCopy.iterator(); - while (iterator.hasNext()) { - ResourceWaitingRequest waitingRequest = iterator.next(); - if (waitingRequest.getLongPollingResource().wasProcessed()) - _waitingActions.remove(waitingRequest); - else { - if (waitingRequest.getStart() + _pollingLength < now) { - waitingRequest.getLongPollableResource().deregisterRequest(waitingRequest); + try { + Set resourcesCopy; + synchronized (_waitingActions) { + resourcesCopy = new HashSet(_waitingActions); + } + + long now = System.currentTimeMillis(); + Iterator iterator = resourcesCopy.iterator(); + while (iterator.hasNext()) { + ResourceWaitingRequest waitingRequest = iterator.next(); + if (waitingRequest.getLongPollingResource().wasProcessed()) _waitingActions.remove(waitingRequest); - execute(waitingRequest.getLongPollingResource()); - } else { - waitingRequest.getLongPollableResource().requestWaitingNotification(); + else { + if (waitingRequest.getStart() + _pollingLength < now) { + waitingRequest.getLongPollableResource().deregisterRequest(waitingRequest); + _waitingActions.remove(waitingRequest); + execute(waitingRequest.getLongPollingResource()); + } else { + waitingRequest.getLongPollableResource().requestWaitingNotification(); + } } } + } catch (Exception exp) { + _log.error("Failure while processing polling requests", exp); } pause(); 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 c824381d4..d9d2efd17 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 @@ -6,10 +6,10 @@ import com.gempukku.polling.WaitingRequest; public class DraftCommunicationChannel implements LongPollableResource { private int _channelNumber; - private long _lastAccessed; private String _cardChoiceOnClient; private volatile boolean _changed; + private volatile long _lastAccessed; private volatile WaitingRequest _waitingRequest; public DraftCommunicationChannel(int channelNumber) { @@ -43,7 +43,7 @@ public class DraftCommunicationChannel implements LongPollableResource { } @Override - public synchronized void requestWaitingNotification() { + public void requestWaitingNotification() { updateLastAccess(); } 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 fa4e69ba7..3dd0bd66a 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 @@ -10,7 +10,7 @@ import java.util.List; public class ChatCommunicationChannel implements ChatRoomListener, LongPollableResource { private List _messages = new LinkedList(); - private long _lastConsumed = System.currentTimeMillis(); + private volatile long _lastConsumed = System.currentTimeMillis(); private volatile WaitingRequest _waitingRequest; @Override @@ -28,7 +28,7 @@ public class ChatCommunicationChannel implements ChatRoomListener, LongPollableR } @Override - public synchronized void requestWaitingNotification() { + public void requestWaitingNotification() { updateLastAccess(); } @@ -53,11 +53,11 @@ public class ChatCommunicationChannel implements ChatRoomListener, LongPollableR return _messages.size() > 0; } - private synchronized void updateLastAccess() { + private void updateLastAccess() { _lastConsumed = System.currentTimeMillis(); } - public synchronized long getLastAccessed() { + public long getLastAccessed() { return _lastConsumed; } } 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 ff66fc81d..f44a29cc9 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 @@ -10,13 +10,13 @@ import java.util.*; public class HallCommunicationChannel implements LongPollableResource { private int _channelNumber; - private long _lastConsumed; private String _lastMotd; private Map> _tournamentQueuePropsOnClient = new LinkedHashMap>(); private Map> _tournamentPropsOnClient = new LinkedHashMap>(); private Map> _tablePropsOnClient = new LinkedHashMap>(); private Set _playedGames = new HashSet(); private volatile boolean _changed; + private volatile long _lastConsumed; private volatile WaitingRequest _waitingRequest; public HallCommunicationChannel(int channelNumber) { @@ -38,7 +38,7 @@ public class HallCommunicationChannel implements LongPollableResource { } @Override - public synchronized void requestWaitingNotification() { + public void requestWaitingNotification() { updateLastAccess(); }