Exemple #1
0
        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));
        }
Exemple #2
0
        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
            });
        }
Exemple #3
0
 private ProtoExecutionResult ExecuteMethod(MethodInfo method, object[] args)
 {
     return(_methodExecutor.Execute(method, args));
 }
Exemple #4
0
 public static Task <object> ExecuteAsync(this IMethodExecutor executor, object target, params object[] args)
 => executor.Execute(target, args).CreateResult();