/// <summary> /// Stops the TorrentManager /// </summary> public void Stop() { if (State == TorrentState.Error) { Error = null; Mode = new StoppedMode(this); return; } if (Mode is StoppingMode) { return; } ClientEngine.MainLoop.QueueWait(delegate { if (State != TorrentState.Stopped) { #if !DISABLE_DHT Engine.DhtEngine.PeersFound -= DhtPeersFound; #endif Mode = new StoppingMode(this); } }); }
private void Initialise(StorageFolder folder, string baseDirectory, IEnumerable <RawTrackerTier> announces) { Bitfield = new BitField(HasMetadata ? Torrent.Pieces.Count : 1); SaveFolder = StorageHelper.EnsureFolderExistsAsync(baseDirectory, folder).Result; FinishedPieces = new Queue <int>(); Monitor = new ConnectionMonitor(); InactivePeerManager = new InactivePeerManager(this); Peers = new PeerManager(); PieceManager = new PieceManager(); TrackerManager = new TrackerManager(this, InfoHash, announces); Mode = new StoppedMode(this); CreateRateLimiters(); PieceHashed += delegate(object o, PieceHashedEventArgs e) { PieceManager.UnhashedPieces[e.PieceIndex] = false; }; if (HasMetadata) { foreach (var file in Torrent.Files) { file.TargetFolder = SaveFolder; } } }