コード例 #1
0
        /// <summary>
        /// Отправить окончательный ответ
        /// </summary>
        private async Task SendResponse(IPackageServer packageServer)
        {
            switch (packageServer.StatusProcessingProject)
            {
            case StatusProcessingProject.ConvertingComplete:
            case StatusProcessingProject.Error:
            {
                _messagingService.ShowMessage("Отправка данных пакета в базу...");

                var packageDataShortResponse = _converterServerPackageDataToDto.FilesDataToShortResponse(packageServer);
                var result = await _convertingServerServiceFactory.UsingServiceRetry(service => service.Operations.UpdateFromResponse(packageDataShortResponse));

                if (result.OkStatus)
                {
                    _messagingService.ShowMessage("Конвертация пакета закончена");
                }
                else
                {
                    _loggerService.ErrorsLog(result.Errors);
                    _messagingService.ShowErrors(result.Errors);
                }

                _loggerService.LogByObject(LoggerLevel.Info, LoggerAction.Upload, ReflectionInfo.GetMethodBase(this), packageServer.Id.ToString());
                break;
            }

            case StatusProcessingProject.Abort:
                _messagingService.ShowMessage("Конвертация пакета прервана");
                _loggerService.InfoLog("Abort converting by user");
                break;
            }
            _idPackage = null;
        }
コード例 #2
0
 /// <summary>
 /// Отправить промежуточный отчет
 /// </summary>
 private async Task <IResultValue <IPackageServer> > SendIntermediateResponse(IPackageServer packageServer, IFileDataServer fileDataServer) =>
 await _converterServerPackageDataToDto.FileDataToResponse(fileDataServer).
 Void(_ => _messagingService.ShowMessage("Отправка данных в базу...")).
 MapBindAsync(fileDataRequest => _convertingServerServiceFactory.
              UsingServiceRetry(service => service.Operations.UpdateFromIntermediateResponse(packageServer.Id, fileDataRequest))).
 ResultVoidBadAsync(errors => _loggerService.ErrorsLog(errors)).
 ResultVoidBadAsync(errors => _messagingService.ShowErrors(errors)).
 ResultValueOkAsync(packageServer.SetStatusProcessingProject);
コード例 #3
0
        /// <summary>
        /// Сообщить о пустом/некорректном пакете
        /// </summary>
        private IPackageServer ReplyPackageIsInvalid(IPackageServer packageServer)
        {
            var error = packageServer switch
            {
                _ when !packageServer.IsFilesDataValid => new ErrorCommon(ErrorConvertingType.FileNotFound, "Файлы для конвертации не обнаружены"),
                _ when !packageServer.IsValidByAttemptingCount => new ErrorCommon(ErrorConvertingType.AttemptingCount, "Превышено количество попыток конвертирования пакета"),
                _ => throw new ArgumentOutOfRangeException(nameof(packageServer))
            };

            _messagingService.ShowAndLogError(error);
            return(packageServer.SetErrorToAllFiles(error).SetStatusProcessingProject(StatusProcessingProject.Error));
        }
コード例 #4
0
 /// <summary>
 /// Конвертировать пакет
 /// </summary>
 private async Task <IPackageServer> ConvertingFilesData(IPackageServer packageServer) =>
 await packageServer.FilesDataServer.
 FirstOrDefault(fileData => !packageServer.IsCompleted && !fileData.IsCompleted).
 Map(fileData => new ResultValue <IFileDataServer>(fileData, new ErrorCommon(ErrorConvertingType.ArgumentNullReference, nameof(IFileDataServer)))).
 ResultOkBad(
     okFunc: fileData => ConvertingByCountLimit(fileData, new ConvertingSettings(packageServer.ConvertingPackageSettings,
                                                                                 _projectSettings.PrintersInformation)).
     Map(fileDataConvert => packageServer.ChangeFileDataServer(fileDataConvert).
         Map(packageChanged => SendIntermediateResponse(packageChanged, fileDataConvert))).
     ResultValueOkAsync(ConvertingFilesData).
     MapAsync(result => result.OkStatus ? result.Value : packageServer),
     badFunc: _ => Task.FromResult(packageServer)).
 Value;
コード例 #5
0
 /// <summary>
 /// Конвертировать пакет
 /// </summary>
 private async Task ConvertingPackage(IPackageServer packageServer) =>
 await packageServer.
 WhereContinueAsyncBind(package => package.IsValid,
                        okFunc : package => package.
                        Void(_ => _messagingService.ShowMessage($"Конвертация пакета {package.Id}")).
                        Void(_ => _loggerService.LogByObject(LoggerLevel.Info, LoggerAction.Operation,
                                                             ReflectionInfo.GetMethodBase(this), packageServer.Id.ToString())).
                        Void(_ => ConvertingTimeActions.KillPreviousRunProcesses()).
                        Map(_ => ConvertingFilesData(package)).
                        MapAsync(ReplyPackageIsComplete),
                        badFunc : package => Task.FromResult(ReplyPackageIsInvalid(package))).
 VoidAsync(_ => _convertingFileData.CloseApplication()).
 VoidBindAsync(SendResponse);
コード例 #6
0
 /// <summary>
 /// Конвертировать серверную модель в окончательный ответ
 /// </summary>
 public async Task <PackageDataResponseServer> FilesDataToResponse(IPackageServer packageServer) =>
 new PackageDataResponseServer(packageServer.Id, packageServer.StatusProcessingProject,
                               await packageServer.FilesDataServer.Select(FileDataToResponse).
                               Map(Task.WhenAll));
コード例 #7
0
 /// <summary>
 /// Конвертировать серверную модель в промежуточную
 /// </summary>
 public PackageDataShortResponseServer FilesDataToShortResponse(IPackageServer packageServer) =>
 new PackageDataShortResponseServer(packageServer.Id, packageServer.StatusProcessingProject,
                                    packageServer.FilesDataServer.Select(FileDataToIntermediateResponse).ToList());
コード例 #8
0
 /// <summary>
 /// Сообщить об обработанном пакете, если процесс не был прерван
 /// </summary>
 private IPackageServer ReplyPackageIsComplete(IPackageServer packageServer) =>
 packageServer.SetStatusProcessingProject(StatusProcessingProject.ConvertingComplete).
 Void(_ => _loggerService.LogByObject(LoggerLevel.Info, LoggerAction.Reply,
                                      ReflectionInfo.GetMethodBase(this), packageServer.Id.ToString()));
コード例 #9
0
 public PackageServer(IPackageServer packageServer, IEnumerable <IFileDataServer> filesDataServer)
     : this(packageServer.NonNull().Id, packageServer.NonNull().AttemptingConvertCount,
            packageServer.NonNull().StatusProcessingProject, packageServer.NonNull().ConvertingPackageSettings,
            filesDataServer)
 {
 }