Inheritance: OctoTorrent.Client.Mode
        /// <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);
                }
            });
        }
        void Initialise(string savePath, string baseDirectory, IList <RawTrackerTier> announces)
        {
            _bitfield            = new BitField(HasMetadata ? _torrent.Pieces.Count : 1);
            this._savePath       = Path.Combine(savePath, baseDirectory);
            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 += (o, e) => PieceManager.UnhashedPieces[e.PieceIndex] = false;

            if (HasMetadata)
            {
                foreach (var file in _torrent.Files)
                {
                    file.FullPath = Path.Combine(SavePath, file.Path);
                }
            }
        }