public void AddFailedPeer(Peer p)
 {
     var id = new TrackerConnectionID(this, true, TorrentEvent.None, new ManualResetEvent(false));
     var e = new AnnounceResponseEventArgs(this, id, false);
     e.Peers.Add(p);
     RaiseAnnounceComplete(e);
     Assert.True(id.WaitHandle.WaitOne(1000, true), "#2 Tracker never raised the AnnounceComplete event");
 }
 public void AddFailedPeer(Peer p)
 {
     var id = new TrackerConnectionID(this, true, TorrentEvent.None, null);
     var e = new AnnounceResponseEventArgs(this, null, true);
     e.Peers.Add(p);
     e.Successful = false;
     RaiseAnnounceComplete(e);
 }
예제 #3
0
        protected virtual void RaiseAnnounceComplete(AnnounceResponseEventArgs e)
        {
            EventHandler <AnnounceResponseEventArgs> h = AnnounceComplete;

            if (h != null)
            {
                h(this, e);
            }
        }
예제 #4
0
 void TrackerAnnounceComplete(object sender, AnnounceResponseEventArgs e)
 {
     if(e.Peers.Count > 0)
     {
         Log("Announce Success: {0}", e.Tracker.Uri);
         InvokePeersFound(this,new PeersFoundEventArgs(Hash,e.Peers));
         return;
     }
     if(e.Successful ==false)
     {
         Log("Announce Failed: {0}" , e.Tracker.Uri);
     }
 }
예제 #5
0
 public static void HandleAnnounceComplete(object sender, AnnounceResponseEventArgs e)
 {
     logger.DebugFormat("AnnounceComplete. Tracker={0}, Successful={1}",
       e.Tracker.Uri,
       e.Successful);
     if (e.Successful) {
         logger.DebugFormat("Tracker: Peers={2}, Complete={0}, Incomplete={1}",
             e.Tracker.Complete,
             e.Tracker.Incomplete,
             e.Peers.Count);
         e.Peers.ForEach(x => logger.DebugFormat("Peer: {0}", x.ToString()));
     } else {
         logger.DebugFormat("Announce failed: {0}", e.Tracker.FailureMessage);
     }
 }
예제 #6
0
        private void OnAnnounceComplete(object sender, AnnounceResponseEventArgs e)
        {
            try
            {
                this.updateSucceeded = e.Successful;
                if (manager.Engine == null)
                {
                    e.Id.WaitHandle.Set();
                    return;
                }

                if (e.Successful)
                {
                    manager.Peers.BusyPeers.Clear();
                    int count = manager.AddPeersCore(e.Peers);
                    manager.RaisePeersFound(new TrackerPeersAdded(manager, count, e.Peers.Count, e.Tracker));

                    TrackerTier tier = trackerTiers.Find(delegate(TrackerTier t) { return(t.Trackers.Contains(e.Tracker)); });
                    if (tier != null)
                    {
                        Toolbox.Switch <Tracker>(tier.Trackers, 0, tier.IndexOf(e.Tracker));
                        Toolbox.Switch <TrackerTier>(trackerTiers, 0, trackerTiers.IndexOf(tier));
                    }
                    e.Id.WaitHandle.Set();
                }
                else
                {
                    TrackerTier tier;
                    Tracker     tracker;

                    if (!e.Id.TrySubsequent || !GetNextTracker(e.Tracker, out tier, out tracker))
                    {
                        e.Id.WaitHandle.Set();
                    }
                    else
                    {
                        Announce(tracker, e.Id.TorrentEvent, true, e.Id.WaitHandle);
                    }
                }
            }
            catch (ObjectDisposedException) { }
        }
예제 #7
0
 protected virtual void RaiseAnnounceComplete(AnnounceResponseEventArgs e)
 {
     EventHandler<AnnounceResponseEventArgs> h = AnnounceComplete;
     if (h != null)
         h(this, e);
 }
예제 #8
0
 protected virtual void RaiseAnnounceComplete(AnnounceResponseEventArgs e)
 {
     AnnounceComplete?.Invoke(this, e);
 }
예제 #9
0
 public override void Announce(AnnounceParameters parameters, object state)
 {
     AnnounceResponseEventArgs e = new AnnounceResponseEventArgs(this, state, true);
     RaiseAnnounceComplete(e);
 }
예제 #10
0
 void RaiseAnnounceComplete(object sender, AnnounceResponseEventArgs args)
 => AnnounceComplete?.InvokeAsync(this, args);