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.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ClientOutputWorker implements Runnable {
private final static Log log = Log.getLog(ClientOutputWorker.class);
private NetworkClientImpl client;
private final Socket socket;
public ClientOutputWorker(NetworkClientImpl client, Socket socket) {
this.client = client;
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);
client.setOutputWorkerReady(true);
log.info("[ClientOutputWorker] ready");
while (client.isRunning() || client.isMessageInQueue()) {
log.info("[ClientOutputWorker] running");
while (client.isMessageInQueue()) {
log.info("[ClientOutputWorker] message is in queue");
Message message = client.takeMessageFromQueue();
objectOutputStream.writeObject(message);
objectOutputStream.flush();
log.info("[ClientOutputWorker] message was sent");
}
log.info("[ClientOutputWorker] running");
}
log.info("[ClientOutputWorker] 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);
}
}
}