diff options
Diffstat (limited to 'same/src/main/java/com/orbekk/same/ClientServiceImpl.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/ClientServiceImpl.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java index 92482d5..f19d272 100644 --- a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java +++ b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java @@ -2,10 +2,15 @@ package com.orbekk.same; import static com.orbekk.same.StackTraceUtil.throwableToString; +import java.util.ArrayList; +import java.util.List; + import org.codehaus.jackson.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.orbekk.util.WorkQueue; + public class ClientServiceImpl implements ClientService, UrlReceiver, DiscoveryListener { private Logger logger = LoggerFactory.getLogger(getClass()); @@ -15,11 +20,28 @@ public class ClientServiceImpl implements ClientService, UrlReceiver, private StateChangedListener stateListener; private NetworkNotificationListener networkListener; + private WorkQueue<String> discoveryThread = new WorkQueue<String>() { + @Override protected void onChange() { + List<String> pending = getAndClear(); + for (String url : pending) { + discover(url); + } + } + }; + public ClientServiceImpl(State state, ConnectionManager connections) { this.state = state; this.connections = connections; } + public void start() { + discoveryThread.start(); + } + + public void interrupt() { + discoveryThread.interrupt(); + } + @Override public void notifyNetwork(String networkName, String masterUrl) { logger.info("NotifyNetwork(networkName={}, masterUrl={})", @@ -122,4 +144,9 @@ public class ClientServiceImpl implements ClientService, UrlReceiver, } } } + + @Override + public void discoveryRequest(String remoteUrl) { + discoveryThread.add(remoteUrl); + } } |