public GrpcWorker(IFunctionsApplication application, FunctionRpcClient rpcClient, GrpcHostChannel outputChannel, IInvocationFeaturesFactory invocationFeaturesFactory, IOutputBindingsInfoProvider outputBindingsInfoProvider, IMethodInfoLocator methodInfoLocator, IOptions <GrpcWorkerStartupOptions> startupOptions, IOptions <WorkerOptions> workerOptions) { if (outputChannel == null) { throw new ArgumentNullException(nameof(outputChannel)); } _outputReader = outputChannel.Channel.Reader; _outputWriter = outputChannel.Channel.Writer; _application = application ?? throw new ArgumentNullException(nameof(application)); _rpcClient = rpcClient ?? throw new ArgumentNullException(nameof(rpcClient)); _invocationFeaturesFactory = invocationFeaturesFactory ?? throw new ArgumentNullException(nameof(invocationFeaturesFactory)); _outputBindingsInfoProvider = outputBindingsInfoProvider ?? throw new ArgumentNullException(nameof(outputBindingsInfoProvider)); _methodInfoLocator = methodInfoLocator ?? throw new ArgumentNullException(nameof(methodInfoLocator)); _startupOptions = startupOptions ?? throw new ArgumentNullException(nameof(startupOptions)); _serializer = workerOptions.Value.Serializer ?? throw new InvalidOperationException(nameof(workerOptions.Value.Serializer)); }
public GrpcFunctionDefinition(FunctionLoadRequest loadRequest, IMethodInfoLocator methodInfoLocator) { EntryPoint = loadRequest.Metadata.EntryPoint; Name = loadRequest.Metadata.Name; PathToAssembly = Path.GetFullPath(loadRequest.Metadata.ScriptFile); Id = loadRequest.FunctionId; var grpcBindingsGroup = loadRequest.Metadata.Bindings.GroupBy(kv => kv.Value.Direction); var grpcInputBindings = grpcBindingsGroup.Where(kv => kv.Key == BindingInfo.Types.Direction.In).FirstOrDefault(); var grpcOutputBindings = grpcBindingsGroup.Where(kv => kv.Key != BindingInfo.Types.Direction.In).FirstOrDefault(); var infoToMetadataLambda = new Func <KeyValuePair <string, BindingInfo>, BindingMetadata>(kv => new GrpcBindingMetadata(kv.Value)); InputBindings = grpcInputBindings?.ToImmutableDictionary(kv => kv.Key, infoToMetadataLambda) ?? ImmutableDictionary <string, BindingMetadata> .Empty; OutputBindings = grpcOutputBindings?.ToImmutableDictionary(kv => kv.Key, infoToMetadataLambda) ?? ImmutableDictionary <string, BindingMetadata> .Empty; Parameters = methodInfoLocator.GetMethod(PathToAssembly, EntryPoint) .GetParameters() .Where(p => p.Name != null) .Select(p => new FunctionParameter(p.Name !, p.ParameterType)) .ToImmutableArray(); }
internal static FunctionLoadResponse FunctionLoadRequestHandler(FunctionLoadRequest request, IFunctionsApplication application, IMethodInfoLocator methodInfoLocator) { var response = new FunctionLoadResponse { FunctionId = request.FunctionId, Result = StatusResult.Success }; if (!request.Metadata.IsProxy) { try { FunctionDefinition definition = request.ToFunctionDefinition(methodInfoLocator); application.LoadFunction(definition); } catch (Exception ex) { response.Result = new StatusResult { Status = StatusResult.Types.Status.Failure, Exception = ex.ToRpcException() }; } } return(response); }
public DefaultFunctionInvokerFactory(IMethodInvokerFactory methodInvokerFactory, IFunctionActivator functionActivator, IMethodInfoLocator methodLocator) { _methodInvokerFactory = methodInvokerFactory ?? throw new ArgumentNullException(nameof(methodInvokerFactory)); _functionActivator = functionActivator ?? throw new ArgumentNullException(nameof(functionActivator)); _methodLocator = methodLocator ?? throw new ArgumentNullException(nameof(methodLocator)); }