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);
            }
        }
Пример #2
0
        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));
        }