1 package uk.ac.vamsas.client.picking;
\r
5 import java.util.logging.*;
\r
7 import org.apache.commons.logging.Log;
\r
9 class PickEndPoint extends Thread
\r
11 private Log logger = org.apache.commons.logging.LogFactory.getLog(uk.ac.vamsas.client.picking.PickEndPoint.class);
\r
13 private Socket socket;
\r
15 private BufferedWriter os;
\r
16 private BufferedReader in;
\r
18 private SocketManager manager;
\r
20 PickEndPoint(SocketManager manager, Socket s)
\r
22 this.manager = manager;
\r
26 boolean openConnection()
\r
30 // Create the socket if it doesn't already exist
\r
32 socket = new Socket(InetAddress.getLocalHost(), PickServer.PORT);
\r
34 rPort = socket.getPort();
\r
35 socket.setKeepAlive(true);
\r
37 // Open the streams for reading/writing
\r
38 os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
\r
39 in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
\r
41 // Start the thread to listen for incoming messages
\r
42 logger.info("CLIENT: connection successful to port "
\r
43 + socket.getPort() + " via port " + socket.getLocalPort());
\r
50 logger.info("CLIENT: connection failed: " + e);
\r
55 void send(Message message)
\r
59 String str = message.getRawMessage();
\r
61 //logger.info("CLIENT: send " + str + " to " + rPort);
\r
64 // We use a newline to terminate the message
\r
70 //logger.info("CLIENT: failed to send");
\r
72 // TODO: terminate the connection on a failed send or retry?
\r
77 // void receive() (threaded)
\r
84 String str = in.readLine();
\r
85 //logger.info("CLIENT: recv " + str + " from " + rPort);
\r
87 // TODO: Spawn this off into the GUI Event-Dispatch thread...
\r
89 // Convert the string back into something API friendly
\r
90 Message message = strToMessage(str);
\r
92 // Ignore corrupted or unknown message types
\r
93 if (message != null)
\r
94 manager.processMessage(this, message);
\r
99 // Means the other end of the connection has (probably died) so we need
\r
100 // terminate this endpoint (if this is server side)
\r
101 //logger.info("CLIENT: read failed: " + e);
\r
109 try { socket.close(); }
\r
110 catch (IOException e) {}
\r
112 //logger.info("CLIENT: closing connection to port " + socket.getPort());
\r
113 manager.removeEndPoint(this);
\r
116 private Message strToMessage(String str)
\r
120 if (str==null || str.length()==1)
\r
122 if (str.startsWith("CUSTOM"))
\r
123 return new CustomMessage(str.substring(6));
\r
125 if (str.startsWith("MOUSEOVER"))
\r
126 return new MouseOverMessage(str);
\r
128 catch (Exception e)
\r
130 //logger.info("Unable to reconstruct message: " + e);
\r