package uk.ac.vamsas.client.picking; import java.io.*; import java.net.*; import java.util.logging.*; /** * Server class that listens for incoming connections on a predefined port. */ class PickServer extends Thread { private Logger logger = Logger.getLogger("uk.ac.vamsas.client.picking"); // The port number we'll listen on static final int PORT = 53782; private ServerSocket serverSocket; // Set to true once the server is established private boolean isServer = false; private SocketManager manager; /** * Constructs a new instance of the server (but doesn't start it). * @param manager a reference to the pick manager that owns this server */ PickServer(SocketManager manager) { this.manager = manager; } /** * Returns true if this server instance is running. * Return true if this server instance is running */ boolean isServer() { return isServer; } /** * Attempts to create the server by opening a server socket on the port. * @return true if the server was created; false otherwise */ boolean createServer() { try { serverSocket = new ServerSocket(PORT); start(); return isServer = true; } catch (IOException e) { logger.info("SERVER: " + e); return false; } } /** * Thread listening method - loops indefinitely listening for connections. * When one is received, the socket object is passed to the manager so it * can make a full client connection for further comms. */ public void run() { logger.info("SERVER: listening on " + PORT + " - SERVER"); // Loop forever, accepting connectons from other clients // TODO: add in the ability to terminate the server if a VAMSAS session // is ended while (true) { try { Socket socket = serverSocket.accept(); logger.info("SERVER: connection detected"); manager.addEndPoint(socket); } catch (IOException e) {} } } }