private void CheckHeartbeat() { foreach (var peer in _peerRepository.GetAll()) { Task.Run(async() => { var result = await _peerChallenger.ChallengePeerAsync(peer.PeerId).ConfigureAwait(false); var counterValue = _nonResponsivePeerMap.GetOrAdd(peer.DocumentId, 0); _logger.Verbose( $"Heartbeat result: {result.ToString()} Peer: {peer.PeerId} Non-Responsive Counter: {counterValue}"); if (!result) { _nonResponsivePeerMap[peer.DocumentId] += 1; counterValue += 1; if (counterValue >= _maxNonResponsiveCounter) { _peerRepository.Delete(peer.DocumentId); _nonResponsivePeerMap.TryRemove(peer.DocumentId, out _); _logger.Verbose( $"Peer reached maximum non-responsive count: {peer.PeerId}. Evicted from repository"); } } else { _nonResponsivePeerMap[peer.DocumentId] = 0; } }).ConfigureAwait(false); } }
private async Task <bool> RunPeerChallengeTask(string publicKey, IPAddress ip, int port) { Output.WriteLine(publicKey); Output.WriteLine(ip.ToString()); Output.WriteLine(port.ToString()); var recipient = publicKey.BuildPeerIdFromBase32Key(ip, port); return(await _peerChallenger.ChallengePeerAsync(recipient)); }