📄 datablock.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 + -