This commit is contained in:
Redkale
2017-06-19 08:20:52 +08:00
parent 98e8a7eb05
commit 0ba2e25f2e
5 changed files with 42 additions and 18 deletions

View File

@@ -135,10 +135,6 @@ public abstract class ConvertFactory<R extends Reader, W extends Writer> {
public abstract ConvertFactory createChild(boolean tiny);
public boolean isIndexSort() { //是否使用@ConvertColumn.index排序
return false;
}
public Convert getConvert() {
return convert;
}

View File

@@ -79,7 +79,7 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
if (ref != null && ref.ignore()) continue;
Type t = TypeToken.createClassType(field.getGenericType(), this.type);
DeMember member = new DeMember(ObjectEncoder.createAttribute(factory, clazz, field, null, null), factory.loadDecoder(t));
if (factory.isIndexSort() && ref != null) member.index = ref.getIndex();
if (ref != null) member.index = ref.getIndex();
list.add(member);
}
final boolean reversible = factory.isReversible();
@@ -104,7 +104,7 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
if (ref != null && ref.ignore()) continue;
Type t = TypeToken.createClassType(method.getGenericParameterTypes()[0], this.type);
DeMember member = new DeMember(ObjectEncoder.createAttribute(factory, clazz, null, null, method), factory.loadDecoder(t));
if (factory.isIndexSort() && ref != null) member.index = ref.getIndex();
if (ref != null) member.index = ref.getIndex();
list.add(member);
}
if (cps != null) { //可能存在某些构造函数中的字段名不存在setter方法

View File

@@ -70,7 +70,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
if (ref != null && ref.ignore()) continue;
Type t = TypeToken.createClassType(field.getGenericType(), this.type);
EnMember member = new EnMember(createAttribute(factory, clazz, field, null, null), factory.loadEncoder(t));
if (factory.isIndexSort() && ref != null) member.index = ref.getIndex();
if (ref != null) member.index = ref.getIndex();
list.add(member);
}
for (final Method method : clazz.getMethods()) {
@@ -95,7 +95,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
if (ref != null && ref.ignore()) continue;
Type t = TypeToken.createClassType(method.getGenericReturnType(), this.type);
EnMember member = new EnMember(createAttribute(factory, clazz, null, method, null), factory.loadEncoder(t));
if (factory.isIndexSort() && ref != null) member.index = ref.getIndex();
if (ref != null) member.index = ref.getIndex();
list.add(member);
}
this.members = list.toArray(new EnMember[list.size()]);

View File

@@ -352,6 +352,14 @@ public abstract class WebSocket<G extends Serializable, T> {
return _remoteAddr;
}
protected Convert getTextConvert() {
return _textConvert;
}
protected Convert getBinaryConvert() {
return _binaryConvert;
}
//-------------------------------------------------------------------
/**
* 获取指定userid的WebSocket数组, 没有返回null <br>

View File

@@ -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();