Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="startIndex">需要载入数据额外处理的开始位置</param>
        /// <param name="length">需要载入数据额外处理的数据长度 -1为,开始INDEX到结束位置,-2就是保留最后1位</param>
        ///  <param name="dataExtraCallBack"> 数据包在读取前需要额外的处理回调方法。(例如加密,解压缩等)</param>
        public ReadBytes(Byte[] data, int startIndex, int length, RDataExtraHandle dataExtraCallBack)
        {
            try
            {
                this.startIndex = startIndex;
                this.Length     = data.Length;
                if (length < 0)
                {
                    endlengt = (data.Length + length + 1) - startIndex;
                }
                else
                {
                    endlengt = length;
                }

                byte[] handBytes = new byte[this.startIndex];

                Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组

                byte[] endBytes = new byte[data.Length - (startIndex + endlengt)];

                Buffer.BlockCopy(data, (startIndex + endlengt), endBytes, 0, endBytes.Length); //首先保存不需要解密的数组

                byte[] NeedExByte = new byte[endlengt];

                Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length);

                if (dataExtraCallBack != null)
                {
                    NeedExByte = dataExtraCallBack(NeedExByte);
                }

                Data = new byte[handBytes.Length + NeedExByte.Length + endBytes.Length]; //重新整合解密完毕后的数据包

                Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length);
                Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length);
                Buffer.BlockCopy(endBytes, 0, Data, (handBytes.Length + NeedExByte.Length), endBytes.Length);
                current            = 0;
                IsDataExtraSuccess = true;
            }
            catch
            {
                IsDataExtraSuccess = false;
            }
        }
Example #2
0
        public ReadBytesV2(Byte[] data, RDataExtraHandle dataExtraCallBack)
        {
            try
            {
                if (data[0] == 0xff)
                {
                    base.current = 1;
                }

                Data            = data;
                this.startIndex = ReadHeadLengt();

                this.Length = data.Length;
                endlengt    = Length - startIndex;

                byte[] handBytes = new byte[this.startIndex];

                Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组

                byte[] NeedExByte = new byte[endlengt];

                Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length);

                if (dataExtraCallBack != null)
                {
                    NeedExByte = dataExtraCallBack(NeedExByte);
                }

                Data = new byte[handBytes.Length + NeedExByte.Length]; //重新整合解密完毕后的数据包

                Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length);
                Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length);
                current            = 0;
                IsDataExtraSuccess = true;
            }
            catch
            {
                IsDataExtraSuccess = false;
            }
        }
Example #3
0
        public ReadBytesV2(Byte[] data, RDataExtraHandle dataExtraCallBack)
        {
          

            try
            {
                //if (data[0] == 0xff)
                //    base.current = 1;

                Data = data;
                this.startIndex = ReadHeadLengt();

                this.Length = data.Length;
                endlengt = Length - startIndex;               

                byte[] handBytes = new byte[this.startIndex];

                Buffer.BlockCopy(data, 0, handBytes, 0, handBytes.Length); //首先保存不需要解密的数组

                byte[] NeedExByte = new byte[endlengt];

                Buffer.BlockCopy(data, startIndex, NeedExByte, 0, NeedExByte.Length);

                if (dataExtraCallBack != null)
                    NeedExByte = dataExtraCallBack(NeedExByte);

                Data = new byte[handBytes.Length + NeedExByte.Length]; //重新整合解密完毕后的数据包

                Buffer.BlockCopy(handBytes, 0, Data, 0, handBytes.Length);
                Buffer.BlockCopy(NeedExByte, 0, Data, handBytes.Length, NeedExByte.Length);              
                current = 0;
                IsDataExtraSuccess = true;
            }
            catch
            {
                IsDataExtraSuccess = false;
            }
        }