package com.jsonde.client.network; import com.jsonde.api.Message; import com.jsonde.util.io.IO; import com.jsonde.util.log.Log; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.Socket; import java.net.SocketException; public class ClientInputWorker implements Runnable { private final static Log log = Log.getLog(ClientInputWorker.class); private NetworkClientImpl client; private final Socket socket; public ClientInputWorker(NetworkClientImpl client, Socket socket) { this.client = client; this.socket = socket; } public void run() { final String METHOD_NAME = "run()"; InputStream inputStream = null; ObjectInputStream objectInput = null; try { inputStream = socket.getInputStream(); objectInput = new ObjectInputStream(inputStream); client.setInputWorkerReady(true); log.info("[ClientInputWorker] ready"); while (client.isRunning()) { log.info("[ClientInputWorker] running"); log.info("[ClientInputWorker] reading message from socket"); Object object = objectInput.readObject(); log.info("[ClientInputWorker] message recieved"); Message message = (Message) object; client.processMessage(message); log.info("[ClientInputWorker] running"); } log.info("[ClientInputWorker] stopped"); } catch (SocketException e) { log.info("[ClientInputWorker] SocketException catched"); if (client.isRunning()) { log.error(METHOD_NAME, e); } else { log.trace(METHOD_NAME, e); } } catch (EOFException e) { log.info("[ClientInputWorker] EOFException catched"); if (client.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(objectInput); IO.close(inputStream); } } }