This commit is contained in:
地平线
2015-06-29 11:35:01 +08:00
parent e276096bf3
commit 80447efa4a

View File

@@ -77,11 +77,6 @@ public class WebSocketRunner implements Runnable {
return; return;
} }
if (readBuffer == null) return; if (readBuffer == null) return;
if (recentExBuffer == null) {
readBuffer.flip();
} else {
recentExBuffer.flip();
}
if (!readBuffer.hasRemaining() && (recentExBuffer == null || !recentExBuffer.hasRemaining())) { if (!readBuffer.hasRemaining() && (recentExBuffer == null || !recentExBuffer.hasRemaining())) {
final ByteBuffer buffer = context.pollBuffer(); final ByteBuffer buffer = context.pollBuffer();
recentExBuffer = buffer; recentExBuffer = buffer;
@@ -89,12 +84,16 @@ public class WebSocketRunner implements Runnable {
channel.read(buffer, null, this); channel.read(buffer, null, this);
return; return;
} }
readBuffer.flip();
try { try {
ByteBuffer[] exBuffers = null; ByteBuffer[] exBuffers = null;
if (!readBuffers.isEmpty()) { if (!readBuffers.isEmpty()) {
exBuffers = readBuffers.toArray(new ByteBuffer[readBuffers.size()]); exBuffers = readBuffers.toArray(new ByteBuffer[readBuffers.size()]);
readBuffers.clear(); readBuffers.clear();
recentExBuffer = null; recentExBuffer = null;
for (ByteBuffer b : exBuffers) {
b.flip();
}
} }
WebSocketPacket packet = coder.decode(readBuffer, exBuffers); WebSocketPacket packet = coder.decode(readBuffer, exBuffers);
if (exBuffers != null) { if (exBuffers != null) {
@@ -338,14 +337,14 @@ public class WebSocketRunner implements Runnable {
public WebSocketPacket decode(final ByteBuffer buffer, ByteBuffer... exbuffers) { public WebSocketPacket decode(final ByteBuffer buffer, ByteBuffer... exbuffers) {
final boolean debug = this.debugable; final boolean debug = this.debugable;
{ if (debug) {
int remain = buffer.remaining(); int remain = buffer.remaining();
if (exbuffers != null) { if (exbuffers != null) {
for (ByteBuffer b : exbuffers) { for (ByteBuffer b : exbuffers) {
remain += b == null ? 0 : b.remaining(); remain += b == null ? 0 : b.remaining();
} }
} }
if (debug) logger.log(Level.FINEST, "read web socket message's length = " + remain); logger.log(Level.FINEST, "read web socket message's length = " + remain);
} }
if (buffer.remaining() < 2) return null; if (buffer.remaining() < 2) return null;
byte opcode = buffer.get(); byte opcode = buffer.get();