X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fpicking%2FSocketManager.java;h=bc9dd59a8455fbecf1580384f6c94055c5f29288;hb=f5306591821b5f6d4e381ff30b647bd149d51f43;hp=5df3c43b3a2be692799602e409822d9a690eafa0;hpb=c8fdf290404aef51316aafd6422afdf49f5f025d;p=vamsas.git diff --git a/src/uk/ac/vamsas/client/picking/SocketManager.java b/src/uk/ac/vamsas/client/picking/SocketManager.java index 5df3c43..bc9dd59 100644 --- a/src/uk/ac/vamsas/client/picking/SocketManager.java +++ b/src/uk/ac/vamsas/client/picking/SocketManager.java @@ -26,6 +26,8 @@ public class SocketManager implements IPickManager private IMessageHandler msgHandler; + private boolean isRunning = true; + /** * Constructs a new PickManager. This method will return immediately, while * a looping thread runs that attempts to run the server or connect to an @@ -33,7 +35,7 @@ public class SocketManager implements IPickManager */ public SocketManager() { -// logger.setLevel(Level.OFF); + //logger.setLevel(Level.OFF); server = new PickServer(this); clients = new LinkedList(); @@ -92,13 +94,18 @@ public class SocketManager implements IPickManager */ private void forwardMessage(PickEndPoint origin, Message message) { - ListIterator itor = clients.listIterator(); - while (itor.hasNext()) + for (int i = clients.size()-1; i >= 0; i--) { - PickEndPoint client = (PickEndPoint) itor.next(); - - if (client != origin) - client.send(message); + try + { + PickEndPoint client = (PickEndPoint) clients.get(i); + if (client != origin) + client.send(message); + } + catch (Exception e) + { + System.out.println("FORWARD: " + e); + } } } @@ -130,8 +137,8 @@ public class SocketManager implements IPickManager //logger.info("List now contains " + clients.size() + " client(s)"); // If there's no endpoints left, then we've lost all connections and - // need to reinitialize - if (clients.size() == 0) + // need to reinitialize - but only if we've not been told to stop + if (clients.size() == 0 && isRunning) new InitializeThread().start(); } @@ -142,15 +149,15 @@ public class SocketManager implements IPickManager { public void run() { - //logger.info("Initializing connection..."); + logger.debug("Initializing connection..."); boolean connected = false; // Loop until we can get a connection (one way or the other) - while (!connected) + while (!connected && isRunning) { // Sleep for a rnd time so we don't end up with all the VAMSAS // apps trying to initialize servers at the same time - try { Thread.sleep((int)Math.random()); } + try { Thread.sleep((int)(10*Math.random())); } catch (InterruptedException e) {} // Attempt to open the server port... @@ -161,19 +168,25 @@ public class SocketManager implements IPickManager else if (addEndPoint(null)) connected = true; } + logger.debug("Completed initializing connection."); } } - public void haltManager() { - // TODO: FIX this method - if (server==null) - throw new Error("Client Implementation Error: haltManager called on uninitialized SocketManager."); - logger.debug("Halting PickManager threads..."); - while (clients.size()>0) { - ((PickEndPoint)clients.getFirst()).haltEndpoint(); - } - server.haltServer(); - - logger.debug("Halted PickManager threads."); - + + public void shutdown() + { + logger.debug("Shutting down socket manager."); + if (server == null) + throw new Error("Client Implementation Error: shutdown() called on uninitialized SocketManager."); + + isRunning = false; + + if (server.isServer()) + server.terminate(); + + while (clients.size() > 0) { + logger.debug("Closing endpoint."); + ((PickEndPoint)clients.getFirst()).terminate(); + } + logger.debug("Shutdown of socketmanager completed."); } } \ No newline at end of file