Trying to fix issue with the service.

This commit is contained in:
marcins78@gmail.com
2013-04-13 01:57:35 +00:00
parent 433eefabea
commit 6db83c2d0b
4 changed files with 29 additions and 25 deletions

View File

@@ -66,26 +66,30 @@ public class LongPollingSystem {
@Override
public void run() {
while (true) {
Set<ResourceWaitingRequest> resourcesCopy;
synchronized (_waitingActions) {
resourcesCopy = new HashSet<ResourceWaitingRequest>(_waitingActions);
}
long now = System.currentTimeMillis();
Iterator<ResourceWaitingRequest> 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<ResourceWaitingRequest> resourcesCopy;
synchronized (_waitingActions) {
resourcesCopy = new HashSet<ResourceWaitingRequest>(_waitingActions);
}
long now = System.currentTimeMillis();
Iterator<ResourceWaitingRequest> 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();

View File

@@ -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();
}

View File

@@ -10,7 +10,7 @@ import java.util.List;
public class ChatCommunicationChannel implements ChatRoomListener, LongPollableResource {
private List<ChatMessage> _messages = new LinkedList<ChatMessage>();
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;
}
}

View File

@@ -10,13 +10,13 @@ import java.util.*;
public class HallCommunicationChannel implements LongPollableResource {
private int _channelNumber;
private long _lastConsumed;
private String _lastMotd;
private Map<String, Map<String, String>> _tournamentQueuePropsOnClient = new LinkedHashMap<String, Map<String, String>>();
private Map<String, Map<String, String>> _tournamentPropsOnClient = new LinkedHashMap<String, Map<String, String>>();
private Map<String, Map<String, String>> _tablePropsOnClient = new LinkedHashMap<String, Map<String, String>>();
private Set<String> _playedGames = new HashSet<String>();
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();
}