@ChannelHandler.Sharable public class ProtobufDecoder extends MessageToMessageDecoder<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 aChannelPipelinepipeline = ...; // 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(ChannelHandlerContextctx,MessageEvente) { MyMessage req = (MyMessage) e.getMessage(); MyMessage res = MyMessage.newBuilder().setText( "Did you say '" + req.getText() + "'?").build(); ch.write(res); }
ChannelHandler.Sharable| 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(ChannelHandlerContext ctx,
ByteBuf msg) |
boolean |
isDecodable(Object msg)
Returns
true if and only if the specified message can be decoded by this decoder. |
inboundBufferUpdated, newInboundBufferafterAdd, afterRemove, beforeAdd, beforeRemove, channelActive, channelInactive, channelRegistered, channelUnregistered, exceptionCaught, userEventTriggeredclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitchannelActive, channelInactive, channelRegistered, channelUnregisteredafterAdd, afterRemove, beforeAdd, beforeRemove, exceptionCaught, userEventTriggeredpublic 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
MessageToMessageDecodertrue if and only if the specified message can be decoded by this decoder.isDecodable in class MessageToMessageDecoder<ByteBuf,com.google.protobuf.MessageLite>msg - the messageExceptionpublic com.google.protobuf.MessageLite decode(ChannelHandlerContext ctx, ByteBuf msg) throws Exception
decode in class MessageToMessageDecoder<ByteBuf,com.google.protobuf.MessageLite>ExceptionCopyright © 2008-2012 The Netty Project. All Rights Reserved.