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.frame.LengthFieldBasedFrameDecoder; /** * @author hankchen * 2012-2-3 上午10:47:54 */ /** * 客户端解码器 */ public class XLClientDecoder extends LengthFieldBasedFrameDecoder { public XLClientDecoder() { super(1048576, 12, 4); // TODO Auto-generated constructor stub } @Override protected Object decode(ChannelHandlerContext context, Channel channel, ChannelBuffer buffer1) throws Exception { ChannelBuffer frame = (ChannelBuffer) super.decode(context, channel,buffer1); if (frame == null) { return null; } byte encode=frame.readByte(); byte encrypt=frame.readByte(); byte extend1=frame.readByte(); byte extend2=frame.readByte(); int sessionid=frame.readInt(); int result=frame.readInt(); int length=frame.readInt(); // 数据包长 ChannelBuffer dataBuffer=ChannelBuffers.buffer(length); frame.readBytes(dataBuffer, length); XLResponse response=new XLResponse(); response.setEncode(encode); response.setEncrypt(encrypt); response.setExtend1(extend1); response.setExtend2(extend2); response.setSessionid(sessionid); response.setResult(result); response.setLength(length); response.setValues(ProtocolUtil.decode(encode, dataBuffer)); response.setIp(ProtocolUtil.getClientIp(channel)); return response; } }