public async Task <InvocationResponse> InvokeAsync(FunctionInvocation invocation)
        {
            // TODO: File InvocationResponse removal issue
            InvocationResponse response = new InvocationResponse
            {
                InvocationId = invocation.InvocationId
            };

            FunctionExecutionContext?executionContext = null;

            try
            {
                executionContext = _functionExecutionContextFactory.Create(invocation, _functionMap[invocation.FunctionId]);

                await _functionExecutionDelegate(executionContext);

                var parameterBindings = executionContext.OutputBindings;
                var result            = executionContext.InvocationResult;

                foreach (var paramBinding in parameterBindings)
                {
                    // TODO: ParameterBinding shouldn't happen here

                    foreach (var binding in executionContext.OutputBindings)
                    {
                        var parameterBinding = new ParameterBinding
                        {
                            Name = binding.Key,
                            Data = binding.Value.ToRpc()
                        };
                        response.OutputData.Add(parameterBinding);
                    }
                }
                if (result != null)
                {
                    var returnVal = result.ToRpc();

                    response.ReturnValue = returnVal;
                }

                response.Result = new StatusResult {
                    Status = Status.Success
                };
            }
            catch (Exception ex)
            {
                response.Result = new StatusResult
                {
                    Exception = ex.ToRpcException(),
                    Status    = Status.Failure
                };
            }
            finally
            {
                (executionContext as IDisposable)?.Dispose();
            }

            return(response);
        }
 private static void OutputInvocationResponse(InvocationResponse iResponse)
 {
     Log.Warn("					[Response]");
     Log.Info("						-Name: "+ iResponse.ControlMessageName);
     Log.Info("						-Description: "+ iResponse.Description);
     Log.Info(" 						[Output] ");
     foreach (var p in iResponse.OutputParameters)
     {
         Log.Info("  						[Parameter] ");
         Log.Info("   							-Parameter Name: "+ p.Name);
         Log.Info("   							-Parameter Value Description: "+ p.ValueDescription);
     }
 }
Beispiel #3
0
 private async Task DumpAsync(InvocationResponse input)
 {
     try
     {
         await webhookRepository.AddInvokationAsync(input.Webhook.Id, input.Dump, input.Result, input.Elapsed);
     }
     catch (Exception ex)
     {
         log.LogError(ex, w => w
                      .WriteProperty("action", "DumpHook")
                      .WriteProperty("status", "Failed"));
     }
 }
Beispiel #4
0
 public void InvokeResponse(InvocationResponse invokeResponse)
 {
     _executingInvocations.Remove(invokeResponse.InvocationId);
 }