new marshaller instance ensures we use marshalling properties and correct validation...
[vamsas.git] / src / uk / ac / vamsas / client / picking / PickServer.java
index 61884a3..3198427 100644 (file)
@@ -4,12 +4,14 @@ import java.io.*;
 import java.net.*;\r
 import java.util.logging.*;\r
 \r
+import org.apache.commons.logging.Log;\r
+\r
 /**\r
  * Server class that listens for incoming connections on a predefined port.\r
  */\r
 class PickServer extends Thread\r
 {\r
-       private static Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking");\r
+       private Log logger = org.apache.commons.logging.LogFactory.getLog(uk.ac.vamsas.client.picking.PickServer.class);\r
        \r
        // The port number we'll listen on\r
        static final int PORT = 53782;\r
@@ -17,14 +19,15 @@ class PickServer extends Thread
        private ServerSocket serverSocket;\r
        // Set to true once the server is established\r
        private boolean isServer = false;\r
-       \r
-       private PickManager manager;\r
+  // Set to false when server is shutting down\r
+       private boolean isAlive= true;\r
+       private SocketManager manager;\r
        \r
        /**\r
         * Constructs a new instance of the server (but doesn't start it).\r
         * @param manager a reference to the pick manager that owns this server\r
         */\r
-       PickServer(PickManager manager)\r
+       PickServer(SocketManager manager)\r
        {\r
                this.manager = manager;\r
        }\r
@@ -51,7 +54,7 @@ class PickServer extends Thread
                }\r
                catch (IOException e)\r
                {\r
-                       logger.info("SERVER: " + e);\r
+                       logger.debug("SERVER: " + e);\r
                        return false;\r
                }\r
        }\r
@@ -63,21 +66,33 @@ class PickServer extends Thread
         */\r
        public void run()\r
        {\r
-               logger.fine("SERVER: listening on " + PORT + " - SERVER");\r
+               logger.debug("SERVER: listening on " + PORT + " - SERVER");\r
                \r
                // Loop forever, accepting connectons from other clients\r
                // TODO: add in the ability to terminate the server if a VAMSAS session\r
                // is ended\r
-               while (true)\r
+               while (isAlive)\r
                {\r
                        try\r
                        {\r
                                Socket socket = serverSocket.accept();                          \r
-                               logger.fine("SERVER: connection detected");\r
-                               \r
-                               manager.addEndPoint(socket);\r
+                               logger.info("SERVER: connection detected");\r
+                               if (isAlive)\r
+                                       manager.addEndPoint(socket);\r
                        }\r
                        catch (IOException e) {}\r
                }\r
        }\r
+       \r
+       void terminate()\r
+       {\r
+               logger.debug("Server shutting down...");\r
+               isAlive=false;\r
+               try { serverSocket.close(); }\r
+               catch (Exception e)\r
+               {\r
+                       logger.error(e);\r
+               }\r
+    logger.debug("Server shut down complete.");\r
+       }\r
 }
\ No newline at end of file