示例#1
0
        public async Task <bool> ConnectAsync(PeerId peerIdentifier)
        {
            _recipientPeerId = peerIdentifier;

            var peerRpcConfig = new RpcClientSettings
            {
                HostAddress = _recipientPeerId.IpAddress,
                Port        = (int)_recipientPeerId.Port,
                PublicKey   = _recipientPeerId.PublicKey.KeyToString()
            };

            _logger.Information($"Connecting to {peerRpcConfig.HostAddress}:{peerRpcConfig.Port}");

            try
            {
                _rpcClient =
                    await _rpcClientFactory.GetClient(_certificate, peerRpcConfig).ConfigureAwait(false);

                return(_rpcClient.Channel.Open);
            }
            catch (ConnectException connectionException)
            {
                _logger.Error(connectionException, "Could not connect to node");
            }
            catch (Exception exception)
            {
                _logger.Error(exception, "Error attempting to connect to node");
            }

            return(false);
        }
示例#2
0
        public async Task GetClient_Should_Return_RpcClient()
        {
            var nodeRpcConfig = Substitute.For <IRpcClientConfig>();

            nodeRpcConfig.HostAddress = IPAddress.Any;
            nodeRpcConfig.NodeId      = "0";
            nodeRpcConfig.PfxFileName = "pfx";
            nodeRpcConfig.Port        = 9000;
            var rpcClient = await _rpcClientFactory.GetClient(null, nodeRpcConfig);

            rpcClient.Should().BeAssignableTo <IRpcClient>();
        }
        /// <summary>
        /// 开启远程调用
        /// </summary>
        /// <param name="arrMethodArgs">方法参数</param>
        /// <param name="methodInfo">方法名字</param>
        /// <returns></returns>
        private object DoMethodCall(object[] arrMethodArgs, Type[] argmentTypes, MethodInfo methodInfo)
        {
            var methodCallInfo = new MethodCallInfo()
            {
                ClassName     = _proxyType.FullName,
                MethodName    = methodInfo.Name,
                Parameters    = arrMethodArgs,
                TypeHandle    = _proxyType.TypeHandle,
                ArgumentTypes = argmentTypes
            };
            var client         = RpcClientFactory.GetClient(_proxyType.Name);
            var requestMessage = new RequestMessage()
            {
                MethodCallInfo = methodCallInfo
            };
            var responseMessage = client.Send(requestMessage);

            return(responseMessage);
        }
示例#4
0
        public async Task SubscribeToResponse_Should_Not_Return_Invalid_Response()
        {
            var nodeRpcClientFactory = new RpcClientFactory(_channelFactory, _clientEventLoopGroupFactory,
                                                            new List <IRpcResponseObserver> {
                new GetVersionResponseObserver(_logger)
            });
            var nodeRpcClient = await nodeRpcClientFactory.GetClient(null, _rpcClientConfig);

            var receivedResponse      = false;
            var targetVersionResponse = new VersionResponse {
                Version = "1.2.3.4"
            };
            var protocolMessage =
                targetVersionResponse.ToProtocolMessage(_peerIdentifier, CorrelationId.GenerateCorrelationId());
            var observerDto = new ObserverDto(_channelHandlerContext, protocolMessage);

            _mockSocketReplySubject.OnNext(observerDto);
            nodeRpcClient.SubscribeToResponse <GetDeltaResponse>(response => receivedResponse = true);
            _testScheduler.Start();

            receivedResponse.Should().BeFalse();
        }
示例#5
0
        public async Task SubscribeToResponse_Without_Response_Handler_Should_Throw_Exception()
        {
            var nodeRpcClientFactory = new RpcClientFactory(_channelFactory, _clientEventLoopGroupFactory,
                                                            new List <IRpcResponseObserver>());
            var nodeRpcClient = await nodeRpcClientFactory.GetClient(null, _rpcClientConfig);

            var targetVersionResponse = new VersionResponse {
                Version = "1.2.3.4"
            };
            var protocolMessage =
                targetVersionResponse.ToProtocolMessage(_peerIdentifier, CorrelationId.GenerateCorrelationId());
            var observerDto = new ObserverDto(_channelHandlerContext, protocolMessage);

            var exception = Record.Exception(() =>
            {
                _mockSocketReplySubject.OnNext(observerDto);
                nodeRpcClient.SubscribeToResponse <VersionResponse>(response => { });
                _testScheduler.Start();
            });

            exception.Should().BeOfType <ResponseHandlerDoesNotExistException>();
        }