This commit is contained in:
Redkale
2019-03-14 21:25:14 +08:00
parent fe9e074581
commit d7a3f4d87d
2 changed files with 22 additions and 23 deletions

View File

@@ -495,7 +495,12 @@ public final class WebSocketPacket {
buffers = webSocket._engine.cryptor.decrypt(buffers, context.getBufferSupplier(), context.getBufferConsumer());
}
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) {
Convert textConvert = webSocket.getTextConvert();
@@ -503,23 +508,20 @@ public final class WebSocketPacket {
this.receiveMessage = new String(this.getReceiveBytes(buffers), StandardCharsets.UTF_8);
this.receiveType = MessageType.STRING;
} else {
if (this.last) {
if (runner.tmpMergeMessage == null) {
if (this.last || !runner.mergemsg) {
if (runner.currSeriesMergeMessage == null) {
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
} else {
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
try {
this.type = selfType;
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, runner.tmpMergeMessage.getBytes());
this.receiveMessage = textConvert.convertFrom(webSocket._messageTextType, runner.currSeriesMergeMessage.getBytes());
} finally {
runner.tmpMergeFrameType = null;
runner.tmpMergeMessage = null;
runner.currSeriesMergeMessage = null;
}
}
} else {
runner.tmpMergeFrameType = selfType;
if (runner.tmpMergeMessage == null) runner.tmpMergeMessage = new ByteArray();
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
if (runner.currSeriesMergeMessage == null) runner.currSeriesMergeMessage = new ByteArray();
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
this.receiveMessage = MESSAGE_NIL;
}
this.receiveCount = this.receiveLength;
@@ -531,23 +533,20 @@ public final class WebSocketPacket {
this.receiveMessage = this.getReceiveBytes(buffers);
this.receiveType = MessageType.BYTES;
} else {
if (this.last) {
if (runner.tmpMergeMessage == null) {
if (this.last || !runner.mergemsg) {
if (runner.currSeriesMergeMessage == null) {
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, this.receiveMasker, buffers);
} else {
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
try {
this.type = selfType;
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, runner.tmpMergeMessage.getBytes());
this.receiveMessage = binaryConvert.convertFrom(webSocket._messageTextType, runner.currSeriesMergeMessage.getBytes());
} finally {
runner.tmpMergeFrameType = null;
runner.tmpMergeMessage = null;
runner.currSeriesMergeMessage = null;
}
}
} else {
runner.tmpMergeFrameType = selfType;
if (runner.tmpMergeMessage == null) runner.tmpMergeMessage = new ByteArray();
runner.tmpMergeMessage.write(this.getReceiveBytes(buffers));
if (runner.currSeriesMergeMessage == null) runner.currSeriesMergeMessage = new ByteArray();
runner.currSeriesMergeMessage.write(this.getReceiveBytes(buffers));
this.receiveMessage = MESSAGE_NIL;
}
this.receiveCount = this.receiveLength;

View File

@@ -39,9 +39,9 @@ class WebSocketRunner implements Runnable {
volatile boolean closed = false;
FrameType tmpMergeFrameType;
FrameType currSeriesMergeFrameType;
ByteArray tmpMergeMessage;
ByteArray currSeriesMergeMessage;
private final BiConsumer<WebSocket, Object> restMessageConsumer; //主要供RestWebSocket使用