package lcm.lcm; import java.util.concurrent.*; public class MemqProvider implements Provider { static class Message { String channel; byte data[]; } LCM lcm; ReaderThread reader; LinkedBlockingQueue<Message> queue; public MemqProvider(LCM lcm, URLParser up) { this.lcm = lcm; this.queue = new LinkedBlockingQueue<Message>(); reader = new ReaderThread(); reader.start(); } public void publish(String channel, byte data[], int offset, int length) { Message msg = new Message(); msg.channel = channel; msg.data = new byte[length]; System.arraycopy(data, offset, msg.data, 0, length); try { queue.put(msg); } catch (InterruptedException ex) { } } public synchronized void subscribe(String channel) {} public void unsubscribe(String channel) {} public synchronized void close() { if (reader != null) { reader.interrupt(); try { reader.join(); } catch (InterruptedException ex) { } } reader = null; } class ReaderThread extends Thread { ReaderThread() { setDaemon(true); } public void run() { try { runEx(); } catch (InterruptedException ex) { return; } } void runEx() throws InterruptedException { while (true) { Message msg = queue.take(); lcm.receiveMessage(msg.channel, msg.data, 0, msg.data.length); } } } }