private void UpdateReputationAndMaxPeersCount() { var storedNodes = _peerStorage.GetPersistedNodes(); foreach (var node in storedNodes) { _activePeers.TryGetValue(node.NodeId, out Peer peer); if (peer == null) { _candidatePeers.TryGetValue(node.NodeId, out peer); } if (peer == null) { continue; } long newRep = _stats.GetNewPersistedReputation(peer.Node); if (newRep != node.Reputation) { node.Reputation = newRep; _peerStorage.UpdateNode(node); } } //if we have more persisted nodes then the threshold, we run cleanup process if (storedNodes.Length > _networkConfig.PersistedPeerCountCleanupThreshold) { var activePeers = _activePeers.Values; CleanupPersistedPeers(activePeers, storedNodes); } }
private void UpdateReputationAndMaxPeersCount() { NetworkNode[] storedNodes = _peerStorage.GetPersistedNodes(); foreach (NetworkNode node in storedNodes) { if (node.Port < 0 || node.Port > ushort.MaxValue) { continue; } Peer peer = _peerPool.GetOrAdd(node, false); long newRep = _stats.GetNewPersistedReputation(peer.Node); if (newRep != node.Reputation) { node.Reputation = newRep; _peerStorage.UpdateNode(node); } } //if we have more persisted nodes then the threshold, we run cleanup process if (storedNodes.Length > _networkConfig.PersistedPeerCountCleanupThreshold) { ICollection <Peer> activePeers = _activePeers.Values; CleanupPersistedPeers(activePeers, storedNodes); } }
private void UpdateReputationAndMaxPeersCount() { var storedNodes = _peerStorage.GetPersistedNodes(); var activePeers = _activePeers.Values; var peers = activePeers.Concat(_candidatePeers.Values).GroupBy(x => x.Node.Id).Select(x => x.First()).ToDictionary(x => x.Node.Id); var nodesForUpdate = new List <NetworkNode>(); foreach (var node in storedNodes) { if (!peers.ContainsKey(node.NodeId)) { continue; } var peer = peers[node.NodeId]; long newRep = _stats.GetNewPersistedReputation(peer.Node); if (newRep != node.Reputation) { node.Reputation = newRep; nodesForUpdate.Add(node); } } if (nodesForUpdate.Any()) { //we need to update all stored notes to update reputation _peerStorage.UpdateNodes(nodesForUpdate.ToArray()); } //if we have more persisted nodes then the threshold, we run cleanup process if (storedNodes.Length > _networkConfig.PersistedPeerCountCleanupThreshold) { CleanupPersistedPeers(activePeers, storedNodes); } }