package de.twenty11.skysail.server.ext.osgi.monitor.agent.channel; import java.nio.channels.SocketChannel; import java.util.LinkedList; import java.util.List; public class EchoWorker { private List queue = new LinkedList(); public void processData(CommandListener server, SocketChannel socket, byte[] data, int count) { // OsgiMonitorCallback.setOff(); byte[] dataCopy = new byte[count]; System.arraycopy(data, 0, dataCopy, 0, count); synchronized (queue) { queue.add(new ServerDataEvent(server, socket, dataCopy)); 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); } } }