コード例 #1
0
        private async Task RemovePeerAsync(BoundPeer peer)
        {
            _logger.Debug($"Removing peer [{peer.Address.ToHex()}] from table.");
            await _routing.RemovePeerAsync(peer);

            foreach (KBucket bucket in _routing.NonFullBuckets)
            {
                foreach (BoundPeer replacement in bucket.ReplacementCache)
                {
                    // FIXME: appropriate cancellation token required.
                    await PingAsync(replacement, RequestTimeout, CancellationToken.None);
                }
            }
        }
コード例 #2
0
        // FIXME: If this method is called almost same time, problem occurs.
        private async Task RemovePeerAsync(BoundPeer peer, CancellationToken cancellationToken)
        {
            _logger.Debug($"Removing peer [{peer.Address.ToHex()}] from table.");
            await _routing.RemovePeerAsync(peer);

            var bucket     = _routing.BucketOf(peer);
            var cachePeers = new BoundPeer[bucket.ReplacementCache.Count];

            bucket.ReplacementCache.CopyTo(cachePeers);
            foreach (BoundPeer replacement in cachePeers)
            {
                try
                {
                    await PingAsync(replacement, _requestTimeout, cancellationToken);

                    break;
                }
                catch (TimeoutException)
                {
                    bucket.ReplacementCache.Remove(replacement);
                }
            }
        }
コード例 #3
0
 private async Task RemovePeerAsync(BoundPeer peer, CancellationToken cancellationToken)
 {
     _logger.Debug("Removing peer [{peer}] from table.", peer);
     await _routing.RemovePeerAsync(peer);
 }