- private SocketManager manager; \r
- \r
- PickEndPoint(SocketManager 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
- logger.debug("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
- logger.info("CLIENT: connection failed: " + e);\r
- return false;\r
- }\r
- }\r
- \r
- void send(Message message)\r
- {\r
- try\r
- {\r
- String str = message.getRawMessage();\r
- \r
- // System.err.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
- //logger.info("CLIENT: failed to send");\r
- \r
- // TODO: terminate the connection on a failed send or retry? (Has this been done? JBP)\r
- terminate();\r
- }\r
- }\r
- \r
- // void receive() (threaded)\r
- public void run()\r
- {\r
- try\r
- {\r
- while (manager!=null)\r
- {\r
- String str = in.readLine(); \r
- //logger.info("CLIENT: recv " + str + " from " + rPort);\r
- \r
- // TODO: Spawn this off into the GUI Event-Dispatch thread...\r
- \r
- // Convert the string back into something API friendly\r
- Message message = strToMessage(str);\r
- \r
- // Ignore corrupted or unknown message types\r
- if (message != null) \r
- manager.processMessage(this, message);\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
- //logger.info("CLIENT: read failed: " + e);\r
- \r
- terminate(); // this may not be necessary - probably caused infinite loop on terminate() without null checks\r
- }\r
- }\r
- \r
- void terminate()\r
- {\r
- SocketManager mgr=manager;\r
- manager=null; // stops receive thread\r
- if (socket!=null) {\r
- try { socket.close(); }\r
- catch (IOException e) {}\r
- socket=null;\r
+ private SocketManager manager;\r
+\r
+ PickEndPoint(SocketManager manager, Socket s) {\r
+ this.manager = manager;\r
+ socket = s;\r
+ }\r
+\r
+ boolean openConnection() {\r
+ try {\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
+ logger.debug("CLIENT: connection successful to port " + socket.getPort()\r
+ + " via port " + socket.getLocalPort());\r
+ start();\r
+\r
+ return true;\r
+ } catch (Exception e) {\r
+ logger.info("CLIENT: connection failed: " + e);\r
+ return false;\r
+ }\r
+ }\r
+\r
+ void send(Message message) {\r
+ try {\r
+ String str = message.getRawMessage();\r
+\r
+ // System.err.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
+ } catch (Exception e) {\r
+ // logger.info("CLIENT: failed to send");\r
+\r
+ // TODO: terminate the connection on a failed send or retry? (Has this\r
+ // been done? JBP)\r
+ terminate();\r
+ }\r
+ }\r
+\r
+ // void receive() (threaded)\r
+ public void run() {\r
+ try {\r
+ while (manager != null) {\r
+ String str = in.readLine();\r
+ // logger.info("CLIENT: recv " + str + " from " + rPort);\r
+\r
+ // TODO: Spawn this off into the GUI Event-Dispatch thread...\r
+\r
+ // Convert the string back into something API friendly\r
+ Message message = strToMessage(str);\r
+\r
+ // Ignore corrupted or unknown message types\r
+ if (message != null)\r
+ manager.processMessage(this, message);\r
+ }\r
+ } catch (Exception e) {\r
+ // Means the other end of the connection has (probably died) so we need\r
+ // terminate this endpoint (if this is server side)\r
+ // logger.info("CLIENT: read failed: " + e);\r
+\r
+ terminate(); // this may not be necessary - probably caused infinite loop\r
+ // on terminate() without null checks\r
+ }\r
+ }\r
+\r
+ void terminate() {\r
+ SocketManager mgr = manager;\r
+ manager = null; // stops receive thread\r
+ if (socket != null) {\r
+ try {\r
+ socket.close();\r
+ } catch (IOException e) {\r
+ }\r
+ socket = null;\r