public bool Start(FileReader fileReader, Archiever archiever, FileWriter fileWriter, OperationType operationType) { ConsoleLogger.WriteDiagnosticInfo($"{operationType.DisplayName()} of {_sourceFilePath} to {_targetFilePath} is started..."); new Thread(fileReader.Read).Start(); for (int i = 0; i < coresCount; i++) { var current = i; new Thread(() => archiever.Start(current)).Start(); } var threadToWrite = new Thread(fileWriter.Save); threadToWrite.Start(); threadToWrite.Join(); if (StatusManager.Exception != null) { ConsoleLogger.WriteError(StatusManager.Exception.Message); return(false); } return(true); }
static void Main(string[] args) { Console.CancelKeyPress += (sender, ceArgs) => { StatusManager.ProcessIsCanceled = true; ConsoleLogger.WriteDiagnosticInfo(PROCESS_CANCELLED); Environment.Exit(FAILURE_EXIT_CODE); }; try { Validation.CheckInputParameters(args); var inputFile = new FileInfo(args[1]); var threadManager = new ThreadManager(); FileReader fileReader = null; FileWriter fileWriter = null; Archiever archiever = null; OperationType operationType = OperationType.Compress; GZipBlockArchiver compressor = new GZipBlockArchiver(args[1], args[2], threadManager, inputFile.Length); if (args[0] == Dictionary.COMPRESS_COMMAND) { fileReader = new UncompressedFileReader(args[1], compressor.CompressedDataManagers); fileWriter = new CompressedFileWriter(args[2], compressor.DictionaryWritingManager); archiever = new Compressor(compressor.CompressedDataManagers, compressor.DictionaryWritingManager); } else { fileReader = new CompressedFileReader(args[1], compressor.CompressedDataManagers); fileWriter = new DecompressedFileWriter(args[2], compressor.DictionaryWritingManager); archiever = new Decompressor(compressor.CompressedDataManagers, compressor.DictionaryWritingManager); operationType = OperationType.Decompress; } var processResult = compressor.Start(fileReader, archiever, fileWriter, operationType); Console.CursorTop += 1; if (processResult && !StatusManager.ProcessIsCanceled) { ConsoleLogger.WriteSuccessInfo($"{args[2]} : {SUCCESS_CREATED}"); } else { ConsoleLogger.WriteError($"{args[2]}: {FAILURE_CREATED}"); } } catch (Exception ex) { ConsoleLogger.WriteError(FAILURE_CREATED); Console.WriteLine(END_PROCESS); Console.ReadKey(); } }