private async Task HandleRequestAsync(OptimizerGeneratedQueryDTO request) { try { switch (request.PurposeCase) { case OptimizerGeneratedQueryDTO.PurposeOneofCase.OptimizationStartedNotification: _activeRunId = request.OptimizationStartedNotification.RunID.toGuid(); break; case OptimizerGeneratedQueryDTO.PurposeOneofCase.EvaluationRequest: await Log($"{ServerPrefix} Request Evaluation"); await EvaluateAsync(request); break; case OptimizerGeneratedQueryDTO.PurposeOneofCase.CancelRequest: await Log($"{ServerPrefix} Request Cancel"); _randomNumberEvaluator.Cancel(); break; case OptimizerGeneratedQueryDTO.PurposeOneofCase.None: break; default: await Log($"{ServerPrefix} Run Other - {request}"); break; } } catch (Exception e) { await _client.OfferErrorResultAsync(new SimulationEvaluationErrorResponseDTO() { Name = _name, Message = $"Error handling request [{request.PurposeCase}]", Exception = e.ToString() }); } }
private async Task EvaluateAsync(OptimizerGeneratedQueryDTO request) { MapField <string, double> inputs = request.EvaluationRequest.InputVector; await Log($"{CommandPrefix} Requested Input: [{inputs}]"); foreach (Input input in _inputSource) { input.EvaluatingValue = inputs[input.Name]; } foreach (Output output in _outputSource) { output.EvaluatingValue = "Evaluating..."; } UpdateBindingSourceOnUI(_inputSource); UpdateBindingSourceOnUI(_outputSource); await Log($"{CommandPrefix} Evaluating..."); var result = await _randomNumberEvaluator.EvaluateAsync(inputs, _outputSource.List); foreach (Input input in _inputSource) { input.CurrentValue = inputs[input.Name]; } foreach (Output output in _outputSource) { if (result.Output.ContainsKey(output.Name)) { output.CurrentValue = result.Output[output.Name].ToString(); output.EvaluatingValue = result.Output[output.Name].ToString(); } else { output.CurrentValue = result.Status.ToString(); output.EvaluatingValue = result.Status.ToString(); } } UpdateBindingSourceOnUI(_inputSource); UpdateBindingSourceOnUI(_outputSource); switch (result.Status) { case EvaluationResult.ResultStatus.Succeed: await Log($"{CommandPrefix} Evaluation Succeed [{ToDebugString(result.Output)}]"); SimulationEvaluationCompletedResponseDTO request1 = new SimulationEvaluationCompletedResponseDTO { Name = _name, OutputVector = { result.Output } }; await _client.OfferSimulationResultAsync(request1); break; case EvaluationResult.ResultStatus.Failed: await Log($"{CommandPrefix} Evaluation Failed [{ToDebugString(result.Output)}]\nException: {result.Exception}"); await _client.OfferErrorResultAsync(new SimulationEvaluationErrorResponseDTO() { Name = _name, Message = $"{CommandPrefix} Evaluation Failed when evaluating [{inputs}]", Exception = result.Exception.ToString() }); break; case EvaluationResult.ResultStatus.Canceled: await Log($"{CommandPrefix} Evaluation Canceled"); await _client.OfferSimulationResultAsync(new SimulationEvaluationCompletedResponseDTO { Name = _name, OutputVector = { result.Output } }); break; default: throw new ArgumentOutOfRangeException(); } }