This commit is contained in:
@@ -151,27 +151,39 @@ public class WebSocketRunner implements Runnable {
|
|||||||
}
|
}
|
||||||
final boolean debug = this.coder.debugable;
|
final boolean debug = this.coder.debugable;
|
||||||
if (writeBuffer == null) return;
|
if (writeBuffer == null) return;
|
||||||
writeBuffer.clear();
|
ByteBuffer sendBuffer = null;
|
||||||
writeBuffer.put(bytes);
|
if (bytes.length <= writeBuffer.capacity()) {
|
||||||
writeBuffer.flip();
|
writeBuffer.clear();
|
||||||
|
writeBuffer.put(bytes);
|
||||||
|
writeBuffer.flip();
|
||||||
|
sendBuffer = writeBuffer;
|
||||||
|
} else {
|
||||||
|
sendBuffer = ByteBuffer.wrap(bytes);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
channel.write(writeBuffer, null, new CompletionHandler<Integer, Void>() {
|
channel.write(sendBuffer, sendBuffer, new CompletionHandler<Integer, ByteBuffer>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void completed(Integer result, Void attachment) {
|
public void completed(Integer result, ByteBuffer attachment) {
|
||||||
if (writeBuffer == null || closed) return;
|
if (attachment == null || closed) return;
|
||||||
try {
|
try {
|
||||||
if (writeBuffer.hasRemaining()) {
|
if (attachment.hasRemaining()) {
|
||||||
if (debug) context.getLogger().log(Level.FINEST, "WebSocketRunner write completed reemaining: " + writeBuffer.remaining());
|
if (debug) context.getLogger().log(Level.FINEST, "WebSocketRunner write completed reemaining: " + attachment.remaining());
|
||||||
channel.write(writeBuffer, attachment, this);
|
channel.write(attachment, attachment, this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
byte[] bs = queue.poll();
|
byte[] bs = queue.poll();
|
||||||
if (bs != null && writeBuffer != null) {
|
if (bs != null && writeBuffer != null) {
|
||||||
writeBuffer.clear();
|
ByteBuffer sendBuffer;
|
||||||
writeBuffer.put(bytes);
|
if (bs.length <= writeBuffer.capacity()) {
|
||||||
writeBuffer.flip();
|
writeBuffer.clear();
|
||||||
channel.write(writeBuffer, null, this);
|
writeBuffer.put(bs);
|
||||||
|
writeBuffer.flip();
|
||||||
|
sendBuffer = writeBuffer;
|
||||||
|
} else {
|
||||||
|
sendBuffer = ByteBuffer.wrap(bs);
|
||||||
|
}
|
||||||
|
channel.write(sendBuffer, sendBuffer, this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
@@ -183,7 +195,7 @@ public class WebSocketRunner implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(Throwable exc, Void attachment) {
|
public void failed(Throwable exc, ByteBuffer attachment) {
|
||||||
writing.set(false);
|
writing.set(false);
|
||||||
closeRunner();
|
closeRunner();
|
||||||
if (exc != null) {
|
if (exc != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user