package netty.server.coder; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author hankchen * 2012-2-3 上午10:48:15 */ /** * 客户端编码器 */ public class XLClientEncoder extends OneToOneEncoder { Logger logger=LoggerFactory.getLogger(XLClientEncoder.class); @Override protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { if(!(msg instanceof XLRequest)) { return msg; } XLRequest request=(XLRequest)msg; ChannelBuffer totalBuffer=ChannelBuffers.dynamicBuffer(); /** * 先组织报文头 */ totalBuffer.writeByte(request.getEncode()); totalBuffer.writeByte(request.getEncrypt()); totalBuffer.writeByte(request.getExtend1()); totalBuffer.writeByte(request.getExtend2()); totalBuffer.writeInt(request.getSessionid()); totalBuffer.writeInt(request.getCommand()); /** * 组织报文的数据部分 */ ChannelBuffer dataBuffer=ProtocolUtil.encode(request.getEncode(),request.getParams()); int length=dataBuffer.readableBytes(); totalBuffer.writeInt(length); totalBuffer.writeBytes(dataBuffer); return totalBuffer; } }