Ejemplo n.º 1
0
        /// <summary>
        /// Initializes the torrent engine.
        /// </summary>
        public static void Initialize()
        {
            if (isInitialized)
            {
                return;
            }

            isInitialized = true;

            Log.LogInfo("[Engine] Starting up TorrentEngine.");

            if (engineThread != null)
            {
                engineThread.Join();
                engineThread = null;
            }

            isStopping = false;
            workQueueResetEvent.Set();

            DiskManager.Initialize();
            PeerListener.StartListening();
            LocalPeerListener.StartListening();
            LocalPeerDiscovery.Initialize();

            engineThread          = new Thread(EngineLoop);
            engineThread.Priority = ThreadPriority.Normal;
            engineThread.Name     = "TorrentEngineThread";
            engineThread.Start();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Uninitializes the torrent engine.
        /// </summary>
        public static void Uninitialize()
        {
            if (!isInitialized)
            {
                return;
            }

            Log.LogInfo("[Engine] Shutting down TorrentEngine.");

            isInitialized = false;
            isStopping    = true;
            workQueueResetEvent.Set();

            TorrentRegistry.StopAllActiveTorrents();
            PeerListener.StopListening();
            LocalPeerListener.StopListening();
            LocalPeerDiscovery.Uninitialize();
            DiskManager.Uninitialize();

            if (engineThread != null)
            {
                engineThread.Join();
                engineThread = null;
            }
        }
Ejemplo n.º 3
0
        public ClientEngine(EngineSettings settings, PeerListener listener, PieceWriter.PieceWriter writer)
        {
            Check.Settings(settings);
            Check.Listener(listener);
            Check.Writer(writer);

            Listener = listener;
            Settings = settings;

            ConnectionManager = new ConnectionManager(this);
            RegisterDht(new NullDhtEngine());
            DiskManager    = new DiskManager(this, writer);
            _listenManager = new ListenManager(this);
            MainLoop.QueueTimeout(TimeSpan.FromMilliseconds(TickLength), delegate
            {
                if (IsRunning && !Disposed)
                {
                    LogicTick();
                }
                return(!Disposed);
            });
            _torrents         = new List <TorrentManager>();
            _torrentsReadonly = new ReadOnlyCollection <TorrentManager>(_torrents);
            CreateRateLimiters();
            PeerId = GeneratePeerId();

            _localPeerListener     = new LocalPeerListener(this);
            _localPeerManager      = new LocalPeerManager();
            LocalPeerSearchEnabled = SupportsLocalPeerDiscovery;
            _listenManager.Register(listener);
            // This means we created the listener in the constructor
            if (listener.Endpoint.Port == 0)
            {
                listener.ChangeEndpoint(new IPEndPoint(IPAddress.Any, settings.ListenPort));
            }
        }