Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
 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();
     }
 }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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();
            }
        }
Ejemplo n.º 5
0
        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));
            }
        }