From 0ba2e25f2e5463bfa31ea954b3ad0cfa12c2f626 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Mon, 19 Jun 2017 08:20:52 +0800 Subject: [PATCH] --- src/org/redkale/convert/ConvertFactory.java | 4 -- src/org/redkale/convert/ObjectDecoder.java | 4 +- src/org/redkale/convert/ObjectEncoder.java | 4 +- src/org/redkale/net/http/WebSocket.java | 8 ++++ src/org/redkale/net/http/WebSocketRunner.java | 40 ++++++++++++++----- 5 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/org/redkale/convert/ConvertFactory.java b/src/org/redkale/convert/ConvertFactory.java index 1ddfa87af..dd3034078 100644 --- a/src/org/redkale/convert/ConvertFactory.java +++ b/src/org/redkale/convert/ConvertFactory.java @@ -135,10 +135,6 @@ public abstract class ConvertFactory { public abstract ConvertFactory createChild(boolean tiny); - public boolean isIndexSort() { //是否使用@ConvertColumn.index排序 - return false; - } - public Convert getConvert() { return convert; } diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index d882b7eb5..f5208f871 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -79,7 +79,7 @@ public final class ObjectDecoder implements Decodeable implements Decodeable implements Encodeable implements Encodeable { return _remoteAddr; } + protected Convert getTextConvert() { + return _textConvert; + } + + protected Convert getBinaryConvert() { + return _binaryConvert; + } + //------------------------------------------------------------------- /** * 获取指定userid的WebSocket数组, 没有返回null
diff --git a/src/org/redkale/net/http/WebSocketRunner.java b/src/org/redkale/net/http/WebSocketRunner.java index b0d000fc0..82faef0ab 100644 --- a/src/org/redkale/net/http/WebSocketRunner.java +++ b/src/org/redkale/net/http/WebSocketRunner.java @@ -16,6 +16,7 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.BiConsumer; import java.util.logging.*; +import org.redkale.convert.Convert; /** * WebSocket的消息接收发送器, 一个WebSocket对应一个WebSocketRunner @@ -114,7 +115,8 @@ class WebSocketRunner implements Runnable { } if (packet.type == FrameType.TEXT) { - Object message = webSocket._textConvert.convertFrom(webSocket._messageTextType, packet.receiveMasker, packet.receiveBuffers); + Convert textConvert = webSocket.getTextConvert(); + Object message = textConvert.convertFrom(webSocket._messageTextType, packet.receiveMasker, packet.receiveBuffers); if (readBuffer != null) { readBuffer.clear(); channel.read(readBuffer, null, this); @@ -129,15 +131,33 @@ class WebSocketRunner implements Runnable { context.getLogger().log(Level.SEVERE, "WebSocket onTextMessage error (" + packet + ")", e); } } else if (packet.type == FrameType.BINARY) { - byte[] message = packet.getReceiveBytes(); - if (readBuffer != null) { - readBuffer.clear(); - channel.read(readBuffer, null, this); - } - try { - webSocket.onMessage(message, packet.last); - } catch (Exception e) { - context.getLogger().log(Level.SEVERE, "WebSocket onBinaryMessage error (" + packet + ")", e); + Convert binaryConvert = webSocket.getBinaryConvert(); + if (binaryConvert == null) { + byte[] message = packet.getReceiveBytes(); + if (readBuffer != null) { + readBuffer.clear(); + channel.read(readBuffer, null, this); + } + try { + webSocket.onMessage(message, packet.last); + } catch (Exception e) { + context.getLogger().log(Level.SEVERE, "WebSocket onBinaryMessage error (" + packet + ")", e); + } + } else { + Object message = binaryConvert.convertFrom(webSocket._messageTextType, packet.receiveMasker, packet.receiveBuffers); + if (readBuffer != null) { + readBuffer.clear(); + channel.read(readBuffer, null, this); + } + try { + if (restMessageConsumer != null) { //主要供RestWebSocket使用 + restMessageConsumer.accept(webSocket, message); + } else { + webSocket.onMessage(message, packet.last); + } + } catch (Exception e) { + context.getLogger().log(Level.SEVERE, "WebSocket onTextMessage error (" + packet + ")", e); + } } } else if (packet.type == FrameType.PONG) { byte[] message = packet.getReceiveBytes();