void TaskComplete(object sender, TaskCompleteEventArgs e) { e.Task.Completed -= TaskComplete; // I should raise the event with some eventargs saying which node was dead SendQueryEventArgs args = (SendQueryEventArgs)e; if (args.TimedOut) { // If the node didn't respond and it's no longer in our bucket, // we need to send a ping to the oldest node in the bucket // Otherwise if we have a non-responder and it's still there, replace it! int index = bucket.Nodes.IndexOf(((SendQueryTask)e.Task).Target); if (index < 0) { SendPingToOldest(); } else { bucket.Nodes[index] = newNode; RaiseComplete(new TaskCompleteEventArgs(this)); } } else { SendPingToOldest(); } }
private void TaskComplete(object sender, TaskCompleteEventArgs eventArgs) { _task.Completed -= TaskComplete; var sendQueryEventArgs = (SendQueryEventArgs)eventArgs; if (sendQueryEventArgs.TimedOut) { _bucket.SortBySeen(); var index = _bucket.Nodes.IndexOf(_node); if (index == -1 || (++index < _bucket.Nodes.Count)) { QueryNode(_bucket.Nodes[0]); } else { RaiseComplete(new TaskCompleteEventArgs(this)); } } else { RaiseComplete(new TaskCompleteEventArgs(this)); } }
private static void FindNodeComplete(object sender, TaskCompleteEventArgs e) { SendQueryEventArgs args = (SendQueryEventArgs)e; lock (engine) activities--; if (!args.TimedOut) { logAdd("Visited"); if (find_queue.Count < 10000) { FindNodeResponse response = (FindNodeResponse)args.Response; var ns = Node.FromCompactNode(response.Nodes); foreach (var n in ns) { //Console.WriteLine("Find {1} Node: {0}", n.Id, nodes.Count); lock (find_queue) find_queue.Enqueue(n); } } } else { nodes.RemoveWhere(n => ((FindNode)args.Query).Target == n.Id); } }
private void SentAnnounce(object o, TaskCompleteEventArgs e) { e.Task.Completed -= SentAnnounce; activeAnnounces--; if (activeAnnounces == 0) RaiseComplete(new TaskCompleteEventArgs(this)); }
/// <summary> /// Call when Random Numbers Task is completed. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnTaskComplete(object sender, TaskCompleteEventArgs <int, int> args) { ResultText.Text = $"Result = {args.Result}"; ResultText.Tint = Color.Green; TestButton.Tint = Color.White; TestButton.Text.Text = "Start Task"; ProgressionText.Text = "Completed."; }
protected override void RaiseComplete(TaskCompleteEventArgs e) { if (!Active) return; Active = false; base.RaiseComplete(e); }
private void GetPeersCompleted(object o, TaskCompleteEventArgs e) { try { activeQueries--; e.Task.Completed -= GetPeersCompleted; SendQueryEventArgs args = (SendQueryEventArgs)e; // We want to keep a list of the top (K) closest nodes which have responded Node target = ((SendQueryTask)args.Task).Target; int index = queriedNodes.Values.IndexOf(target); if (index >= Bucket.MaxCapacity || args.TimedOut) { queriedNodes.RemoveAt(index); } if (args.TimedOut) { return; } GetPeersResponse response = (GetPeersResponse)args.Response; // Ensure that the local Node object has the token. There may/may not be // an additional copy in the routing table depending on whether or not // it was able to fit into the table. target.Token = response.Token; if (response.Values != null) { // We have actual peers! engine.RaisePeersFound(infoHash, MonoTorrent.Client.Peer.Decode(response.Values)); } else if (response.Nodes != null) { if (!Active) { return; } // We got a list of nodes which are closer IEnumerable <Node> newNodes = Node.FromCompactNode(response.Nodes); foreach (Node n in Node.CloserNodes(infoHash, closestNodes, newNodes, Bucket.MaxCapacity)) { SendGetPeers(n); } } } finally { if (activeQueries == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } } }
private static void DownloadCompleted(object sender, TaskCompleteEventArgs <byte[]> e) { Console.WriteLine("Finished: {0}", e.TaskName); foreach (var dataItem in e.Result) { Console.Write(" " + dataItem); } Console.WriteLine(""); Console.WriteLine("--------"); }
private void SentAnnounce(object o, TaskCompleteEventArgs e) { e.Task.Completed -= SentAnnounce; _activeAnnounces--; if (_activeAnnounces == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } }
protected override void RaiseComplete(TaskCompleteEventArgs e) { if (!Active) { return; } Active = false; base.RaiseComplete(e); }
private void FindNodeComplete(object sender, TaskCompleteEventArgs e) { e.Task.Completed -= FindNodeComplete; activeRequests--; var args = (SendQueryEventArgs) e; if (!args.TimedOut) { var response = (FindNodeResponse) args.Response; SendFindNode(Node.FromCompactNode(response.Nodes)); } if (activeRequests == 0) RaiseComplete(new TaskCompleteEventArgs(this)); }
private void GetPeersCompleted(object o, TaskCompleteEventArgs e) { try { activeQueries--; e.Task.Completed -= GetPeersCompleted; SendQueryEventArgs args = (SendQueryEventArgs)e; // We want to keep a list of the top (K) closest nodes which have responded Node target = ((SendQueryTask)args.Task).Target; int index = queriedNodes.Values.IndexOf(target); if (index >= Bucket.MaxCapacity || args.TimedOut) queriedNodes.RemoveAt(index); if (args.TimedOut) return; GetPeersResponse response = (GetPeersResponse)args.Response; // Ensure that the local Node object has the token. There may/may not be // an additional copy in the routing table depending on whether or not // it was able to fit into the table. target.Token = response.Token; if (response.Values != null) { // We have actual peers! engine.RaisePeersFound(infoHash, MonoTorrent.Client.Peer.Decode(response.Values)); } else if (response.Nodes != null) { if (!Active) return; // We got a list of nodes which are closer IEnumerable<Node> newNodes = Node.FromCompactNode(response.Nodes); foreach (Node n in Node.CloserNodes(infoHash, closestNodes, newNodes, Bucket.MaxCapacity)) SendGetPeers(n); } } finally { if (activeQueries == 0) RaiseComplete(new TaskCompleteEventArgs(this)); } }
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)); }
private void FindNodeComplete(object sender, TaskCompleteEventArgs e) { e.Task.Completed -= FindNodeComplete; activeRequests--; SendQueryEventArgs args = (SendQueryEventArgs)e; if (!args.TimedOut) { FindNodeResponse response = (FindNodeResponse)args.Response; SendFindNode(Node.FromCompactNode(response.Nodes)); } if (activeRequests == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } }
protected override void RaiseComplete(TaskCompleteEventArgs e) { if (!Active) return; // If we were given a list of initial nodes and they were all dead, // initialise again except use the utorrent router. if (initialNodes.Count > 0 && engine.RoutingTable.CountNodes() < 10) { new InitialiseTask(engine).Execute(); } else { engine.RaiseStateChanged(DhtState.Ready); } Active = false; base.RaiseComplete(e); }
private void TaskComplete(object sender, TaskCompleteEventArgs eventArgs) { _task.Completed -= TaskComplete; var sendQueryEventArgs = (SendQueryEventArgs) eventArgs; if (sendQueryEventArgs.TimedOut) { _bucket.SortBySeen(); var index = _bucket.Nodes.IndexOf(_node); if (index == -1 || (++index < _bucket.Nodes.Count)) QueryNode(_bucket.Nodes[0]); else RaiseComplete(new TaskCompleteEventArgs(this)); } else { RaiseComplete(new TaskCompleteEventArgs(this)); } }
private void GotPeers(object o, TaskCompleteEventArgs e) { e.Task.Completed -= GotPeers; var getpeers = (GetPeersTask)e.Task; foreach (var task in from n in getpeers.ClosestActiveNodes.Values where n.Token != null let query = new AnnouncePeer(_engine.LocalId, _infoHash, _port, n.Token) select new SendQueryTask(_engine, query, n)) { task.Completed += SentAnnounce; task.Execute(); _activeAnnounces++; } if (_activeAnnounces == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } }
protected override void RaiseComplete(TaskCompleteEventArgs e) { if (!Active) { return; } // If we were given a list of initial nodes and they were all dead, // initialise again except use the utorrent router. if (initialNodes.Count > 0 && engine.RoutingTable.CountNodes() < 10) { new InitialiseTask(engine).Execute(); } else { engine.RaiseStateChanged(DhtState.Ready); } Active = false; base.RaiseComplete(e); }
private void TaskComplete(object o, TaskCompleteEventArgs e) { task.Completed -= TaskComplete; SendQueryEventArgs args = (SendQueryEventArgs)e; if (args.TimedOut) { bucket.SortBySeen(); int index = bucket.Nodes.IndexOf(node); if (index == -1 || (++index < bucket.Nodes.Count)) { QueryNode(bucket.Nodes[0]); } else { RaiseComplete(new TaskCompleteEventArgs(this)); } } else { RaiseComplete(new TaskCompleteEventArgs(this)); } }
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)); } }
private void TaskComplete(object o, TaskCompleteEventArgs e) { _task.Completed -= TaskComplete; SendQueryEventArgs args = (SendQueryEventArgs)e; if (args.TimedOut) { _bucket.SortBySeen(); int index = _bucket.Nodes.IndexOf(_node); if ((index == -1) || (++index < _bucket.Nodes.Count)) { QueryNode(_bucket.Nodes[0]); } else { RaiseComplete(new TaskCompleteEventArgs(this)); } } else { RaiseComplete(new TaskCompleteEventArgs(this)); } }
protected override void RaiseComplete(TaskCompleteEventArgs e) { _engine.MessageLoop.QuerySent -= MessageSent; e.Task = this; base.RaiseComplete(e); }
protected override void RaiseComplete(TaskCompleteEventArgs e) { Unhook(); e.Task = this; base.RaiseComplete(e); }
protected virtual void RaiseComplete(TaskCompleteEventArgs e) { Completed?.Invoke(this, e); }
protected virtual void RaiseComplete(TaskCompleteEventArgs e) { EventHandler<TaskCompleteEventArgs> h = Completed; if (h != null) h(this, e); }
private void GetPeersCompleted(object o, TaskCompleteEventArgs e) { try { _activeQueries--; e.Task.Completed -= GetPeersCompleted; var args = (SendQueryEventArgs)e; // We want to keep a list of the top (K) closest nodes which have responded var target = ((SendQueryTask)args.Task).Target; //var index = ClosestActiveNodes.Values.IndexOf(target); var key = target.Id.Xor(_infoHash); int index = 0; foreach (var obj3 in this.ClosestActiveNodes.Keys) { if (!(obj3 == key)) { ++index; } else { break; } } if (index >= Bucket.MaxCapacity || args.TimedOut) { ClosestActiveNodes.RemoveAt(index); } if (args.TimedOut) { return; } var response = (GetPeersResponse)args.Response; // Ensure that the local Node object has the token. There may/may not be // an additional copy in the routing table depending on whether or not // it was able to fit into the table. target.Token = response.Token; if (response.Values != null) { // We have actual peers! Debug.WriteLine("Found peers"); _engine.RaisePeersFound(_infoHash, Peer.Decode(response.Values)); } else if (response.Nodes != null) { if (!Active) { return; } // We got a list of nodes which are closer var newNodes = Node.FromCompactNode(response.Nodes); foreach (var n in Node.CloserNodes(_infoHash, _closestNodes, newNodes, Bucket.MaxCapacity)) { SendGetPeers(n); } } } finally { if (_activeQueries == 0) { RaiseComplete(new TaskCompleteEventArgs(this)); } } }