Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 public void ExecuteCompress(ICompressStrategy strategy, IFileNameProvider sourceFileNameProvider,
                             IFileNameProvider targetFileNameProvider)
 {
     if (Thread.CurrentThread.Name == null)
     {
         Thread.CurrentThread.Name = "Main";
     }
     Compress(strategy, sourceFileNameProvider, targetFileNameProvider);
 }
Esempio n. 3
0
 public FilePartReader(ILogger logger, ICompressStrategy strategy) : base(logger)
 {
     _strategy = strategy;
 }
Esempio n. 4
0
 public Compression(ICompressStrategy compress)
 {
     _compress = compress;
 }
Esempio n. 5
0
 private static void SetStrategyForImages()
 {
     CompressStrategy = new ImageCompressStrategy(imageCompressionLevel);
 }
Esempio n. 6
0
 private static void SetStrategyForFiles()
 {
     CompressStrategy = new GZipCompressStrategy();
 }