コード例 #1
0
        public void ShouldCompressAndDecompressTestStreams(string streamName)
        {
            using (var original = new MemoryStream())
            {
                using (var testStream = LoadTestStream(streamName))
                {
                    testStream.CopyTo(original);
                }
                var blockInfo = new Interfaces.BlockInfo {
                    OriginalBlockSize = original.Length
                };
                var compressionTask = new CompressionTask(() => LoadTestStream(streamName), blockInfo);
                compressionTask.Process();
                using (var compressed = new MemoryStream())
                {
                    compressionTask.WriteResult(compressed);

                    ReferenceEquals(compressionTask.BlockInfo, blockInfo).Should().BeTrue();
                    blockInfo.BlockSize.Should().Be(compressed.Length);

                    var decompressionTask = new DecompressionTask(() => new MemoryStream(compressed.GetBuffer(), 0, (int)compressed.Length, false), blockInfo);
                    decompressionTask.Process();
                    using (var decompressed = new MemoryStream())
                    {
                        decompressionTask.WriteResult(decompressed);

                        ReferenceEquals(decompressionTask.BlockInfo, blockInfo).Should().BeTrue();
                        blockInfo.OriginalBlockSize.Should().Be(decompressed.Length);

                        CollectionAssert.AreEqual(original.ToArray(), decompressed.ToArray());
                    }
                }
            }
        }
コード例 #2
0
        public void TestExecuteCompressionTaskOnWholeFile()
        {
            var inputFile  = new FileInfo("input.txt");
            var outputFile = new FileInfo("input.txt.gz");

            File.Delete(outputFile.Name);

            var inputHolder  = new FileChunkHolder();
            var outputHolder = new FileChunkHolder();
            var compressor   = new GZipCompressor();

            var task = new CompressionTask(0, inputHolder, outputHolder, compressor,
                                           inputFile.Name, 0, (int)inputFile.Length, outputFile.Name);

            task.Start();

            Assert.AreEqual(0, inputHolder.Count());
            Assert.AreEqual(0, outputHolder.Count());
            CollectionAssert.AreEqual(compressor.Compress(File.ReadAllBytes(inputFile.Name)), File.ReadAllBytes(outputFile.Name));
        }
コード例 #3
0
ファイル: Gui.xaml.cs プロジェクト: hodgman/dayzrp_patcher
 private void DoPatchTasks()
 {
     List<CompressionTask> decompressionTasks = new List<CompressionTask>();
     foreach (var file in m_tasks.toDelete)
     {
         file.Delete();
         Log_ThreadSafe("\tDeleted " + file.FullName);
         IncrementPatchProgressBar_ThreadSafe(false);
     }
     int maxConcurrentDownloads = 1;
     List<object> downloadHandles = new List<object>();
     foreach (var nameInfo in m_tasks.toDownload)
     {
         Log_ThreadSafe("\tDownloading " + nameInfo.Key.destination.Name);
         SetTaskProgressBar_ThreadSafe(0, "");
         CompressionTask decompressionTask = null;
         string downloadTo = nameInfo.Key.destination.FullName;
         if (nameInfo.Key.tempCompressed != null)
         {
             downloadTo = nameInfo.Key.tempCompressed.FullName;
             decompressionTask = new CompressionTask(nameInfo.Key);
             decompressionTasks.Add(decompressionTask);
         }
         object handle = m_downloader.DownloadFile(nameInfo.Value, downloadTo, FileDownloaded, ProgressUpdate, decompressionTask);
         if (handle == null)
         {
             Log_ThreadSafe("\tFailed to initiate download of " + nameInfo.Value.ToString());
             IncrementPatchProgressBar_ThreadSafe(true);
         }
         else
         {
             downloadHandles.Add(handle);
             while (downloadHandles.Count >= maxConcurrentDownloads)
             {
                 foreach (var h in downloadHandles)
                 {
                     if (m_downloader.IsComplete(h))
                     {
                         downloadHandles.Remove(h);
                         break;
                     }
                 }
                 Thread.Sleep(100);
             }
         }
     }
     while (decompressionTasks.Count > 0)
     {
         if (decompressionTasks[0].done)
         {
             decompressionTasks.RemoveAt(0);
         }
         else
         {
             string name = decompressionTasks[0].dl.destination.Name;
             SetTaskProgressBar_ThreadSafe(0, "Decompressing " + name);
             Thread.Sleep(100);
         }
     }
 }