public Object encode(ChannelHandlerContext ctx, Channel channel, Object obj)
throws Exception {
if (!(obj instanceof RpcMessage)) {
return obj;
}
RpcMessage message = (RpcMessage) obj;
int size = message.getSerializedSize();
ChannelBuffer buffer = new BigEndianHeapChannelBuffer(4 + size + 4);
buffer.writeBytes("RPC0".getBytes());
int writerIndex = buffer.writerIndex();
CodedOutputStream output = CodedOutputStream.newInstance(
buffer.array(), buffer.writerIndex(), buffer.writableBytes() - 4);
message.writeTo(output);
output.checkNoSpaceLeft();
buffer.writerIndex(writerIndex + size);
Adler32 checksum = new Adler32();
checksum.update(buffer.array(), buffer.arrayOffset(), buffer.readableBytes());