예제 #1
0
    /// <summary>
    /// 安装游戏
    /// </summary>
    private void InstallationApp()
    {
        Debug.LogWarning("开始检查安装");
        Action <HotUpdateRessMgr.DecompressionOrDownInfo> checkFileed = a =>
        {
            AsynTask task = new AsynTask(true, () =>
            {
                HotUpdateRessMgr.Instance.Save(a, true);
                HotUpdateRessMgr.Instance.RefreshLocalVerInfo(() =>
                {
                    SceneMgr.Instance.QueueEvent(AppConst.CoreDef.INSTALLATIONED);
                });
            }, this.InstallationFailue);
            task.taskItemFinished = (it) =>
            {
                DecompressionTask dt     = it as DecompressionTask;
                ABInfo            abDown = dt.downLoadInfo;
                a.localVer.Save(abDown);
                HotUpdateRessMgr.Instance.Save(a, false);
            };
            Debug.Log("检查完成需要安装的文件个数为:" + a.comparisonInfo.needDecompressionList.Count);
            foreach (ABInfo ab in a.comparisonInfo.needDecompressionList)
            {
                task.AddTask(new DecompressionTask(ab));
            }
            task.OnExecute();
        };

        HotUpdateRessMgr.Instance.GetDecompressionTaskList(HotUpdateRessMgr.Instance.verInfo, checkFileed);
    }
예제 #2
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());
                    }
                }
            }
        }
예제 #3
0
        public void TestExecuteDecompressionTaskOnWholeFile()
        {
            var inputFile  = new FileInfo("input.txt.gz");
            var outputFile = new FileInfo("output.txt");

            File.Delete(outputFile.Name);

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

            var task = new DecompressionTask(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.Decompress(File.ReadAllBytes(inputFile.Name)), File.ReadAllBytes(outputFile.Name));
        }