private void QueryNode(Node node) { _node = node; _message = new FindNode(_engine.LocalId, node.Id); _task = new SendQueryTask(_engine, _message, node); _task.Completed += TaskComplete; _task.Execute(); }
private void SendFindNode(IEnumerable <Node> newNodes) { foreach (Node node in Node.CloserNodes(_engine.LocalId, _nodes, newNodes, Config.MaxBucketCapacity)) { _activeRequests++; FindNode request = new FindNode(_engine.LocalId, _engine.LocalId); SendQueryTask task = new SendQueryTask(_engine, request, node); task.Completed += FindNodeComplete; task.Execute(); } }
private void SendGetPeers(Node n) { NodeId distance = n.Id.Xor(_infoHash); ClosestActiveNodes.Add(distance, n); _activeQueries++; GetPeers m = new GetPeers(_engine.LocalId, _infoHash); SendQueryTask task = new SendQueryTask(_engine, m, n); task.Completed += GetPeersCompleted; task.Execute(); }
private void SendPingToOldest() { _bucket.LastChanged = DateTime.UtcNow; _bucket.SortBySeen(); if (DateTime.UtcNow - _bucket.Nodes[0].LastSeen < TimeSpan.FromMinutes(3)) { RaiseComplete(new TaskCompleteEventArgs(this)); } else { Node oldest = _bucket.Nodes[0]; SendQueryTask task = new SendQueryTask(_engine, new Ping(_engine.LocalId), oldest); task.Completed += TaskComplete; task.Execute(); } }
private void GotPeers(object o, TaskCompleteEventArgs e) { e.Task.Completed -= GotPeers; GetPeersTask getpeers = (GetPeersTask)e.Task; foreach (Node n in getpeers.ClosestActiveNodes.Values) { if (n.Token == null) { continue; } AnnouncePeer query = new AnnouncePeer(_engine.LocalId, _infoHash, _port, n.Token); SendQueryTask task = new SendQueryTask(_engine, query, n); task.Completed += SentAnnounce; task.Execute(); _activeAnnounces++; } if (_activeAnnounces == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } }