\r
import java.io.*;\r
import java.net.*;\r
+import java.util.logging.*;\r
+\r
+import org.apache.commons.logging.Log;\r
\r
class PickEndPoint extends Thread\r
{\r
+ private Log logger = org.apache.commons.logging.LogFactory.getLog(uk.ac.vamsas.client.picking.PickEndPoint.class);\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
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
}\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
}\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
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
- manager.handleMessage(this, str);\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
- System.out.println("CLIENT: read failed: " + e);\r
+ //logger.info("CLIENT: read failed: " + e);\r
\r
terminate();\r
}\r
}\r
\r
- private void terminate()\r
+ void terminate()\r
{\r
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(6));\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