Example #1
0
        private Task ProcessArchive()
        {
            _logger.LogInformation($"File Id: {_config.ArchiveFileId} processing requested");

            if (!_fileManager.FileExists(_config.InputPath))
            {
                throw new FileNotFoundException($"File Id: {_config.ArchiveFileId} does not exist at {_config.InputPath}");
            }

            _fileManager.CreateDirectory(_tmpOriginalDirectory);
            _fileManager.CreateDirectory(_tmpRebuiltDirectory);

            _logger.LogInformation($"File Id: {_config.ArchiveFileId} Extracting archive to temp folder {_tmpOriginalDirectory}");
            var fileMappings = _archiveManager.ExtractArchive(_config.InputPath, _tmpOriginalDirectory);

            if (fileMappings == null)
            {
                _logger.LogWarning($"File Id: {_config.ArchiveFileId} Password Protected received");
                var report = _passwordProtectedReportGenerator.CreateReport(_config.ArchiveFileId);
                _fileManager.WriteFile(_config.OutputPath, Encoding.UTF8.GetBytes(report));
            }
            else
            {
                _logger.LogInformation($"File Id: {_config.ArchiveFileId} Creating archive in temp folder {_tmpRebuiltDirectory}");
                _archiveManager.CreateArchive(_tmpRebuiltDirectory, _config.OutputPath);

                _responseConsumer.SetPendingFiles(new List <Guid>(fileMappings.Keys));

                var senderTask   = _responseProducer.SendMessages(_tmpOriginalDirectory, _tmpRebuiltDirectory, _cancellationTokenSource.Token);
                var consumerTask = _responseConsumer.ConsumeResponses(fileMappings, _tmpRebuiltDirectory, _tmpOriginalDirectory, _cancellationTokenSource.Token);

                Task.WaitAll(senderTask, consumerTask);
            }

            _adaptationOutcomeSender.Send(FileOutcome.Replace, _config.ArchiveFileId, _config.ReplyTo);
            ClearSourceStore(_tmpOriginalDirectory);
            ClearRebuiltStore(_tmpRebuiltDirectory);

            return(Task.CompletedTask);
        }