public void create_should_return_protocol_handler()
        {
            var protocolHandler = Substitute.For <IProtocolHandler>();
            var session         = Substitute.For <ISession>();

            _subprotocolFactory.Create(session).Returns(protocolHandler);
            var handler = _factory.Create(session);

            _subprotocolFactory.Received().Create(session);
            handler.Should().Be(protocolHandler);
        }
        public IProtocolHandler Create(ISession session)
        {
            IProtocolHandler handler = _subprotocolFactory.Create(session);

            handler.ProtocolInitialized += (sender, args) =>
            {
                var ndmEventArgs = (NdmProtocolInitializedEventArgs)args;
                _protocolValidator.DisconnectOnInvalid(Protocol.Ndm, session, ndmEventArgs);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"NDM version {handler.ProtocolVersion}: {session.RemoteNodeId}, host: {session.Node.Host}");
                }
                if (string.IsNullOrWhiteSpace(_ethRequestService.FaucetHost) ||
                    !session.Node.Host.Contains(_ethRequestService.FaucetHost))
                {
                    return;
                }

                INdmPeer?peer = handler as INdmPeer;
                if (peer != null)
                {
                    _ethRequestService.UpdateFaucet(peer);
                }
                else
                {
                    _logger.Warn($"NDM handler cannot serve as faucet since it is not implementing {nameof(INdmPeer)}");
                }
            };

            return(handler);
        }
        public void given_valid_session_ndm_subprotocol_should_be_created()
        {
            var newConsumerAddress = TestItem.AddressC;
            var session            = Substitute.For <ISession>();
            var eventArgs          = new AddressChangedEventArgs(_consumerAddress, newConsumerAddress);

            _accountService.AddressChanged += Raise.EventWith(_consumerService, eventArgs);
            var subprotocol = _factory.Create(session);

            subprotocol.Should().NotBeNull();
        }
Exemplo n.º 4
0
        public void Init()
        {
            _consumerService.AddressChanged += (_, e) =>
            {
                if (!(e.OldAddress is null) && e.OldAddress != Address.Zero)
                {
                    return;
                }

                AddCapability();
            };
            _protocolsManager.AddProtocol(Protocol.Ndm, session =>
            {
                var logger  = _logManager.GetClassLogger <ProtocolsManager>();
                var handler = _subprotocolFactory.Create(session);
                handler.ProtocolInitialized += (sender, args) =>
                {
                    var ndmEventArgs = (NdmProtocolInitializedEventArgs)args;

                    _protocolValidator.DisconnectOnInvalid(Protocol.Ndm, session, ndmEventArgs);
                    if (logger.IsTrace)
                    {
                        logger.Trace($"NDM version {handler.ProtocolVersion}: {session.RemoteNodeId}, host: {session.Node.Host}");
                    }
                    if (string.IsNullOrWhiteSpace(_ethRequestService.FaucetHost) ||
                        !session.Node.Host.Contains(_ethRequestService.FaucetHost))
                    {
                        return;
                    }

                    _ethRequestService.UpdateFaucet(handler as INdmPeer);
                };

                return(handler);
            });

            var consumerAddress = _consumerService.GetAddress();

            if ((consumerAddress is null || consumerAddress == Address.Zero) &&
                (_providerAddress is null || _providerAddress == Address.Zero))
            {
                return;
            }

            _protocolsManager.AddSupportedCapability(Capability);
            _protocolsManager.P2PProtocolInitialized += (sender, args) => { TryAddCapability(); };
        }
Exemplo n.º 5
0
        public IProtocolHandler Create(ISession session)
        {
            var handler = _subprotocolFactory.Create(session);

            handler.ProtocolInitialized += (sender, args) =>
            {
                var ndmEventArgs = (NdmProtocolInitializedEventArgs)args;
                _protocolValidator.DisconnectOnInvalid(Protocol.Ndm, session, ndmEventArgs);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"NDM version {handler.ProtocolVersion}: {session.RemoteNodeId}, host: {session.Node.Host}");
                }
                if (string.IsNullOrWhiteSpace(_ethRequestService.FaucetHost) ||
                    !session.Node.Host.Contains(_ethRequestService.FaucetHost))
                {
                    return;
                }

                _ethRequestService.UpdateFaucet(handler as INdmPeer);
            };

            return(handler);
        }