public override void SetData(FileChunkInfo chunkInfo, byte[] data) { lock (_lock) { base.SetData(chunkInfo, data); } }
public override void ReleaseData(FileChunkInfo chunkInfo) { lock (_lock) { base.ReleaseData(chunkInfo); } }
public override byte[] GetData(FileChunkInfo chunkInfo) { lock (_lock) { return base.GetData(chunkInfo); } }
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); } }
public void AddFileChunk(FileChunkInfo fileChunkInfo, byte[] data) { DataHolder.SetData(fileChunkInfo, data); var chunkId = fileChunkInfo.Id; SplitInfo.Chunks[chunkId] = fileChunkInfo; UpdateChunkPositions(chunkId); }
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); } }
public FileChunk(string fileName, FileChunkInfo info, FileDataHolder dataHolder, FileDataReader dataReader, FileDataWriter dataWriter) { _fileName = fileName; _info = info; _dataHolder = dataHolder; _dataReader = dataReader; _dataWriter = dataWriter; }
public virtual void ReleaseData(FileChunkInfo chunkInfo) { var chunkId = chunkInfo.Id; if (_chunkDatas.ContainsKey(chunkId)) { _chunkDatas[chunkId] = null; } }
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); }
private bool CanAssembleChunk(FileChunkInfo chunkInfo) { return chunkInfo != null && TryComputePosition(chunkInfo) && !_assemblingChunks.Contains(chunkInfo.Id); }
private void AssembleChunk(FileChunkInfo chunkInfo) { _assemblingChunks.Add(chunkInfo.Id); TaskPool.AddTask(CreateFileAssembleTask(chunkInfo), 2); }
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; }
private FileAssembleTask CreateFileAssembleTask(FileChunkInfo fileChunkInfo) { return new FileAssembleTask(CreateFileChunk(fileChunkInfo), this); }
protected FileChunk CreateFileChunk(FileChunkInfo chunkInfo) { return new FileChunk(FileName, chunkInfo, DataHolder, DataReader, DataWriter); }
public virtual void SetData(FileChunkInfo chunkInfo, byte[] data) { _chunkDatas.Add(chunkInfo.Id, data); }