/// <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(); }
/// <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; } }
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)); } }