Esempio n. 1
0
        /// <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);
                }
            });
        }
Esempio n. 2
0
        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;
                }
            }
        }