Picking API now has message classes and basic implementation of interfaces (for its...
[vamsas.git] / src / uk / ac / vamsas / client / picking / PickEndPoint.java
index 951e8d4..e62c79e 100644 (file)
@@ -2,17 +2,20 @@ package uk.ac.vamsas.client.picking;
 \r
 import java.io.*;\r
 import java.net.*;\r
+import java.util.logging.*;\r
 \r
 class PickEndPoint extends Thread\r
 {\r
+       private Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking");\r
+       \r
        private Socket socket;\r
        private int rPort;\r
        private BufferedWriter os;\r
        private BufferedReader in;\r
 \r
-       private PickManager manager;    \r
+       private SocketManager manager;  \r
        \r
-       PickEndPoint(PickManager manager, Socket s)\r
+       PickEndPoint(SocketManager manager, Socket s)\r
        {\r
                this.manager = manager;\r
                socket = s;\r
@@ -34,7 +37,7 @@ class PickEndPoint extends Thread
                        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
+                       logger.info("CLIENT: connection successful to port "\r
                                + socket.getPort() + " via port " + socket.getLocalPort());\r
                        start();\r
                        \r
@@ -42,16 +45,18 @@ class PickEndPoint extends Thread
                }\r
                catch (Exception e)\r
                {\r
-                       System.out.println("CLIENT: connection failed: " + e);\r
+                       logger.info("CLIENT: connection failed: " + e);\r
                        return false;\r
                }\r
        }\r
        \r
-       void send(String str)\r
+       void send(Message message)\r
        {\r
                try\r
                {\r
-                       System.out.println("CLIENT: send " + str + " to " + rPort);\r
+                       String str = message.getRawMessage();\r
+                       \r
+                       logger.info("CLIENT: send " + str + " to " + rPort);\r
                        os.write(str);\r
                        \r
                        // We use a newline to terminate the message\r
@@ -60,7 +65,7 @@ class PickEndPoint extends Thread
                }\r
                catch (Exception e)\r
                {\r
-                       System.out.println("CLIENT: failed to send");\r
+                       logger.info("CLIENT: failed to send");\r
                        \r
                        // TODO: terminate the connection on a failed send or retry?\r
                        terminate();\r
@@ -75,16 +80,23 @@ class PickEndPoint extends Thread
                        while (true)\r
                        {\r
                                String str = in.readLine();                             \r
-                               System.out.println("CLIENT: recv " + str + " from " + rPort);\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
-                               manager.handleMessage(this, str);\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
-                       System.out.println("CLIENT: read failed: " + e);\r
+                       logger.info("CLIENT: read failed: " + e);\r
                                                \r
                        terminate();\r
                }\r
@@ -95,7 +107,25 @@ class PickEndPoint extends Thread
                try { socket.close(); }\r
                catch (IOException e) {}\r
                \r
-               System.out.println("CLIENT: closing connection to port " + socket.getPort());\r
+               logger.info("CLIENT: closing connection to port " + socket.getPort());\r
                manager.removeEndPoint(this);\r
        }\r
+       \r
+       private Message strToMessage(String str)\r
+       {\r
+               try\r
+               {\r
+                       if (str.startsWith("CUSTOM_"))\r
+                               return new CustomMessage(str.substring(7));\r
+               \r
+                       if (str.startsWith("MOUSEOVER_"))\r
+                               return new MouseOverMessage(str);\r
+               }\r
+               catch (Exception e)\r
+               {\r
+                       logger.info("Unable to reconstruct message: " + e);\r
+               }\r
+               \r
+               return null;\r
+       }\r
 }
\ No newline at end of file