refactored org to uk
[vamsas.git] / src / uk / ac / vamsas / client / picking / PickEndPoint.java
diff --git a/src/uk/ac/vamsas/client/picking/PickEndPoint.java b/src/uk/ac/vamsas/client/picking/PickEndPoint.java
new file mode 100644 (file)
index 0000000..951e8d4
--- /dev/null
@@ -0,0 +1,101 @@
+package uk.ac.vamsas.client.picking;\r
+\r
+import java.io.*;\r
+import java.net.*;\r
+\r
+class PickEndPoint extends Thread\r
+{\r
+       private Socket socket;\r
+       private int rPort;\r
+       private BufferedWriter os;\r
+       private BufferedReader in;\r
+\r
+       private PickManager manager;    \r
+       \r
+       PickEndPoint(PickManager manager, Socket s)\r
+       {\r
+               this.manager = manager;\r
+               socket = s;\r
+       }\r
+       \r
+       boolean openConnection()\r
+       {\r
+               try\r
+               {\r
+                       // Create the socket if it doesn't already exist\r
+                       if (socket == null)\r
+                               socket = new Socket(InetAddress.getLocalHost(), PickServer.PORT);\r
+                       \r
+                       rPort = socket.getPort();\r
+                       socket.setKeepAlive(true);\r
+                                               \r
+                       // Open the streams for reading/writing\r
+                       os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));\r
+                       in = new BufferedReader(new InputStreamReader(socket.getInputStream()));\r
+               \r
+                       // Start the thread to listen for incoming messages\r
+                       System.out.println("CLIENT: connection successful to port "\r
+                               + socket.getPort() + " via port " + socket.getLocalPort());\r
+                       start();\r
+                       \r
+                       return true;\r
+               }\r
+               catch (Exception e)\r
+               {\r
+                       System.out.println("CLIENT: connection failed: " + e);\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       void send(String str)\r
+       {\r
+               try\r
+               {\r
+                       System.out.println("CLIENT: send " + str + " to " + rPort);\r
+                       os.write(str);\r
+                       \r
+                       // We use a newline to terminate the message\r
+                       os.newLine();\r
+                       os.flush();\r
+               }\r
+               catch (Exception e)\r
+               {\r
+                       System.out.println("CLIENT: failed to send");\r
+                       \r
+                       // TODO: terminate the connection on a failed send or retry?\r
+                       terminate();\r
+               }\r
+       }\r
+       \r
+       // void receive() (threaded)\r
+       public void run()\r
+       {\r
+               try\r
+               {\r
+                       while (true)\r
+                       {\r
+                               String str = in.readLine();                             \r
+                               System.out.println("CLIENT: recv " + str + " from " + rPort);\r
+                               \r
+                               manager.handleMessage(this, str);\r
+                       }\r
+               }\r
+               catch (Exception e)\r
+               {\r
+                       // Means the other end of the connection has (probably died) so we need\r
+                       // terminate this endpoint (if this is server side)\r
+                       System.out.println("CLIENT: read failed: " + e);\r
+                                               \r
+                       terminate();\r
+               }\r
+       }\r
+       \r
+       private void terminate()\r
+       {\r
+               try { socket.close(); }\r
+               catch (IOException e) {}\r
+               \r
+               System.out.println("CLIENT: closing connection to port " + socket.getPort());\r
+               manager.removeEndPoint(this);\r
+       }\r
+}
\ No newline at end of file