This commit is contained in:
@@ -495,7 +495,12 @@ public final class WebSocketPacket {
|
|||||||
buffers = webSocket._engine.cryptor.decrypt(buffers, context.getBufferSupplier(), context.getBufferConsumer());
|
buffers = webSocket._engine.cryptor.decrypt(buffers, context.getBufferSupplier(), context.getBufferConsumer());
|
||||||
}
|
}
|
||||||
FrameType selfType = this.type;
|
FrameType selfType = this.type;
|
||||||
if (selfType == FrameType.SERIES) selfType = runner.tmpMergeFrameType;
|
if (selfType == FrameType.SERIES) {
|
||||||
|
selfType = runner.currSeriesMergeFrameType;
|
||||||
|
this.type = selfType;
|
||||||
|
} else if (!this.last && (selfType == FrameType.TEXT || selfType == FrameType.BINARY)) {
|
||||||
|
runner.currSeriesMergeFrameType = selfType;
|
||||||
|
}
|
||||||
|
|
||||||
if (selfType == FrameType.TEXT) {
|
if (selfType == FrameType.TEXT) {
|
||||||
Convert textConvert = webSocket.getTextConvert();
|
Convert textConvert = webSocket.getTextConvert();
|
||||||
@@ -503,23 +508,20 @@ public final class WebSocketPacket {
|
|||||||
this.receiveMessage = new String(this.getReceiveBytes(buffers), StandardCharsets.UTF_8);
|
this.receiveMessage = new String(this.getReceiveBytes(buffers), StandardCharsets.UTF_8);
|
||||||
this.receiveType = MessageType.STRING;
|
this.receiveType = MessageType.STRING;
|
||||||
} else {
|
} else {
|
||||||
if (this.last) {
|
if (this.last || !runner.mergemsg) {
|
||||||
if (runner.tmpMergeMessage == null) {
|
if (runner.currSeriesMergeMessage == null) {
|
||||||
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
|
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
|
||||||
} else {
|
} else {
|
||||||
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
|
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
|
||||||
try {
|
try {
|
||||||
this.type = selfType;
|
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, runner.currSeriesMergeMessage.getBytes());
|
||||||
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, runner.tmpMergeMessage.getBytes());
|
|
||||||
} finally {
|
} finally {
|
||||||
runner.tmpMergeFrameType = null;
|
runner.currSeriesMergeMessage = null;
|
||||||
runner.tmpMergeMessage = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
runner.tmpMergeFrameType = selfType;
|
if (runner.currSeriesMergeMessage == null) runner.currSeriesMergeMessage = new ByteArray();
|
||||||
if (runner.tmpMergeMessage == null) runner.tmpMergeMessage = new ByteArray();
|
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
|
||||||
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
|
|
||||||
this.receiveMessage = MESSAGE_NIL;
|
this.receiveMessage = MESSAGE_NIL;
|
||||||
}
|
}
|
||||||
this.receiveCount = this.receiveLength;
|
this.receiveCount = this.receiveLength;
|
||||||
@@ -531,23 +533,20 @@ public final class WebSocketPacket {
|
|||||||
this.receiveMessage = this.getReceiveBytes(buffers);
|
this.receiveMessage = this.getReceiveBytes(buffers);
|
||||||
this.receiveType = MessageType.BYTES;
|
this.receiveType = MessageType.BYTES;
|
||||||
} else {
|
} else {
|
||||||
if (this.last) {
|
if (this.last || !runner.mergemsg) {
|
||||||
if (runner.tmpMergeMessage == null) {
|
if (runner.currSeriesMergeMessage == null) {
|
||||||
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
|
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
|
||||||
} else {
|
} else {
|
||||||
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
|
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
|
||||||
try {
|
try {
|
||||||
this.type = selfType;
|
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, runner.currSeriesMergeMessage.getBytes());
|
||||||
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, runner.tmpMergeMessage.getBytes());
|
|
||||||
} finally {
|
} finally {
|
||||||
runner.tmpMergeFrameType = null;
|
runner.currSeriesMergeMessage = null;
|
||||||
runner.tmpMergeMessage = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
runner.tmpMergeFrameType = selfType;
|
if (runner.currSeriesMergeMessage == null) runner.currSeriesMergeMessage = new ByteArray();
|
||||||
if (runner.tmpMergeMessage == null) runner.tmpMergeMessage = new ByteArray();
|
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
|
||||||
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
|
|
||||||
this.receiveMessage = MESSAGE_NIL;
|
this.receiveMessage = MESSAGE_NIL;
|
||||||
}
|
}
|
||||||
this.receiveCount = this.receiveLength;
|
this.receiveCount = this.receiveLength;
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ class WebSocketRunner implements Runnable {
|
|||||||
|
|
||||||
volatile boolean closed = false;
|
volatile boolean closed = false;
|
||||||
|
|
||||||
FrameType tmpMergeFrameType;
|
FrameType currSeriesMergeFrameType;
|
||||||
|
|
||||||
ByteArray tmpMergeMessage;
|
ByteArray currSeriesMergeMessage;
|
||||||
|
|
||||||
private final BiConsumer<WebSocket, Object> restMessageConsumer; //主要供RestWebSocket使用
|
private final BiConsumer<WebSocket, Object> restMessageConsumer; //主要供RestWebSocket使用
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user