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.Closeable;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ServerOutputWorker implements Runnable, Closeable {
private final static Log log = Log.getLog(ServerOutputWorker.class);
private NetworkServerImpl server;
private final Socket socket;
public ServerOutputWorker(NetworkServerImpl server, Socket socket) {
this.server = server;
this.socket = socket;
}
public void run() {
final String METHOD_NAME = "run()";
OutputStream outputStream = null;
ObjectOutputStream objectOutputStream = null;
try {
outputStream = socket.getOutputStream();
objectOutputStream = new ObjectOutputStream(outputStream);
server.setOutputWorkerReady(true);
log.info("[ServerOutputWorker] ready");
while (server.isRunning() || server.isMessageInQueue()) {
log.info("[ServerOutputWorker] running");
while (server.isMessageInQueue()) {
log.info("[ServerOutputWorker] message is in queue");
Message message = server.takeMessageFromQueue();
objectOutputStream.writeObject(message);
objectOutputStream.flush();
message.returnToPool();
log.info("[ServerOutputWorker] message was sent");
}
log.info("[ServerOutputWorker] running");
}
log.info("[ServerOutputWorker] stopped");
} catch (IOException e) {
log.error(METHOD_NAME, e);
} catch (InterruptedException e) {
log.error(METHOD_NAME, e);
Thread.currentThread().interrupt();
} finally {
IO.close(objectOutputStream);
IO.close(outputStream);
}
}
public void close() throws IOException {
//To change body of implemented methods use File | Settings | File Templates.
}
}