/** * $Id: NettyEncoder.java 1831 2013-05-16 01:39:51Z shijia.wxr $ */ package com.alibaba.rocketmq.remoting.netty; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import java.nio.ByteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.rocketmq.remoting.common.RemotingHelper; import com.alibaba.rocketmq.remoting.protocol.RemotingCommand; /** * @author vintage.wang@gmail.com shijia.wxr@taobao.com * */ public class NettyEncoder extends MessageToByteEncoder<Object> { private static final Logger log = LoggerFactory.getLogger(RemotingHelper.RemotingLogName); @Override public void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { RemotingCommand cmd = null; try { if (msg instanceof RemotingCommand) { cmd = (RemotingCommand) msg; ByteBuffer header = cmd.encodeHeader(); out.writeBytes(header); byte[] body = cmd.getBody(); if (body != null) { out.writeBytes(body); } } } catch (Exception e) { log.error("encode exception, " + RemotingHelper.parseChannelRemoteAddr(ctx.channel()), e); if (cmd != null) { log.error(cmd.toString()); } ctx.channel().close(); } } }