public ServerInvokerTest() { var services = new ServiceCollection(); services.ReigsterRpcServices(); services.AddSingleton <ServerInvoker>(); rpcMetadata = services.GetRpcMetadata(); var provider = services.BuildServiceProvider(); sut = provider.GetRequiredService <ServerInvoker>(); }
public RequestTarsConvert(ITarsConvert <short> shortConvert, ITarsConvert <int> intConvert, ITarsConvert <byte> byteConvert, ITarsConvert <string> stringConvert, IDictionaryInterfaceTarsConvert <string, string> dictConvert, ITarsConvert <IByteBuffer> bufferConvert, ITarsConvertRoot convertRoot, IRpcMetadata rpcMetadata, ITarsHeadHandler headHandler) { this.shortConvert = shortConvert; this.intConvert = intConvert; this.byteConvert = byteConvert; this.stringConvert = stringConvert; this.dictConvert = dictConvert; this.bufferConvert = bufferConvert; this.convertRoot = convertRoot; this.rpcMetadata = rpcMetadata; this.headHandler = headHandler; }
public RpcClientInvokerFactory(IRpcMetadata rpcMetadata, IRpcClientFactory clientFactory, IContentDecoder decoder) { invokers = CreateRpcClientInvokers(rpcMetadata.Clients); this.clientFactory = clientFactory; this.decoder = decoder; }
public IDictionary <MethodInfo, Func <AspectContext, AspectDelegate, Task> > CreateRpcClientInvokers(IRpcMetadata rpcMetadata) { var dictionary = new Dictionary <MethodInfo, Func <AspectContext, AspectDelegate, Task> >(); foreach (var item in rpcMetadata.Clients) { var attribute = item.GetCustomAttribute <RpcAttribute>(); foreach (var method in item.GetMethods(BindingFlags.Public | BindingFlags.Instance)) { var(methodInfo, isOneway, outParameters, codec, version, serviceType) = rpcMetadata.FindRpcMethod(attribute.ServantName, method.Name); var parameterTypes = methodInfo.GetParameters(); dictionary.Add(method, async(context, next) => { var req = new Request() { ServantName = attribute.ServantName, FuncName = method.Name, Codec = codec, IsOneway = isOneway, ParameterTypes = parameterTypes, ReturnParameterTypes = outParameters, Parameters = context.Parameters, Version = version }; req.Context.SetContext(context.AdditionalData); var resp = await clientFactory.SendAsync(req); context.AdditionalData.SetContext(resp.Context); if (isOneway) { await context.Complete(); } else { context.ReturnValue = resp.ReturnValue; resp.ReturnValueType = method.ReturnParameter; resp.ReturnParameterTypes = outParameters; object[] returnParameters = resp.ReturnParameters; if (returnParameters != null && returnParameters.Length > 0) { var index = 0; foreach (var outP in outParameters) { if (index >= returnParameters.Length) { break; } req.Parameters[outP.Position] = returnParameters[index++]; } } } }); } } return(dictionary); }
public RpcClientInvokerFactory(IRpcMetadata rpcMetadata, IRpcClientFactory clientFactory) { invokers = CreateRpcClientInvokers(rpcMetadata); this.clientFactory = clientFactory; }
public ServerInvoker(IRpcMetadata rpcMetadata, IServiceProvider provider, IContentDecoder decoder) { invokers = CreateInvokersMap(rpcMetadata.RpcServices); this.provider = provider; this.decoder = decoder; }
public TestDecoder(IRpcMetadata rpcMetadata) { this.rpcMetadata = rpcMetadata; }