package com.jsonde.profiler.network; import com.jsonde.api.Message; import com.jsonde.util.io.IO; import com.jsonde.util.log.Log; import java.io.*; import java.net.Socket; import java.net.SocketException; public class ServerInputWorker implements Runnable, Closeable { private final static Log log = Log.getLog(ServerInputWorker.class); private NetworkServerImpl server; private final Socket socket; private InputStream inputStream; public ServerInputWorker(NetworkServerImpl server, Socket socket) { this.server = server; this.socket = socket; try { this.inputStream = socket.getInputStream(); } catch (IOException e) { e.printStackTrace(); } } public void run() { final String METHOD_NAME = "run()"; ObjectInputStream objectInputStream = null; try { objectInputStream = new ObjectInputStream(inputStream); server.setInputWorkerReady(true); log.info("[ServerInputWorker] ready"); while (server.isRunning()) { log.info("[ServerInputWorker] running"); log.info("[ServerInputWorker] reading message from socket"); Object object = objectInputStream.readObject(); log.info("[ServerInputWorker] message recieved"); Message message = (Message) object; server.processMessage(message); log.info("[ServerInputWorker] running"); } log.info("[ServerInputWorker] stopped"); } catch (SocketException e) { log.info("[ServerInputWorker] SocketException catched"); if (server.isRunning()) { log.error(METHOD_NAME, e); } else { log.trace(METHOD_NAME, e); } } catch (EOFException e) { log.info("[ServerInputWorker] EOFException catched"); if (server.isRunning()) { log.error(METHOD_NAME, e); } else { log.trace(METHOD_NAME, e); } } catch (IOException e) { log.error(METHOD_NAME, e); } catch (ClassNotFoundException e) { log.error(METHOD_NAME, e); } finally { IO.close(objectInputStream); IO.close(inputStream); } } public void close() throws IOException { inputStream.close(); } }