Beispiel #1
0
        private void InitializeModules(ChunkedHandler chunkedHandler, FileInfo destination)
        {
            _chunkedHandler               = chunkedHandler ?? throw new ArgumentNullException(nameof(chunkedHandler));
            _writer                       = new ChunkedFileWriter(destination, _token.Token);
            _reader.ChunkRead            += (chunk, isLastChunk) => chunkedHandler.AddChunkToQueue(chunk, isLastChunk);
            _reader.OnError              += error => OnError($"While reading: {error.GetException().Message}");
            _chunkedHandler.ChunkHandled += (chunk, isLastChunk) =>
            {
                if (_token.IsCancellationRequested)
                {
                    return;
                }
                while (Interlocked.CompareExchange(ref _chunkIndex, 0, 0) != chunk.Index)
                {
                    _chunkWriteEvent.WaitOne();
                }
                _chunkWriteEvent.Reset();
                _writer.WriteChunk(chunk, isLastChunk);
                Interlocked.Increment(ref _chunkIndex);
                _chunkWriteEvent.Set();
                if (isLastChunk)
                {
                    _allBytesWritten.Set();
                }
            };
            _chunkedHandler.OnError += error => OnError($"While handling: {error.GetException().Message}");
            int decimalPlaces = 2;

            _writer.ChunkWritten += (chunk, isLastChunk) =>
            {
                double percent = Math.Round((double)_reader.TotalBytesRead / _reader.TotalBytes * 100, decimalPlaces);
                PercentProgressChanged?.Invoke(percent);
            };
            _writer.OnError += error => OnError($"While writting: {error.GetException().Message}");
        }
Beispiel #2
0
        private ChunkedHandlers.ChunkedGZip.ChunkedGZipDecompressor GetGZipDecompressor()
        {
            var decompressor = new ChunkedHandlers.ChunkedGZip.ChunkedGZipDecompressor();

            decompressor.ChunkHandled += (chunk, isLastChunk) => _decompressorWriter.WriteChunk(chunk, isLastChunk);
            decompressor.OnError      += error => Assert.Fail(error.GetException().ToString());
            return(decompressor);
        }
Beispiel #3
0
 private void WriteRandomBytes(FileInfo fileInfo, int chunksCount)
 {
     using (var writer = new ChunkedFileWriter(fileInfo, new System.Threading.CancellationToken()))
     {
         for (int i = 0; i < chunksCount; i++)
         {
             var chunk = GenerateChunk(i);
             writer.WriteChunk(chunk, i + 1 == chunksCount);
         }
     }
 }
Beispiel #4
0
 public void FileWrite()
 {
     using (var writer = new ChunkedFileWriter(_writeFileInfo, new System.Threading.CancellationToken()))
     {
         writer.ChunkWritten += (chunk, isLastChunk) => _proccessedWriteBytes += chunk.Bytes.Length;
         writer.OnError      += error => Assert.Fail(error.GetException().StackTrace);
         var generator = new FileGenerator(_maxChunkSize);
         for (int i = 0; i < _chunksCount; i++)
         {
             writer.WriteChunk(generator.GenerateChunk(i), i + 1 == _chunksCount);
         }
     }
     Assert.AreEqual(_proccessedWriteBytes, _writeFileInfo.Length);
 }