コード例 #1
0
        public void PeersReadWriteTest()
        {
            var persistedPeers = _peerStorage.GetPersistedPeers();

            Assert.AreEqual(0, persistedPeers.Length);

            var nodes = new[]
            {
                _nodeFactory.CreateNode("192.1.1.1", 3441),
                _nodeFactory.CreateNode("192.1.1.2", 3442),
                _nodeFactory.CreateNode("192.1.1.3", 3443),
                _nodeFactory.CreateNode("192.1.1.4", 3444),
                _nodeFactory.CreateNode("192.1.1.5", 3445),
            };

            nodes[0].Description = "Test desc";
            nodes[4].Description = "Test desc 2";

            var peers = nodes.Select(x => new Peer(x, new NodeStats(_configurationProvider))).ToArray();

            _peerStorage.StartBatch();
            _peerStorage.UpdatePeers(peers);
            _peerStorage.Commit();

            persistedPeers = _peerStorage.GetPersistedPeers();
            foreach (var peer in peers)
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNotNull(persistedNode);
                Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port);
                Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host);
                Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description);
                Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation);
            }

            _peerStorage.StartBatch();
            _peerStorage.RemovePeers(peers.Take(1).ToArray());
            _peerStorage.Commit();

            persistedPeers = _peerStorage.GetPersistedPeers();
            foreach (var peer in peers.Take(1))
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNull(persistedNode.Node);
            }

            foreach (var peer in peers.Skip(1))
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNotNull(persistedNode);
                Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port);
                Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host);
                Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description);
                Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation);
            }
        }
コード例 #2
0
        //TODO Timer to periodically check active peers and move new to active based on max size and compatibility - stats and capabilities + update peers in synchronization manager
        //TODO Remove active and synch on disconnect
        //TODO Update Stats on disconnect, other events
        //TODO update runner to run discovery

        public PeerManager(IRlpxPeer localPeer,
                           IDiscoveryManager discoveryManager,
                           ISynchronizationManager synchronizationManager,
                           INodeStatsProvider nodeStatsProvider,
                           IPeerStorage peerStorage,
                           INodeFactory nodeFactory,
                           IConfigProvider configurationProvider,
                           IPerfService perfService,
                           ILogManager logManager)
        {
            _logger                 = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _localPeer              = localPeer;
            _configurationProvider  = configurationProvider.GetConfig <NetworkConfig>();
            _synchronizationManager = synchronizationManager;
            _nodeStatsProvider      = nodeStatsProvider;
            _discoveryManager       = discoveryManager;
            _perfService            = perfService;
            _nodeFactory            = nodeFactory;
            _isDiscoveryEnabled     = _discoveryManager != null;

            if (_isDiscoveryEnabled)
            {
                discoveryManager.NodeDiscovered += async(s, e) => await OnNodeDiscovered(s, e);
            }
            localPeer.ConnectionInitialized   += OnRemoteConnectionInitialized;
            synchronizationManager.SyncFailed += async(s, e) => await OnSyncFailed(s, e);

            _peerStorage = peerStorage;
            _peerStorage.StartBatch();
        }
コード例 #3
0
ファイル: PeerManager.cs プロジェクト: StateProof/nethermind
        private void RunPeerCommit()
        {
            if (!_peerStorage.AnyPendingChange())
            {
                return;
            }

            _peerStorage.Commit();
            _peerStorage.StartBatch();
        }
コード例 #4
0
ファイル: PeerManager.cs プロジェクト: StateProof/nethermind
        //TODO Timer to periodically check active peers and move new to active based on max size and compatibility - stats and capabilities + update peers in synchronization manager
        //TODO Remove active and synch on disconnect
        //TODO Update Stats on disconnect, other events
        //TODO Move Discover to Network
        //TODO update runner to run discovery

        public PeerManager(IRlpxPeer localPeer, IDiscoveryManager discoveryManager, ILogger logger, IDiscoveryConfigurationProvider configurationProvider, ISynchronizationManager synchronizationManager, INodeStatsProvider nodeStatsProvider, IPeerStorage peerStorage, IPerfService perfService)
        {
            _localPeer              = localPeer;
            _logger                 = logger;
            _configurationProvider  = configurationProvider;
            _synchronizationManager = synchronizationManager;
            _nodeStatsProvider      = nodeStatsProvider;
            _discoveryManager       = discoveryManager;
            _perfService            = perfService;
            _isDiscoveryEnabled     = _discoveryManager != null;

            if (_isDiscoveryEnabled)
            {
                discoveryManager.NodeDiscovered += async(s, e) => await OnNodeDiscovered(s, e);
            }
            localPeer.ConnectionInitialized += OnRemoteConnectionInitialized;
            _peerStorage = peerStorage;
            _peerStorage.StartBatch();
        }