Ejemplo n.º 1
0
        public async Task <RemoteInvokeResponse> Invoke(RemoteInvokeRequest request)
        {
            try
            {
                var transport = RemoteInvokeTransport <RemoteInvokeRequest> .CreateRequest(request);

                var callbackTask = RegisterCallbackAsync(transport.Id);
                try
                {
                    var package = new Package
                    {
                        Type = PackageType.Transfer,
                        Data = serializer.Serialize(transport)
                    };

                    await networkClient.SendAsync(package);
                }
                catch (Exception ex)
                {
                    throw new EasyRpcException("执行远程方法失败", ex);
                }
                return(await callbackTask);
            }
            catch (Exception ex)
            {
                throw new EasyRpcException("执行远程方法失败", ex);
            }
        }
Ejemplo n.º 2
0
        public object InterceptAsync(MethodInfo method, object[] parameters)
        {
            var request = RemoteInvokeRequest.Create(method, parameters);

            var response = AsyncHelper.RunSync(() => remoteInvoker.Invoke(request));

            if (method.ReturnType == typeof(void))
            {
                return(null);
            }

            if (method.ReturnType == typeof(Task))
            {
                return(Task.CompletedTask);
            }

            if (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task <>))
            {
                var returnValueType = method.ReturnType.GetGenericArguments()[0];

                var resultValue = serializer.Deserialize(response.Data, returnValueType);

                return(Task.FromResult(resultValue));
            }
            else
            {
                return(serializer.Deserialize(response.Data, method.ReturnType));
            }
        }