Esempio n. 1
0
 public override void SetData(FileChunkInfo chunkInfo, byte[] data)
 {
     lock (_lock)
     {
         base.SetData(chunkInfo, data);
     }
 }
Esempio n. 2
0
 public override void ReleaseData(FileChunkInfo chunkInfo)
 {
     lock (_lock)
     {
         base.ReleaseData(chunkInfo);
     }
 }
Esempio n. 3
0
 public override byte[] GetData(FileChunkInfo chunkInfo)
 {
     lock (_lock)
     {
         return base.GetData(chunkInfo);
     }
 }
Esempio n. 4
0
 public virtual void ReadData(FileChunkInfo chunkInfo, byte[] data)
 {
     using (var fileStream = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read))
     {
         fileStream.Seek(chunkInfo.Position, SeekOrigin.Begin);
         fileStream.Read(data, 0, chunkInfo.Length);
     }
 }
Esempio n. 5
0
        public void AddFileChunk(FileChunkInfo fileChunkInfo, byte[] data)
        {
            DataHolder.SetData(fileChunkInfo, data);

            var chunkId = fileChunkInfo.Id;
            SplitInfo.Chunks[chunkId] = fileChunkInfo;
            UpdateChunkPositions(chunkId);
        }
Esempio n. 6
0
 public virtual void WriteData(FileChunkInfo chunkInfo, byte[] data)
 {
     using (var fileStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write))
     {
         fileStream.Seek(chunkInfo.Position, SeekOrigin.Begin);
         fileStream.Write(data, 0, chunkInfo.Length);
     }
 }
Esempio n. 7
0
 public FileChunk(string fileName, FileChunkInfo info, FileDataHolder dataHolder, FileDataReader dataReader, FileDataWriter dataWriter)
 {
     _fileName = fileName;
     _info = info;
     _dataHolder = dataHolder;
     _dataReader = dataReader;
     _dataWriter = dataWriter;
 }
Esempio n. 8
0
 public virtual void ReleaseData(FileChunkInfo chunkInfo)
 {
     var chunkId = chunkInfo.Id;
     if (_chunkDatas.ContainsKey(chunkId))
     {
         _chunkDatas[chunkId] = null;
     }
 }
Esempio n. 9
0
 public virtual byte[] GetData(FileChunkInfo chunkInfo)
 {
     var chunkId = chunkInfo.Id;
     if (!_chunkDatas.ContainsKey(chunkId))
     {
         var data = new byte[chunkInfo.Length];
         _chunkDatas.Add(chunkId, data);
     }
     return _chunkDatas[chunkId];
 }
        public void Execute()
        {
            var originalChunkInfo = _originalFileChunk.Info;
            var originalData = _originalFileChunk.GetData();

            var convertedDataInfo = _converter.Convert(new DataInfo(originalChunkInfo.Length, originalData));
            _originalFileChunk.ReleaseData();

            var convertedChunkInfo = new FileChunkInfo(originalChunkInfo.Id, convertedDataInfo.Length);
            _archiveAssembler.AddFileChunk(convertedChunkInfo, convertedDataInfo.Data);
        }
Esempio n. 11
0
 private bool CanAssembleChunk(FileChunkInfo chunkInfo)
 {
     return chunkInfo != null && TryComputePosition(chunkInfo) && !_assemblingChunks.Contains(chunkInfo.Id);
 }
Esempio n. 12
0
 private void AssembleChunk(FileChunkInfo chunkInfo)
 {
     _assemblingChunks.Add(chunkInfo.Id);
     TaskPool.AddTask(CreateFileAssembleTask(chunkInfo), 2);
 }
Esempio n. 13
0
        private bool TryComputePosition(FileChunkInfo fileChunkInfo)
        {
            var chunkId = fileChunkInfo.Id;
            if (chunkId == 0)
            {
                fileChunkInfo.Position = 0;
                return true;
            }
            var prevChunkId = chunkId - 1;
            var prevChunkInfo = SplitInfo.Chunks[prevChunkId];
            if (prevChunkInfo != null && prevChunkInfo.HasValidPosition())
            {
                fileChunkInfo.Position = prevChunkInfo.Position + prevChunkInfo.Length;
                return true;
            }

            fileChunkInfo.SetInvalidPosition();
            return false;
        }
Esempio n. 14
0
 private FileAssembleTask CreateFileAssembleTask(FileChunkInfo fileChunkInfo)
 {
     return new FileAssembleTask(CreateFileChunk(fileChunkInfo), this);
 }
Esempio n. 15
0
 protected FileChunk CreateFileChunk(FileChunkInfo chunkInfo)
 {
     return new FileChunk(FileName, chunkInfo, DataHolder, DataReader, DataWriter);
 }
Esempio n. 16
0
 public virtual void SetData(FileChunkInfo chunkInfo, byte[] data)
 {
     _chunkDatas.Add(chunkInfo.Id, data);
 }