public static void BuildBundle(int version, string path, CompressOption compressOption, BuildTarget target, bool isReBuild)
    {
        EditorUtility.DisplayProgressBar("开始打包ab", "开始打包ab", 1f);
        BeforeBuild();
        BundleBuildConfig.outputPath = path;
        BundleBuildConfig.VersionNum = version;

        abPath = Application.dataPath + "/" + path + "/" + target.ToString() + "/Bundles";
        if (isReBuild && Directory.Exists(abPath))
        {
            Directory.Delete(abPath, true);
        }
        if (!Directory.Exists(abPath))
        {
            Directory.CreateDirectory(abPath);
        }
        BuildAssetBundleOptions options = 0;

        switch (compressOption)
        {
        case CompressOption.Uncompressed: options = options | BuildAssetBundleOptions.UncompressedAssetBundle; break;

        case CompressOption.ChunkBasedCompression: options = options | BuildAssetBundleOptions.ChunkBasedCompression; break;
        }
        BuildPipeline.BuildAssetBundles(abPath, options, target);
        AfterBuild();
        AssetDatabase.Refresh();
        EditorUtility.ClearProgressBar();
        EditorUtility.DisplayDialog("打包完成", "打包完成", "ok");
    }
Beispiel #2
0
        public CompressOption GetTccCompressOption(string targetFolder, CompressionAlgo algo)
        {
            string src;

            if (Files != null)
            {
                src = String.Join(" ", Files.Select(i => i.FullName));
            }
            else if (Directories != null)
            {
                src = String.Join(" ", Directories.Select(i => i.FullName));
            }
            else
            {
                throw new MissingMemberException();
            }
            Target = targetFolder;

            var compressOption = new CompressOption
            {
                Algo            = algo,
                BlockMode       = BlockMode.Individual,
                SourceDirOrFile = src,
                DestinationDir  = Target,
                Threads         = Environment.ProcessorCount
            };

            return(compressOption);
        }
        private async Task <OperationSummary> Compress(PasswordMode passwordMode, CompressionAlgo algo,
                                                       string compressedFolder, string keysFolder, TestData data)
        {
            CompressOption compressOption = data.GetTccCompressOption(compressedFolder, algo);

            compressOption.PasswordOption = await _benchmarkOptionHelper.GenerateCompressPasswordOption(passwordMode, keysFolder);

            var resultCompress = await _tarCompressCrypt.Compress(compressOption);

            return(resultCompress);
        }
        public async Task <OperationSummary> Compress(CompressOption option)
        {
            IEnumerable <Block> blocks = BlockHelper.PreprareCompressBlocks(option);

            var sw = Stopwatch.StartNew();
            var po = new ParallelizeOption
            {
                FailMode = option.FailFast ? Fail.Fast : Fail.Smart,
                MaxDegreeOfParallelism = option.Threads
            };

            var operationBlocks = await blocks
                                  .AsAsyncStream(_cancellationTokenSource.Token)
                                  .CountAsync(out var counter)
                                  // Prepare encyption
                                  .ParallelizeStreamAsync(async(b, token) =>
            {
                await _encryptionCommands.PrepareEncryptionKey(b, option, token);
                return(b);
            }, po)
                                  // Core loop
                                  .ParallelizeStreamAsync(async(block, token) =>
            {
                _logger.LogInformation($"Starting {block.Source}");
                CommandResult result = null;
                try
                {
                    string cmd = _compressionCommands.CompressCommand(block, option);
                    result     = await cmd.Run(block.OperationFolder, token);
                    _logger.LogInformation($"Finished {block.Source} on {result?.ElapsedMilliseconds} ms");
                }
                catch (Exception e)
                {
                    _logger.LogError(e, $"Error on {block.Source}");
                }
                return(new OperationBlock(block, result));
            }, po)
                                  // Cleanup loop
                                  .ParallelizeStreamAsync(async(opb, token) =>
            {
                await _encryptionCommands.CleanupKey(opb.Block, option, opb.CommandResult, Mode.Compress);
                return(opb);
            }, po)
                                  .ForEachAsync((i, ct) =>
            {
                _blockListener.OnBlockReport(new BlockReport(i.Item.CommandResult, i.Item.Block, counter.Count));
                return(Task.CompletedTask);
            })
                                  .AsEnumerableAsync();

            sw.Stop();
            return(new OperationSummary(operationBlocks, option.Threads, sw));
        }
Beispiel #5
0
        public void setCompressAlgorithm(CompressOption algorithm)
        {

            switch (algorithm)
            {
                case CompressOption.lzma:
                    compresser = new LZMACompresser();
                    break;

                case CompressOption.gzip:
                    compresser = new GZipCompresser();
                    break;

                case CompressOption.zlib:
                    compresser = new ZlibCompresser();
                    break;

            }

        }
Beispiel #6
0
        public static IEnumerable <Block> PreprareCompressBlocks(CompressOption compressOption)
        {
            IEnumerable <Block> blocks;
            string extension = ExtensionFromAlgo(compressOption.Algo, compressOption.PasswordOption.PasswordMode != PasswordMode.None);
            var    srcDir    = new DirectoryInfo(compressOption.SourceDirOrFile);
            var    dstDir    = new DirectoryInfo(compressOption.DestinationDir);

            switch (compressOption.BlockMode)
            {
            case BlockMode.Individual:
                blocks = PrepareCompressBlockIndividual(extension, srcDir, dstDir).ToList();
                break;

            case BlockMode.Explicit:
                blocks = PrepareCompressBlockExplicit(extension, compressOption.SourceDirOrFile, dstDir).ToList();
                break;

            case BlockMode.EachFile:
                blocks = PrepareCompressBlockEachFile(extension, srcDir, dstDir).ToList();
                break;

            case BlockMode.EachFileRecursive:
                blocks = PrepareCompressBlockEachFileRecursive(extension, srcDir, dstDir).ToList();
                break;

            default:
                throw new NotImplementedException();
            }

            if (!dstDir.Exists)
            {
                dstDir.Create();
            }

            return(blocks);
        }
        public static TccCommand ParseCommandLine(this string[] args)
        {
            TccCommand command;

            var parsed = CommandLine.Parser.Default.ParseArguments <CompressCmdOptions, DecompressOptions, BenchmarkOptions>(args);

            try
            {
                command = parsed.MapResult(
                    (CompressCmdOptions opts) =>
                {
                    var option = new CompressOption
                    {
                        Algo             = opts.Algorithm,
                        CompressionRatio = opts.Ratio,
                        DestinationDir   = opts.Output,
                        FailFast         = opts.FailFast,
                        Verbose          = opts.Verbose,
                        SourceDirOrFile  = opts.Source.FirstOrDefault(),
                        BlockMode        = opts.Individual ? BlockMode.Individual : BlockMode.Explicit,
                        Threads          = ExtractThreads(opts)
                    };

                    ExtractPasswordInfo(opts, option, Mode.Compress);

                    return(new TccCommand
                    {
                        Mode = Mode.Compress,
                        Option = option
                    });
                },
                    (DecompressOptions opts) =>
                {
                    var option = new DecompressOption
                    {
                        DestinationDir  = opts.Output,
                        FailFast        = opts.FailFast,
                        Verbose         = opts.Verbose,
                        SourceDirOrFile = opts.Source.FirstOrDefault(),
                        Threads         = ExtractThreads(opts)
                    };

                    ExtractPasswordInfo(opts, option, Mode.Decompress);

                    return(new TccCommand
                    {
                        Mode = Mode.Decompress,
                        Option = option
                    });
                },
                    (BenchmarkOptions opts) =>
                {
                    bool IsExplicitMode()
                    {
                        return(!args.Any(i => BenchmarkOptions.AutoTestDataOptions.Contains(i)));
                    }

                    var option = new BenchmarkOption
                    {
                        Algorithm          = opts.Algorithm,
                        Ratios             = opts.Ratios,
                        Encrypt            = opts.Encrypt,
                        Source             = IsExplicitMode() ? opts.Source : null,
                        Content            = opts.Content,
                        NumberOfFiles      = opts.NumberOfFiles,
                        FileSize           = opts.FileSize,
                        Threads            = opts.Threads,
                        OutputCompressed   = opts.OutputCompressed,
                        OutputDecompressed = opts.OutputDecompressed,
                        Cleanup            = opts.Cleanup
                    };
                    return(new TccCommand
                    {
                        Mode = Mode.Benchmark,
                        BenchmarkOption = option
                    });
                },
                    errs => new TccCommand {
                    ReturnCode = 1
                });
            }
            catch (CommandLineException ae)
            {
                Console.Out.WriteLine(ae.Message);
                return(new TccCommand {
                    ReturnCode = 1
                });
            }
            catch (Exception e)
            {
                Console.Out.WriteLine(e.ToString());
                return(new TccCommand {
                    ReturnCode = 1
                });
            }
            return(command);
        }
Beispiel #8
0
        static public void export(String[] inputPathList, String[] outputPathList, CompressOption op, String prefix_primaryKey, String prefix_IgnoreSheet, String prefix_IgnoreLine, String prefix_IgnoreColumn, Boolean ignoreBlank, Boolean merge)
        {

            int i = 0;
            int len = inputPathList.Length;

            while (i < len)
            {

                export(inputPathList[i], outputPathList[i], op, prefix_primaryKey, prefix_IgnoreSheet, prefix_IgnoreLine, prefix_IgnoreColumn, ignoreBlank, merge);

                i++;

            }

        }
Beispiel #9
0
        static public void export(String inputPath, String outputPath, CompressOption op, String prefix_primaryKey, String prefix_IgnoreSheet, String prefix_IgnoreLine, String prefix_IgnoreColumn, Boolean ignoreBlank, Boolean merge)
        {

            if (Directory.Exists(inputPath))
            {
                DirectoryInfo di = new DirectoryInfo(inputPath);

                FileInfo[] fileInfos = di.GetFiles("*.xls", SearchOption.AllDirectories);

                for (int k = 0; k < fileInfos.Length; k++)
                {
                    //如果不是隐藏文件  则解析
                    if ((fileInfos[k].Attributes & FileAttributes.Hidden) == 0)
                    {
                        export(fileInfos[k].FullName, outputPath, op, prefix_primaryKey, prefix_IgnoreSheet, prefix_IgnoreLine, prefix_IgnoreColumn, ignoreBlank, merge);
                    }

                }
            }
            else
            {
                KTable[] sheets = doExport(inputPath, prefix_primaryKey, prefix_IgnoreSheet, prefix_IgnoreLine, prefix_IgnoreColumn, ignoreBlank, merge);

                if (null == outputPath || "" == outputPath)
                {
                    FileInfo fi = new FileInfo(inputPath);
                    outputPath = fi.DirectoryName;
                }

                if (!Directory.Exists(outputPath))
                    throw new Exception("导出路径\"" + outputPath + "\"不存在");

                foreach (KTable sheet in sheets)
                {

                    packager.reset();
                    packager.writeTable(sheet);

                    String path = outputPath + "/" + sheet.name + ".kk";

                    Byte[] bytes = packager.data;

                    MemoryStream inStream = new MemoryStream(bytes);
                    MemoryStream outStream = new MemoryStream();

                    ICompresser compresser;

                    switch (op)
                    {

                        case CompressOption.lzma:
                            compresser = new LZMACompresser();
                            compresser.compress(inStream, outStream);
                            break;

                        case CompressOption.zlib:
                            compresser = new ZlibCompresser();
                            compresser.compress(inStream, outStream);
                            break;

                        case CompressOption.none:
                            outStream = inStream;
                            break;

                        default:
                            throw new Exception();

                    }

                    FileStream fs = File.Create(path);
                    outStream.WriteTo(fs);
                    fs.Close();

                    outStream.Dispose();

                }

            }

        }
Beispiel #10
0
        public string CompressCommand(Block block, CompressOption option)
        {
            var    cmd = new StringBuilder();
            string ratio;

            switch (option.Algo)
            {
            case CompressionAlgo.Lz4:
                ratio = option.CompressionRatio != 0 ? $"-{option.CompressionRatio}" : string.Empty;
                break;

            case CompressionAlgo.Brotli:
                ratio = option.CompressionRatio != 0 ? $"-q {option.CompressionRatio}" : string.Empty;
                break;

            case CompressionAlgo.Zstd:
                ratio = option.CompressionRatio != 0 ? $"-{option.CompressionRatio}" : string.Empty;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(option), "Unknown PasswordMode");
            }

            switch (option.PasswordOption.PasswordMode)
            {
            case PasswordMode.None:
                // tar -c C:\SourceFolder | lz4.exe -1 - compressed.tar.lz4
                cmd.Append($"{_ext.Tar()} -c {block.Source}");
                switch (option.Algo)
                {
                case CompressionAlgo.Lz4:
                    cmd.Append($" | {_ext.Lz4()} {ratio} -v - {block.DestinationArchive}");
                    break;

                case CompressionAlgo.Brotli:
                    cmd.Append($" | {_ext.Brotli()} {ratio} - -o {block.DestinationArchive}");
                    break;

                case CompressionAlgo.Zstd:
                    cmd.Append($" | {_ext.Zstd()} {ratio} - -o {block.DestinationArchive}");
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(option), "Unknown PasswordMode");
                }
                break;

            case PasswordMode.InlinePassword:
            case PasswordMode.PasswordFile:
            case PasswordMode.PublicKey:
                string passwdCommand = PasswordCommand(option, block);
                // tar -c C:\SourceFolder | lz4.exe -1 - | openssl aes-256-cbc -k "password" -out crypted.tar.lz4.aes
                cmd.Append($"{_ext.Tar()} -c {block.Source}");
                switch (option.Algo)
                {
                case CompressionAlgo.Lz4:
                    cmd.Append($" | {_ext.Lz4()} {ratio} -v - ");
                    break;

                case CompressionAlgo.Brotli:
                    cmd.Append($" | {_ext.Brotli()} {ratio} - ");
                    break;

                case CompressionAlgo.Zstd:
                    cmd.Append($" | {_ext.Zstd()} {ratio} - ");
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(option), "Unknown PasswordMode");
                }
                cmd.Append($" | {_ext.OpenSsl()} aes-256-cbc {passwdCommand} -out {block.DestinationArchive}");
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(option));
            }
            return(cmd.ToString());
        }
        public async Task <OperationSummary> RunBenchmark(BenchmarkOption benchmarkOption)
        {
            var operationSummaries = new List <OperationSummary>();
            var keysFolder         = TestFileHelper.NewFolder();

            var iterations = await _iterationGenerator.PrepareIteration(benchmarkOption);

            var threads = benchmarkOption.Threads == 0 ? Environment.ProcessorCount : benchmarkOption.Threads;

            foreach (var iteration in iterations)
            {
                PasswordMode pm = iteration.Encryption ? PasswordMode.PublicKey : PasswordMode.None;
                var          compressedFolder = TestFileHelper.NewFolder(benchmarkOption.OutputCompressed);
                var          outputFolder     = TestFileHelper.NewFolder(benchmarkOption.OutputDecompressed);

                // compress
                var compressOption = new CompressOption
                {
                    Algo             = iteration.Algo,
                    CompressionRatio = iteration.CompressionRatio,
                    BlockMode        = BlockMode.Individual,
                    SourceDirOrFile  = iteration.Content.Source,
                    DestinationDir   = compressedFolder,
                    Threads          = threads,
                    PasswordOption   = await _benchmarkOptionHelper.GenerateCompressPasswordOption(pm, keysFolder)
                };

                OperationSummary resultCompress = await _tarCompressCrypt.Compress(compressOption);

                if (_cancellationTokenSource.IsCancellationRequested)
                {
                    await Cleanup();

                    return(null);
                }
                operationSummaries.Add(resultCompress);
                resultCompress.ThrowOnError();

                // decompress
                var decompressOption = new DecompressOption
                {
                    SourceDirOrFile = compressedFolder,
                    DestinationDir  = outputFolder,
                    Threads         = threads,
                    PasswordOption  = _benchmarkOptionHelper.GenerateDecompressPasswordOption(pm, keysFolder)
                };

                OperationSummary resultDecompress = await _tarCompressCrypt.Decompress(decompressOption);

                if (_cancellationTokenSource.IsCancellationRequested)
                {
                    await Cleanup();

                    return(null);
                }

                operationSummaries.Add(resultDecompress);
                resultDecompress.ThrowOnError();

                StringBuilder sb = FormatResultSummary(iteration, resultCompress, resultDecompress);

                Console.Out.WriteLine(sb.ToString());

                async Task Cleanup()
                {
                    if (benchmarkOption.Cleanup)
                    {
                        await "del /f /s /q * > NUL".Run(compressedFolder, CancellationToken.None);
                        Directory.Delete(compressedFolder, true);
                        await "del /f /s /q * > NUL".Run(outputFolder, CancellationToken.None);
                        Directory.Delete(outputFolder, true);
                    }
                }

                await Cleanup();
            }

            return(new OperationSummary(operationSummaries.SelectMany(i => i.OperationBlocks), 0, default));
        }
Beispiel #12
0
        static public void export(String[] inputPathList, String outputPath, CompressOption op, String prefix_primaryKey, String prefix_IgnoreSheet, String prefix_IgnoreLine, String prefix_IgnoreColumn, Boolean ignoreBlank)
        {

            commentRowNum--;
            fieldNameRowNum--;
            typeRowNum--;
            dataRowStartNum--;

            int i = 0;
            int len = inputPathList.Length;

            while (i < len)
            {

                export(inputPathList[i], outputPath, op, prefix_primaryKey, prefix_IgnoreSheet, prefix_IgnoreLine, prefix_IgnoreColumn, ignoreBlank);

                i++;

            }

            Console.WriteLine("已生成代码至");
            Console.WriteLine(codeFolderPath);

        }