1 package uk.ac.vamsas.client.picking;
\r
5 import java.util.logging.*;
\r
7 class PickEndPoint extends Thread
\r
9 private Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking");
\r
11 private Socket socket;
\r
13 private BufferedWriter os;
\r
14 private BufferedReader in;
\r
16 private SocketManager manager;
\r
18 PickEndPoint(SocketManager manager, Socket s)
\r
20 this.manager = manager;
\r
24 boolean openConnection()
\r
28 // Create the socket if it doesn't already exist
\r
30 socket = new Socket(InetAddress.getLocalHost(), PickServer.PORT);
\r
32 rPort = socket.getPort();
\r
33 socket.setKeepAlive(true);
\r
35 // Open the streams for reading/writing
\r
36 os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
\r
37 in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
\r
39 // Start the thread to listen for incoming messages
\r
40 // logger.info("CLIENT: connection successful to port "
\r
41 // + socket.getPort() + " via port " + socket.getLocalPort());
\r
48 //logger.info("CLIENT: connection failed: " + e);
\r
53 void send(Message message)
\r
57 String str = message.getRawMessage();
\r
59 //logger.info("CLIENT: send " + str + " to " + rPort);
\r
62 // We use a newline to terminate the message
\r
68 //logger.info("CLIENT: failed to send");
\r
70 // TODO: terminate the connection on a failed send or retry?
\r
75 // void receive() (threaded)
\r
82 String str = in.readLine();
\r
83 //logger.info("CLIENT: recv " + str + " from " + rPort);
\r
85 // TODO: Spawn this off into the GUI Event-Dispatch thread...
\r
87 // Convert the string back into something API friendly
\r
88 Message message = strToMessage(str);
\r
90 // Ignore corrupted or unknown message types
\r
91 if (message != null)
\r
92 manager.processMessage(this, message);
\r
97 // Means the other end of the connection has (probably died) so we need
\r
98 // terminate this endpoint (if this is server side)
\r
99 //logger.info("CLIENT: read failed: " + e);
\r
105 private void terminate()
\r
107 try { socket.close(); }
\r
108 catch (IOException e) {}
\r
110 //logger.info("CLIENT: closing connection to port " + socket.getPort());
\r
111 manager.removeEndPoint(this);
\r
114 private Message strToMessage(String str)
\r
118 if (str.startsWith("CUSTOM_"))
\r
119 return new CustomMessage(str.substring(7));
\r
121 if (str.startsWith("MOUSEOVER_"))
\r
122 return new MouseOverMessage(str);
\r
124 catch (Exception e)
\r
126 //logger.info("Unable to reconstruct message: " + e);
\r