--- /dev/null
+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