⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datablock.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace Imps.Client.Core.P2P.FileTransportor
{
    using NCindy;
    using NCindy.Buffer;
    using NCindy.Packet;
    using NCindy.Util.Logging;
    using System;

    public class DataBlock : TransportBlock
    {
        private readonly TransportingFile fileInfo;
        private readonly long fileOffset;
        private int length;
        private static readonly ILogger log = LogFactory.CreateLogger(MethodBase.GetCurrentMethod().ReflectedType);
        public const int Max_Block_Size = 0x400;
        public const byte OffsetIndex = 4;
        private IBuffer packetContent;
        private readonly byte transportingID;

        public DataBlock(FileChunk chunk, int subChunkID) : this(chunk.FileInfo, chunk.Offset + (0x400 * subChunkID))
        {
        }

        public DataBlock(TransportingFile fileInfo, long offset)
        {
            base.typeMask = 0;
            this.fileOffset = offset;
            this.fileInfo = fileInfo;
            this.transportingID = fileInfo.TransportingID;
        }

        public DataBlock(IPacket packet, int offset)
        {
            base.typeMask = 0;
            this.fileOffset = offset;
            this.length = packet.Content.Remaining - 8;
            base.data = new byte[this.length];
            this.transportingID = packet.Content.GetInnerByteArray()[packet.Content.Position + 1];
            Buffer.BlockCopy(packet.Content.GetInnerByteArray(), packet.Content.Position + 8, base.data, 0, base.data.Length);
        }

        protected override IPacket FillBlock()
        {
            if (this.packetContent == null)
            {
                lock (this.fileInfo.InnerFileStream)
                {
                    if (this.packetContent != null)
                    {
                        return new DefaultPacket(this.packetContent);
                    }
                    this.length = (int) Math.Min(this.fileInfo.FileSize - this.fileOffset, (long) 0x400);
                    this.packetContent = BufferFactory.GetBuffer(8 + this.length);
                    byte[] dst = this.packetContent.GetInnerByteArray();
                    dst[0] = 0;
                    dst[1] = this.transportingID;
                    Buffer.BlockCopy(BitConverter.GetBytes(this.fileOffset), 0, dst, 4, 4);
                    int num = this.fileInfo.InnerFileStream.Read(dst, 8, this.length);
                    this.packetContent.Limit = 8 + num;
                }
            }
            return new DefaultPacket(this.packetContent);
        }

        public byte[] Data
        {
            get
            {
                return base.data;
            }
        }

        public long FileOffset
        {
            get
            {
                return this.fileOffset;
            }
        }

        public int Length
        {
            get
            {
                return this.length;
            }
        }

        public byte TransportingID
        {
            get
            {
                return this.transportingID;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -