41 import java.io.IOException;
42 import java.nio.ByteBuffer;
43 import java.nio.channels.AsynchronousSocketChannel;
44 import java.nio.channels.CompletionHandler;
45 import java.util.LinkedList;
46 import java.util.Queue;
47 import java.util.concurrent.atomic.AtomicReference;
60 private final AsynchronousSocketChannel
channel;
61 private AtomicReference<ClientReader>
reader;
65 private final Queue<ByteBuffer>
queue =
new LinkedList<ByteBuffer>();
70 this.reader =
new AtomicReference<ClientReader>(
reader);
81 boolean threadShouldWrite =
false;
88 threadShouldWrite =
true;
92 if (threadShouldWrite) {
100 synchronized (
queue) {
101 buffer =
queue.poll();
102 if (buffer ==
null) {
114 channel.write(buffer, buffer,
new CompletionHandler<Integer, ByteBuffer>() {
116 public void completed(Integer
result, ByteBuffer buffer) {
117 if (buffer.hasRemaining()) {
118 channel.write(buffer, buffer,
this);
126 public void failed(Throwable exc, ByteBuffer attachment) {
145 if (
reader.get().acceptsMessages()) {
154 public void read(CompletionHandler<Integer, ? super ByteBuffer> completionHandler) {
155 ByteBuffer input = ByteBuffer.allocate(256);
159 channel.read(input, input, completionHandler);
168 }
catch (IOException e) {
205 if (nextNewline == -1) {
208 String message =
messageBuffer.substring(0, nextNewline + 1);