Beispiel #1
0
        public ServerInvokerTest()
        {
            var services = new ServiceCollection();

            services.ReigsterRpcServices();
            services.AddSingleton <ServerInvoker>();
            rpcMetadata = services.GetRpcMetadata();
            var provider = services.BuildServiceProvider();

            sut = provider.GetRequiredService <ServerInvoker>();
        }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 public RpcClientInvokerFactory(IRpcMetadata rpcMetadata, IRpcClientFactory clientFactory, IContentDecoder decoder)
 {
     invokers           = CreateRpcClientInvokers(rpcMetadata.Clients);
     this.clientFactory = clientFactory;
     this.decoder       = decoder;
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public RpcClientInvokerFactory(IRpcMetadata rpcMetadata, IRpcClientFactory clientFactory)
 {
     invokers           = CreateRpcClientInvokers(rpcMetadata);
     this.clientFactory = clientFactory;
 }
Beispiel #6
0
 public ServerInvoker(IRpcMetadata rpcMetadata, IServiceProvider provider, IContentDecoder decoder)
 {
     invokers      = CreateInvokersMap(rpcMetadata.RpcServices);
     this.provider = provider;
     this.decoder  = decoder;
 }
Beispiel #7
0
 public TestDecoder(IRpcMetadata rpcMetadata)
 {
     this.rpcMetadata = rpcMetadata;
 }