public Message Process(Message request) { var executeStepRequest = request.ExecuteStepRequest; if (!_stepRegistry.ContainsStep(executeStepRequest.ParsedStepText)) { return(ExecutionError("Step Implementation not found", request)); } var method = _stepRegistry.MethodFor(executeStepRequest.ParsedStepText); var parameters = method.ParameterCount; var args = new string[parameters]; var stepParameter = executeStepRequest.Parameters; if (parameters != stepParameter.Count) { var argumentMismatchError = string.Format("Argument length mismatch for {0}. Actual Count: {1}, Expected Count: {2}", executeStepRequest.ActualStepText, stepParameter.Count, parameters); return(ExecutionError(argumentMismatchError, request)); } var validTableParamTypes = new[] { Parameter.Types.ParameterType.Table, Parameter.Types.ParameterType.SpecialTable }; for (var i = 0; i < parameters; i++) { args[i] = validTableParamTypes.Contains(stepParameter[i].ParameterType) ? GetTableData(stepParameter[i].Table) : stepParameter[i].Value; } var protoExecutionResult = _methodExecutor.Execute(method, args); return(WrapInMessage(protoExecutionResult, request)); }
private async void OnMethodExecution(MethodExecution <TMarshal> methodExecution) { var resultTask = methodExecutor.Execute(methodExecution); MethodResult <TMarshal> methodResult; if (resultTask.IsCompleted) { methodResult = resultTask.Result; } else { methodResult = await resultTask.ConfigureAwait(false); } connection.Send(new RpcRequest <TMarshal>() { MethodResult = methodResult }); }
private ProtoExecutionResult ExecuteMethod(MethodInfo method, object[] args) { return(_methodExecutor.Execute(method, args)); }
public static Task <object> ExecuteAsync(this IMethodExecutor executor, object target, params object[] args) => executor.Execute(target, args).CreateResult();