X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fpicking%2FPickEndPoint.java;fp=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fpicking%2FPickEndPoint.java;h=951e8d4a21ad8983caa10fb698363d905832dbe5;hb=5a32c865123e6aa09079b4928346ffc6bd269258;hp=0000000000000000000000000000000000000000;hpb=805cd9483492e124242b92fdd7c215319f527523;p=vamsas.git diff --git a/src/uk/ac/vamsas/client/picking/PickEndPoint.java b/src/uk/ac/vamsas/client/picking/PickEndPoint.java new file mode 100644 index 0000000..951e8d4 --- /dev/null +++ b/src/uk/ac/vamsas/client/picking/PickEndPoint.java @@ -0,0 +1,101 @@ +package uk.ac.vamsas.client.picking; + +import java.io.*; +import java.net.*; + +class PickEndPoint extends Thread +{ + private Socket socket; + private int rPort; + private BufferedWriter os; + private BufferedReader in; + + private PickManager manager; + + PickEndPoint(PickManager manager, Socket s) + { + this.manager = manager; + socket = s; + } + + boolean openConnection() + { + try + { + // Create the socket if it doesn't already exist + if (socket == null) + socket = new Socket(InetAddress.getLocalHost(), PickServer.PORT); + + rPort = socket.getPort(); + socket.setKeepAlive(true); + + // Open the streams for reading/writing + os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); + in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + + // Start the thread to listen for incoming messages + System.out.println("CLIENT: connection successful to port " + + socket.getPort() + " via port " + socket.getLocalPort()); + start(); + + return true; + } + catch (Exception e) + { + System.out.println("CLIENT: connection failed: " + e); + return false; + } + } + + void send(String str) + { + try + { + System.out.println("CLIENT: send " + str + " to " + rPort); + os.write(str); + + // We use a newline to terminate the message + os.newLine(); + os.flush(); + } + catch (Exception e) + { + System.out.println("CLIENT: failed to send"); + + // TODO: terminate the connection on a failed send or retry? + terminate(); + } + } + + // void receive() (threaded) + public void run() + { + try + { + while (true) + { + String str = in.readLine(); + System.out.println("CLIENT: recv " + str + " from " + rPort); + + manager.handleMessage(this, str); + } + } + catch (Exception e) + { + // Means the other end of the connection has (probably died) so we need + // terminate this endpoint (if this is server side) + System.out.println("CLIENT: read failed: " + e); + + terminate(); + } + } + + private void terminate() + { + try { socket.close(); } + catch (IOException e) {} + + System.out.println("CLIENT: closing connection to port " + socket.getPort()); + manager.removeEndPoint(this); + } +} \ No newline at end of file