Picking API now has message classes and basic implementation of interfaces (for its...
[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 /**\r
8  * Server class that listens for incoming connections on a predefined port.\r
9  */\r
10 class PickServer extends Thread\r
11 {\r
12         private Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking");\r
13         \r
14         // The port number we'll listen on\r
15         static final int PORT = 53782;\r
16         \r
17         private ServerSocket serverSocket;\r
18         // Set to true once the server is established\r
19         private boolean isServer = false;\r
20         \r
21         private SocketManager manager;\r
22         \r
23         /**\r
24          * Constructs a new instance of the server (but doesn't start it).\r
25          * @param manager a reference to the pick manager that owns this server\r
26          */\r
27         PickServer(SocketManager manager)\r
28         {\r
29                 this.manager = manager;\r
30         }\r
31         \r
32         /**\r
33          * Returns true if this server instance is running.\r
34          * Return true if this server instance is running\r
35          */\r
36         boolean isServer()\r
37                 { return isServer; }\r
38         \r
39         /**\r
40          * Attempts to create the server by opening a server socket on the port.\r
41          * @return true if the server was created; false otherwise\r
42          */\r
43         boolean createServer()\r
44         {\r
45                 try\r
46                 {\r
47                         serverSocket = new ServerSocket(PORT);\r
48                         start();                        \r
49                         \r
50                         return isServer = true;\r
51                 }\r
52                 catch (IOException e)\r
53                 {\r
54                         logger.info("SERVER: " + e);\r
55                         return false;\r
56                 }\r
57         }\r
58         \r
59         /**\r
60          * Thread listening method - loops indefinitely listening for connections.\r
61          * When one is received, the socket object is passed to the manager so it\r
62          * can make a full client connection for further comms.\r
63          */\r
64         public void run()\r
65         {\r
66                 logger.info("SERVER: listening on " + PORT + " - SERVER");\r
67                 \r
68                 // Loop forever, accepting connectons from other clients\r
69                 // TODO: add in the ability to terminate the server if a VAMSAS session\r
70                 // is ended\r
71                 while (true)\r
72                 {\r
73                         try\r
74                         {\r
75                                 Socket socket = serverSocket.accept();                          \r
76                                 logger.info("SERVER: connection detected");\r
77                                 \r
78                                 manager.addEndPoint(socket);\r
79                         }\r
80                         catch (IOException e) {}\r
81                 }\r
82         }\r
83 }