package qa.qcri.aidr.predict.communication; import java.io.IOException; import java.net.ServerSocket; import org.apache.log4j.Logger; import qa.qcri.aidr.predict.common.TaggerConfigurationProperty; import qa.qcri.aidr.predict.common.TaggerConfigurator; /** * InputManager listens for new connections on a specified port. New * InputWorkers are created for each client that connects. * * @author jrogstadius */ public class HttpInputManager implements Runnable { static ServerSocket server; private static Logger logger = Logger.getLogger(HttpInputManager.class); @Override public void run() { try { server = new ServerSocket(Integer.parseInt(TaggerConfigurator .getInstance().getProperty( TaggerConfigurationProperty.HTTP_INPUT_PORT))); logger.info("Listening for provider connections on port " + Integer .parseInt(TaggerConfigurator .getInstance() .getProperty( TaggerConfigurationProperty.HTTP_INPUT_PORT))); while (true) { if (Thread.interrupted()) { return; } try { HttpInputWorker conn = new HttpInputWorker(server.accept()); Thread t = new Thread(conn); t.start(); } catch (IOException e) { logger.warn("Failed to establish connection with client on port " + Integer.parseInt(TaggerConfigurator .getInstance().getProperty( TaggerConfigurationProperty.HTTP_INPUT_PORT))); } } } catch (IOException e) { logger.warn("Could not listen on port " + Integer.parseInt(TaggerConfigurator .getInstance().getProperty( TaggerConfigurationProperty.HTTP_INPUT_PORT))); } finally { finalize(); } } @Override protected void finalize() { // Objects created in run method are finalized when // program terminates and thread exits try { server.close(); } catch (IOException e) { logger.warn("Could not close socket"); } } }