示例#1
0
        protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List <object> output)
        {
            CMapleClient client = context.GetAttribute <CMapleClient>(CMapleClient.attributeKey).Get();

            if (client.DecoderState == -1)
            {
                //检测长度
                if (input.WriterIndex >= 4)
                {
                    int packetHeader = input.ReadInt();
                    client.DecoderState = MapleCipher.getPacketLength(packetHeader);//MapleAESOFB.getPacketLength(packetHeader);
                    int aaa = 0;
                    client.m_RecvIv.Transform();
                }
                else
                {
                    return;
                }
            }


            if (input.ReadableBytes >= client.DecoderState)
            {
                client.DecoderState = -1;
                //IntPtr DecoderState = context.GetAttribute<IntPtr>(MapleClient.DecoderState).Get();
                //获取数据长度,创建一个空数组
                byte[] DecodePakcet = new byte[input.ReadableBytes];

                //读取正常数据区域
                input.ReadBytes(DecodePakcet);
                //解密成功后返回数据
                output.Add(DecodePakcet);
            }
        }