X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fpicking%2FPickEndPoint.java;h=b5b0a9a78629031dc365999a3ef545af09b21bef;hb=f5306591821b5f6d4e381ff30b647bd149d51f43;hp=ac45278e011fdb945dd39a476463573e8aa7fb91;hpb=7f5605c5ced2a123e747cb2fdfc3fafbe72dee9f;p=vamsas.git diff --git a/src/uk/ac/vamsas/client/picking/PickEndPoint.java b/src/uk/ac/vamsas/client/picking/PickEndPoint.java index ac45278..b5b0a9a 100644 --- a/src/uk/ac/vamsas/client/picking/PickEndPoint.java +++ b/src/uk/ac/vamsas/client/picking/PickEndPoint.java @@ -4,15 +4,19 @@ import java.io.*; import java.net.*; import java.util.logging.*; +import org.apache.commons.logging.Log; + class PickEndPoint extends Thread { - private Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking"); + private Log logger = org.apache.commons.logging.LogFactory.getLog(uk.ac.vamsas.client.picking.PickEndPoint.class); private Socket socket; private int rPort; private BufferedWriter os; private BufferedReader in; - + /** + * reference to server or null if no comms session active + */ private SocketManager manager; PickEndPoint(SocketManager manager, Socket s) @@ -37,15 +41,15 @@ class PickEndPoint extends Thread in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // Start the thread to listen for incoming messages -// logger.info("CLIENT: connection successful to port " -// + socket.getPort() + " via port " + socket.getLocalPort()); + logger.debug("CLIENT: connection successful to port " + + socket.getPort() + " via port " + socket.getLocalPort()); start(); return true; } catch (Exception e) { - //logger.info("CLIENT: connection failed: " + e); + logger.info("CLIENT: connection failed: " + e); return false; } } @@ -67,7 +71,7 @@ class PickEndPoint extends Thread { //logger.info("CLIENT: failed to send"); - // TODO: terminate the connection on a failed send or retry? + // TODO: terminate the connection on a failed send or retry? (Has this been done? JBP) terminate(); } } @@ -77,7 +81,7 @@ class PickEndPoint extends Thread { try { - while (true) + while (manager!=null) { String str = in.readLine(); //logger.info("CLIENT: recv " + str + " from " + rPort); @@ -98,27 +102,38 @@ class PickEndPoint extends Thread // terminate this endpoint (if this is server side) //logger.info("CLIENT: read failed: " + e); - terminate(); + terminate(); // this may not be necessary - probably caused infinite loop on terminate() without null checks } } - private void terminate() + void terminate() { - try { socket.close(); } - catch (IOException e) {} - - //logger.info("CLIENT: closing connection to port " + socket.getPort()); - manager.removeEndPoint(this); + SocketManager mgr=manager; + manager=null; // stops receive thread + if (socket!=null) { + try { socket.close(); } + catch (IOException e) {} + socket=null; + } + //logger.info("CLIENT: closing connection to port " + socket.getPort()); + // terminate() can be called by the socket manager to shutdown the connection, + // or the receive thread after an exception has been received + // (which includes the above case when the socket is closed. + // so we only want to removeEndPoint once - for the initial call to terminate() + if (mgr!=null) + mgr.removeEndPoint(this); } private Message strToMessage(String str) { try { - if (str.startsWith("CUSTOM_")) - return new CustomMessage(str.substring(7)); + if (str==null || str.length()==1) + return null; + if (str.startsWith("CUSTOM")) + return new CustomMessage(str.substring(6)); - if (str.startsWith("MOUSEOVER_")) + if (str.startsWith("MOUSEOVER")) return new MouseOverMessage(str); } catch (Exception e)