BitSharp.Network.Workers.HeadersRequestWorker.WorkAction C# (CSharp) Method

WorkAction() protected method

protected WorkAction ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        protected override Task WorkAction()
        {
            var now = DateTimeOffset.Now;
            var requestTasks = new List<Task>();

            var peerCount = this.localClient.ConnectedPeers.Count;
            var targetChainLocal = this.coreDaemon.TargetChain;

            if (peerCount == 0 || targetChainLocal == null)
                return Task.CompletedTask;

            var blockLocatorHashes = CalculateBlockLocatorHashes(targetChainLocal.Blocks);

            // remove any stale requests from the peer's list of requests
            this.headersRequestsByPeer.RemoveWhere(x => !x.Key.IsConnected || (now - x.Value) > STALE_REQUEST_TIME);

            // loop through each connected peer
            var requestCount = 0;
            var connectedPeers = this.localClient.ConnectedPeers.SafeToList();
            connectedPeers.Shuffle();
            foreach (var peer in connectedPeers)
            {
                // determine if a new request can be made
                if (this.headersRequestsByPeer.TryAdd(peer, now))
                {
                    // send out the request for headers
                    requestTasks.Add(peer.Sender.SendGetHeaders(blockLocatorHashes, hashStop: UInt256.Zero));

                    // only send out a few header requests at a time
                    requestCount++;
                    if (requestCount >= 2)
                        break;
                }
            }

            return Task.CompletedTask;
        }