@@ -0,0 +1,1114 @@
+package com.k13n.lt_codes;%0A%0Aimport java.util.Queue;%0Aimport java.util.concurrent.ConcurrentLinkedQueue;%0A%0Apublic class Client %7B%0A  private final Decoder decoder;%0A  private final Queue%3Cbyte%5B%5D%3E queue;%0A  private Thread decodingThread;%0A%0A  public Client() %7B%0A    queue = new ConcurrentLinkedQueue%3C%3E();%0A    decoder = setUpDecoder();%0A  %7D%0A%0A  private Decoder setUpDecoder() %7B%0A    // FIXME%0A    return null;%0A  %7D%0A%0A  public synchronized void startProcessing() %7B%0A    decodingThread = new Thread() %7B%0A      @Override public void run() %7B%0A        while (!isInterrupted()) %7B%0A          if (!queue.isEmpty()) %7B%0A            // FIXME change the neighbor array%0A            decoder.receive(queue.poll(), null);%0A          %7D else %7B%0A            sleepMillis(100);%0A          %7D%0A        %7D%0A      %7D%0A    %7D;%0A    decodingThread.start();%0A  %7D%0A%0A  public synchronized void stopProcessing() %7B%0A    decodingThread.interrupt();%0A  %7D%0A%0A  public void receive(byte%5B%5D data) %7B%0A    queue.offer(data);%0A  %7D%0A%0A  private static void sleepMillis(int millis) %7B%0A    try %7B%0A      Thread.sleep(millis);%0A    %7D catch (InterruptedException e) %7B%0A      e.printStackTrace();%0A    %7D%0A  %7D%0A%0A%7D%0A

Create a Client class which is the endpoint of the channel