private void Compress(ICompressStrategy strategy, IFileNameProvider sourceFileNameProvider, IFileNameProvider targetFileNameProvider) { _wasException = null; var sourceFileName = sourceFileNameProvider.GetFileName(); if (!File.Exists(sourceFileName)) { throw new FileNotFoundException($"Не найден файл {sourceFileName}"); } // создание очередей var loggerForQueue = new LoggerDummy(); var queueForRead = new PartQueue("ForRead", loggerForQueue); _queues.Add(queueForRead); var queueForCompress = new PartQueue("ForCompress", loggerForQueue); _queues.Add(queueForCompress); var queueForWrite = new IndexedParts("ForWrite", loggerForQueue); _queues.Add(queueForWrite); _stopEvent = new ManualResetEventSlim(false); // создание обработчиков очередей var writer = new Writer(_logger, _systemInfoProvider, ApplExceptionHandler, targetFileNameProvider, _stopEvent, queueForWrite, queueForRead); _queueHandlers.Add(writer); var archiversRuner = new CompressRuner(_logger, _systemInfoProvider, ApplExceptionHandler, queueForCompress, queueForWrite); _queueHandlers.Add(archiversRuner); var partReader = new FilePartReader(_logger, strategy); var reader = new Reader(_logger, _systemInfoProvider, ApplExceptionHandler, sourceFileNameProvider, partReader, queueForRead, queueForCompress); _queueHandlers.Add(reader); // вывод отладочной информации var sourceFileInfo = new FileInfo(sourceFileName); _logger.Add($"Размер файла {sourceFileInfo.Length} byte"); AddSystemInfo(); var maxActivePartCount = strategy.MaxActivePartCount; _logger.Add($"Максимальное кол-во одновременно обрабатываемых частей {maxActivePartCount} шт."); _logger.Add($"Размер одной части {strategy.PartSize} byte"); _logger.Add("Работа начата..."); _stopWatch.Reset(); _stopWatch.Start(); for (var i = 0; i < maxActivePartCount; i++) { var part = new FilePart($"FilePart{i + 1}"); queueForRead.Add(part); } StopEventWait(); }
public void ExecuteCompress(ICompressStrategy strategy, IFileNameProvider sourceFileNameProvider, IFileNameProvider targetFileNameProvider) { if (Thread.CurrentThread.Name == null) { Thread.CurrentThread.Name = "Main"; } Compress(strategy, sourceFileNameProvider, targetFileNameProvider); }
public FilePartReader(ILogger logger, ICompressStrategy strategy) : base(logger) { _strategy = strategy; }
public Compression(ICompressStrategy compress) { _compress = compress; }
private static void SetStrategyForImages() { CompressStrategy = new ImageCompressStrategy(imageCompressionLevel); }
private static void SetStrategyForFiles() { CompressStrategy = new GZipCompressStrategy(); }