@ChannelHandler.Sharable public class ProtobufDecoder extends MessageToMessageDecoder<io.netty.buffer.ByteBuf,com.google.protobuf.MessageLite>
ByteBuf
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 ByteBuf
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); }
Constructor and Description |
---|
ProtobufDecoder(com.google.protobuf.MessageLite prototype)
Creates a new instance.
|
ProtobufDecoder(com.google.protobuf.MessageLite prototype,
com.google.protobuf.ExtensionRegistry extensionRegistry) |
Modifier and Type | Method and Description |
---|---|
com.google.protobuf.MessageLite |
decode(io.netty.channel.ChannelHandlerContext ctx,
io.netty.buffer.ByteBuf msg) |
boolean |
isDecodable(Object msg)
Returns
true if and only if the specified message can be decoded by this decoder. |
inboundBufferUpdated, newInboundBuffer
afterAdd, afterRemove, beforeAdd, beforeRemove, channelActive, channelInactive, channelRegistered, channelUnregistered, exceptionCaught, userEventTriggered
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
public ProtobufDecoder(com.google.protobuf.MessageLite prototype)
public ProtobufDecoder(com.google.protobuf.MessageLite prototype, com.google.protobuf.ExtensionRegistry extensionRegistry)
public boolean isDecodable(Object msg) throws Exception
MessageToMessageDecoder
true
if and only if the specified message can be decoded by this decoder.isDecodable
in class MessageToMessageDecoder<io.netty.buffer.ByteBuf,com.google.protobuf.MessageLite>
msg
- the messageException
public com.google.protobuf.MessageLite decode(io.netty.channel.ChannelHandlerContext ctx, io.netty.buffer.ByteBuf msg) throws Exception
decode
in class MessageToMessageDecoder<io.netty.buffer.ByteBuf,com.google.protobuf.MessageLite>
Exception
Copyright © 2008-2012 The Netty Project. All Rights Reserved.