@ChannelHandler.Sharable public class ProtobufDecoder extends OneToOneDecoder
ChannelBuffer
into a
Google Protocol Buffers
Message
and MessageLite
. Please note that this decoder must
be used with a proper FrameDecoder
such as ProtobufVarint32FrameDecoder
or LengthFieldBasedFrameDecoder
if you are using a stream-based
transport such as TCP/IP. A typical setup for TCP/IP would be:
and then you can use aChannelPipeline
pipeline = ...; // Decoders pipeline.addLast("frameDecoder", newLengthFieldBasedFrameDecoder
(1048576, 0, 4, 0, 4)); pipeline.addLast("protobufDecoder", newProtobufDecoder
(MyMessage.getDefaultInstance())); // Encoder pipeline.addLast("frameEncoder", newLengthFieldPrepender
(4)); pipeline.addLast("protobufEncoder", newProtobufEncoder
());
MyMessage
instead of a ChannelBuffer
as a message:
void messageReceived(ChannelHandlerContext
ctx,MessageEvent
e) { MyMessage req = (MyMessage) e.getMessage(); MyMessage res = MyMessage.newBuilder().setText( "Did you say '" + req.getText() + "'?").build(); ch.write(res); }
ChannelHandler.Sharable
构造器和说明 |
---|
ProtobufDecoder(MessageLite prototype)
Creates a new instance.
|
ProtobufDecoder(MessageLite prototype,
ExtensionRegistry extensionRegistry) |
限定符和类型 | 方法和说明 |
---|---|
protected java.lang.Object |
decode(ChannelHandlerContext ctx,
Channel channel,
java.lang.Object msg)
Transforms the specified received message into another message and return
the transformed message.
|
handleUpstream
public ProtobufDecoder(MessageLite prototype)
public ProtobufDecoder(MessageLite prototype, ExtensionRegistry extensionRegistry)
protected java.lang.Object decode(ChannelHandlerContext ctx, Channel channel, java.lang.Object msg) throws java.lang.Exception
OneToOneDecoder
null
if the received message
is supposed to be discarded.decode
在类中 OneToOneDecoder
java.lang.Exception