Add missing codec operations in ByteToMessageCodec
This commit is contained in:
parent
4a3d73724f
commit
b58a8f0106
@ -19,6 +19,7 @@ import io.netty.buffer.ByteBuf;
|
|||||||
import io.netty.buffer.MessageBuf;
|
import io.netty.buffer.MessageBuf;
|
||||||
import io.netty.channel.ChannelHandlerAdapter;
|
import io.netty.channel.ChannelHandlerAdapter;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.channel.ChannelHandlerUtil;
|
||||||
import io.netty.channel.ChannelInboundByteHandler;
|
import io.netty.channel.ChannelInboundByteHandler;
|
||||||
import io.netty.channel.ChannelOutboundMessageHandler;
|
import io.netty.channel.ChannelOutboundMessageHandler;
|
||||||
import io.netty.channel.ChannelPromise;
|
import io.netty.channel.ChannelPromise;
|
||||||
@ -27,11 +28,18 @@ public abstract class ByteToMessageCodec<INBOUND_OUT, OUTBOUND_IN>
|
|||||||
extends ChannelHandlerAdapter
|
extends ChannelHandlerAdapter
|
||||||
implements ChannelInboundByteHandler, ChannelOutboundMessageHandler<OUTBOUND_IN> {
|
implements ChannelInboundByteHandler, ChannelOutboundMessageHandler<OUTBOUND_IN> {
|
||||||
|
|
||||||
|
private final Class<?>[] encodableMessageTypes;
|
||||||
private final MessageToByteEncoder<OUTBOUND_IN> encoder;
|
private final MessageToByteEncoder<OUTBOUND_IN> encoder;
|
||||||
private final ByteToMessageDecoder<INBOUND_OUT> decoder;
|
private final ByteToMessageDecoder<INBOUND_OUT> decoder;
|
||||||
|
|
||||||
protected ByteToMessageCodec(Class<?>... encodableMessageTypes) {
|
protected ByteToMessageCodec(Class<?>... encodableMessageTypes) {
|
||||||
encoder = new MessageToByteEncoder<OUTBOUND_IN>(encodableMessageTypes) {
|
this.encodableMessageTypes = encodableMessageTypes;
|
||||||
|
encoder = new MessageToByteEncoder<OUTBOUND_IN>() {
|
||||||
|
@Override
|
||||||
|
public boolean isEncodable(Object msg) throws Exception {
|
||||||
|
return ByteToMessageCodec.this.isEncodable(msg);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, ByteBuf out) throws Exception {
|
protected void encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, ByteBuf out) throws Exception {
|
||||||
ByteToMessageCodec.this.encode(ctx, msg, out);
|
ByteToMessageCodec.this.encode(ctx, msg, out);
|
||||||
@ -40,16 +48,30 @@ public abstract class ByteToMessageCodec<INBOUND_OUT, OUTBOUND_IN>
|
|||||||
|
|
||||||
decoder = new ByteToMessageDecoder<INBOUND_OUT>() {
|
decoder = new ByteToMessageDecoder<INBOUND_OUT>() {
|
||||||
@Override
|
@Override
|
||||||
public INBOUND_OUT decode(
|
public INBOUND_OUT decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
|
||||||
ChannelHandlerContext ctx, ByteBuf in) throws Exception {
|
|
||||||
return ByteToMessageCodec.this.decode(ctx, in);
|
return ByteToMessageCodec.this.decode(ctx, in);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected INBOUND_OUT decodeLast(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
|
||||||
|
return ByteToMessageCodec.this.decodeLast(ctx, in);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void discardInboundReadBytes(ChannelHandlerContext ctx) throws Exception {
|
||||||
|
ByteToMessageCodec.this.discardInboundReadBytes(ctx);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuf newInboundBuffer(
|
public void beforeAdd(ChannelHandlerContext ctx) throws Exception {
|
||||||
ChannelHandlerContext ctx) throws Exception {
|
decoder.beforeAdd(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuf newInboundBuffer(ChannelHandlerContext ctx) throws Exception {
|
||||||
return decoder.newInboundBuffer(ctx);
|
return decoder.newInboundBuffer(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,14 +81,12 @@ public abstract class ByteToMessageCodec<INBOUND_OUT, OUTBOUND_IN>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MessageBuf<OUTBOUND_IN> newOutboundBuffer(
|
public MessageBuf<OUTBOUND_IN> newOutboundBuffer(ChannelHandlerContext ctx) throws Exception {
|
||||||
ChannelHandlerContext ctx) throws Exception {
|
|
||||||
return encoder.newOutboundBuffer(ctx);
|
return encoder.newOutboundBuffer(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void flush(
|
public void flush(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
|
||||||
ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
|
|
||||||
encoder.flush(ctx, promise);
|
encoder.flush(ctx, promise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,9 +101,12 @@ public abstract class ByteToMessageCodec<INBOUND_OUT, OUTBOUND_IN>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEncodable(Object msg) throws Exception {
|
public boolean isEncodable(Object msg) throws Exception {
|
||||||
return encoder.isEncodable(msg);
|
return ChannelHandlerUtil.acceptMessage(encodableMessageTypes, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, ByteBuf out) throws Exception;
|
protected abstract void encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, ByteBuf out) throws Exception;
|
||||||
protected abstract INBOUND_OUT decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception;
|
protected abstract INBOUND_OUT decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception;
|
||||||
}
|
protected INBOUND_OUT decodeLast(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
|
||||||
|
return decode(ctx, in);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user