package hu.ppke.itk.itkStock.nio.core;
import java.nio.channels.SocketChannel;
import java.util.LinkedList;
import java.util.List;
public abstract class AbstractWorker implements Runnable {
private List<ServerDataEvent> queue = new LinkedList<ServerDataEvent>();
public abstract byte[] response(byte[] data, int count);
public void processData(NioServer server, SocketChannel socket, byte[] data, int count) {
byte[] resp = response(data, count);
synchronized (queue) {
queue.add(new ServerDataEvent(server, socket, resp));
queue.notify();
}
}
public void run() {
ServerDataEvent dataEvent;
while (true) {
// Wait for data to become available
synchronized (queue) {
while (queue.isEmpty()) {
try {
queue.wait();
} catch (InterruptedException e) {
}
}
dataEvent = (ServerDataEvent) queue.remove(0);
}
// Return to sender
dataEvent.server.send(dataEvent.socket, dataEvent.data);
}
}
}