diff options
4 files changed, 37 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/ClientService.java b/same/src/main/java/com/orbekk/same/ClientService.java index 9382bfa..3992e4c 100644 --- a/same/src/main/java/com/orbekk/same/ClientService.java +++ b/same/src/main/java/com/orbekk/same/ClientService.java @@ -4,4 +4,7 @@ public interface ClientService { void notifyNetwork(String networkName, String masterUrl) throws Exception; void setState(String component, String data, long revision) throws Exception; + + // Manual discovery request by client. + void discoveryRequest(String remoteUrl) throws Exception; } 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); + } } diff --git a/same/src/main/java/com/orbekk/same/SameController.java b/same/src/main/java/com/orbekk/same/SameController.java index 38c4149..9b8abde 100644 --- a/same/src/main/java/com/orbekk/same/SameController.java +++ b/same/src/main/java/com/orbekk/same/SameController.java @@ -65,10 +65,12 @@ public class SameController implements UrlReceiver { public void start() throws Exception { server.start(); master.start(); + client.start(); } public void stop() { try { + client.interrupt(); master.interrupt(); server.stop(); } catch (Exception e) { diff --git a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java index 90971c4..a309e38 100644 --- a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java +++ b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java @@ -27,6 +27,11 @@ public class MasterServiceImplTest { throws Exception { throw new Exception("Unreachable client"); } + + @Override + public void discoveryRequest(String remoteUrl) throws Exception { + throw new Exception("Unreachable client"); + } } @Before |