added (broken) haltPickManager methods
[vamsas.git] / src / uk / ac / vamsas / client / picking / PickServer.java
1 package uk.ac.vamsas.client.picking;\r
2 \r
3 import java.io.*;\r
4 import java.net.*;\r
5 import java.util.logging.*;\r
6 \r
7 import org.apache.commons.logging.Log;\r
8 \r
9 /**\r
10  * Server class that listens for incoming connections on a predefined port.\r
11  */\r
12 class PickServer extends Thread\r
13 {\r
14         private Log logger = org.apache.commons.logging.LogFactory.getLog(uk.ac.vamsas.client.picking.PickServer.class);\r
15         \r
16         // The port number we'll listen on\r
17         static final int PORT = 53782;\r
18         \r
19         private ServerSocket serverSocket;\r
20         // Set to true once the server is established\r
21         private boolean isServer = false;\r
22         \r
23         private SocketManager manager;\r
24         \r
25         /**\r
26          * Constructs a new instance of the server (but doesn't start it).\r
27          * @param manager a reference to the pick manager that owns this server\r
28          */\r
29         PickServer(SocketManager manager)\r
30         {\r
31                 this.manager = manager;\r
32         }\r
33         \r
34         /**\r
35          * Returns true if this server instance is running.\r
36          * Return true if this server instance is running\r
37          */\r
38         boolean isServer()\r
39                 { return isServer; }\r
40         \r
41         /**\r
42          * Attempts to create the server by opening a server socket on the port.\r
43          * @return true if the server was created; false otherwise\r
44          */\r
45         boolean createServer()\r
46         {\r
47                 try\r
48                 {\r
49                         serverSocket = new ServerSocket(PORT);\r
50                         start();                        \r
51                         \r
52                         return isServer = true;\r
53                 }\r
54                 catch (IOException e)\r
55                 {\r
56                         //logger.info("SERVER: " + e);\r
57                         return false;\r
58                 }\r
59         }\r
60   /**\r
61    * state of server thread - running or not running\r
62    */\r
63         private boolean running=false;\r
64   /**\r
65    * condition for server thread to stop\r
66    */\r
67   private boolean enabled=true;\r
68   public void haltServer() {\r
69   // TODO: FIX THIS METHOD\r
70     if (!running || !enabled) {\r
71       logger.debug("PickServer is not running or already requested to halt.");\r
72       return;\r
73     }\r
74     logger.debug("Disabling pick server.");\r
75     enabled=false;\r
76     while (running) {\r
77       try {\r
78         serverSocket.close();\r
79       } catch (Exception e) {\r
80         \r
81       }\r
82       try {\r
83         Thread.sleep(5);\r
84       } catch (Exception e) {\r
85       }\r
86     }\r
87     logger.debug("Pick server has stopped.");\r
88   }\r
89         /**\r
90          * Thread listening method - loops indefinitely listening for connections.\r
91          * When one is received, the socket object is passed to the manager so it\r
92          * can make a full client connection for further comms.\r
93          */\r
94         public void run()\r
95         {\r
96     enabled=true;\r
97     running=true;\r
98                 //logger.info("SERVER: listening on " + PORT + " - SERVER");\r
99                 \r
100                 // Loop forever, accepting connectons from other clients\r
101                 // TODO: terminate the server when haltServer is called (fails tests currently) \r
102     while (enabled)\r
103                 {\r
104                         try\r
105                         {\r
106                                 Socket socket = serverSocket.accept();                          \r
107                                 //logger.info("SERVER: connection detected");\r
108                                 \r
109                                 manager.addEndPoint(socket);\r
110                         }\r
111                         catch (IOException e) {}\r
112                 }\r
113     running=false;\r
114     manager.haltManager();\r
115     \r
116         }\r
117 }