Example #1
0
        public IDisposable RegisterPeerTableRepository(PeerTableRepository peerTableRepository)
        {
            var poll = new EventLoopMessageListener <object>(o =>
            {
                var message = o as IncomingMessage;
                if (message != null)
                {
                    if (message.Message.Payload is AddrPayload)
                    {
                        peerTableRepository.WritePeers(((AddrPayload)message.Message.Payload).Addresses
                                                       .Where(a => a.Endpoint.Address.IsRoutable(AllowLocalPeers))
                                                       .Select(a => new Peer(PeerOrigin.Addr, a)));
                    }
                }
                var peer = o as Peer;
                if (peer != null)
                {
                    if (peer.NetworkAddress.Endpoint.Address.IsRoutable(AllowLocalPeers))
                    {
                        peerTableRepository.WritePeer(peer);
                    }
                }
            });

            if (peerTableRepository != _PeerTable)
            {
                _InternalMessageProducer.PushMessages(peerTableRepository.GetPeers());
            }
            return(new CompositeDisposable(AllMessages.AddMessageListener(poll), _InternalMessageProducer.AddMessageListener(poll), OwnResource(poll)));
        }
Example #2
0
        public IDisposable RegisterPeerTableRepository(PeerTableRepository peerTableRepository)
        {
            var poll = new EventLoopMessageListener<object>(o =>
            {
                var message = o as IncomingMessage;
                if(message != null)
                {
                    if(message.Message.Payload is AddrPayload)
                    {
                        peerTableRepository.WritePeers(((AddrPayload)message.Message.Payload).Addresses
                                                        .Where(a => a.Endpoint.Address.IsRoutable(AllowLocalPeers))
                                                        .Select(a => new Peer(PeerOrigin.Addr, a)));
                    }
                }
                var peer = o as Peer;
                if(peer != null)
                {
                    if(peer.NetworkAddress.Endpoint.Address.IsRoutable(AllowLocalPeers))
                        peerTableRepository.WritePeer(peer);
                }
            });

            if(peerTableRepository != _PeerTable)
            {
                _InternalMessageProducer.PushMessages(peerTableRepository.GetPeers());
            }
            return new CompositeDisposable(AllMessages.AddMessageListener(poll), _InternalMessageProducer.AddMessageListener(poll), OwnResource(poll));
        }
Example #3
0
        private static void CanStorePeer(PeerTableRepository repository)
        {
            var peer = new Peer(PeerOrigin.Addr, new NetworkAddress()
            {
                Endpoint = new IPEndPoint(IPAddress.Parse("0.0.1.0").MapToIPv6(), 110),
                Time = DateTimeOffset.UtcNow - TimeSpan.FromMinutes(5)
            });
            repository.WritePeer(peer);
            var result = repository.GetPeers().ToArray();
            Assert.Equal(1, result.Length);
            Assert.Equal(PeerOrigin.Addr, result[0].Origin);
            Assert.Equal(IPAddress.Parse("0.0.1.0").MapToIPv6(), result[0].NetworkAddress.Endpoint.Address);
            Assert.Equal(110, result[0].NetworkAddress.Endpoint.Port);
            Assert.Equal(peer.NetworkAddress.Time, result[0].NetworkAddress.Time);

            peer.NetworkAddress.Time = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(5);
            repository.WritePeer(peer);
            result = repository.GetPeers().ToArray();
            Assert.Equal(1, result.Length);
            Assert.Equal(peer.NetworkAddress.Time, result[0].NetworkAddress.Time);

            var peer2 = new Peer(PeerOrigin.Addr, new NetworkAddress()
            {
                Endpoint = new IPEndPoint(IPAddress.Parse("0.0.2.0").MapToIPv6(), 110),
                Time = DateTimeOffset.UtcNow - TimeSpan.FromMinutes(5)
            });

            repository.WritePeers(new Peer[] { peer, peer2 });
            Assert.Equal(2, repository.GetPeers().ToArray().Length);

            peer.NetworkAddress.Time = Utils.UnixTimeToDateTime(0);
            repository.WritePeer(peer);
            result = repository.GetPeers().ToArray();
            Assert.Equal(1, result.Length);
            Assert.Equal(IPAddress.Parse("0.0.2.0").MapToIPv6(), result[0].NetworkAddress.Endpoint.Address);
        }