Beispiel #1
0
 /// <summary>
 /// 构造函数
 /// 用于从文件读入区块
 /// </summary>
 /// <param name="transmissionTask"></param>
 /// <param name="blockIndex">分块位置</param>
 /// <param name="readOnCreated">是否立即从文件读取数据</param>
 public FileBlock(FileTransmission transmissionTask, int blockIndex, bool readOnCreated)
 {
     _fileStream = transmissionTask.FileStream;
     Index       = blockIndex;
     if (readOnCreated)
     {
         Read(true);
     }
 }
Beispiel #2
0
 /// <summary>
 /// 构造函数
 /// 用于从二进制数据读入区块
 /// </summary>
 /// <param name="transmissionTask"></param>
 /// <param name="receivedData">输入的二进制数据</param>
 public FileBlock(FileTransmission transmissionTask, byte[] receivedData)
 {
     _fileStream = transmissionTask.FileStream;
     if (receivedData[0] != Consts.FileBlockHeader)
     {
         throw new FileBlockException("Bad Header!", FileBlockException.ErrorCode.BadHeader);
     }
     Index       = BitConverter.ToInt32(receivedData, 1);
     _dataLength = receivedData.Length - 9;
     if (_dataLength > Consts.BlockSize)
     {
         throw new FileBlockException("Illegal FileBlock Size!", FileBlockException.ErrorCode.IllegalFileBlockSize);
     }
     _data     = new byte[_dataLength];
     _dataHash = new byte[4];
     Array.Copy(receivedData, 5, _dataHash, 0, 4);
     Array.Copy(receivedData, 9, _data, 0, _dataLength);
     if (!_dataHash.BytesEqual(_data.GetHash()))
     {
         throw new FileBlockException("Error Hash!", FileBlockException.ErrorCode.ChecksumError);
     }
 }
Beispiel #3
0
 public FileBlockCollection(FileTransmission transmissionTask)
 {
     Task         = transmissionTask;
     FileStream   = Task.FileStream;
     IoBufferSize = Consts.DefaultIoBufferSize;
 }
 public FileBlockCollection(FileTransmission transmissionTask)
 {
     Task = transmissionTask;
     FileStream = Task.FileStream;
     IoBufferSize = Consts.DefaultIoBufferSize;
 }