void Initialise(string savePath, string baseDirectory, IList <RawTrackerTier> announces) { this.bitfield = new BitField(HasMetadata ? torrent.Pieces.Count : 1); this.savePath = Path.Combine(savePath, baseDirectory); this.finishedPieces = new Queue <int>(); this.monitor = new ConnectionMonitor(); this.inactivePeerManager = new InactivePeerManager(this); this.peers = new PeerManager(); this.pieceManager = new PieceManager(); this.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 (TorrentFile file in torrent.Files) { file.FullPath = Path.Combine(SavePath, file.Path); } } }
/// <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); } }); }