示例#1
0
        internal async Task StopAsync()
        {
            CheckDisposed();
            // If all the torrents are stopped, stop ticking
            IsRunning = allTorrents.Exists(m => m.State != TorrentState.Stopped);
            if (!IsRunning)
            {
                if (PeerListener.LocalEndPoint != null)
                {
                    await PortForwarder.UnregisterMappingAsync(new Mapping (Protocol.Tcp, PeerListener.LocalEndPoint.Port), CancellationToken.None);
                }

                if (DhtListener.LocalEndPoint != null)
                {
                    await PortForwarder.UnregisterMappingAsync(new Mapping (Protocol.Udp, DhtListener.LocalEndPoint.Port), CancellationToken.None);
                }

                PeerListener.Stop();
                LocalPeerDiscovery.Stop();

                if (Settings.AllowPortForwarding)
                {
                    await PortForwarder.StopAsync(CancellationToken.None);
                }

                await MaybeSaveDhtNodes();

                await DhtEngine.StopAsync();
            }
        }
示例#2
0
 internal async Task StopAsync()
 {
     CheckDisposed();
     // If all the torrents are stopped, stop ticking
     IsRunning = allTorrents.Exists(m => m.State != TorrentState.Stopped);
     if (!IsRunning)
     {
         Listener.Stop();
         LocalPeerDiscovery.Stop();
         await PortForwarder.UnregisterMappingAsync(new Mapping (Protocol.Tcp, Settings.ListenPort), CancellationToken.None);
     }
 }
示例#3
0
        public void Dispose()
        {
            if (Disposed)
            {
                return;
            }

            Disposed = true;
            MainLoop.QueueWait(() => {
                DhtEngine.Dispose();
                DiskManager.Dispose();
                listenManager.Dispose();
                LocalPeerDiscovery.Stop();
            });
        }
示例#4
0
        internal void RegisterLocalPeerDiscovery(ILocalPeerDiscovery localPeerDiscovery)
        {
            if (LocalPeerDiscovery != null)
            {
                LocalPeerDiscovery.PeerFound -= HandleLocalPeerFound;
                LocalPeerDiscovery.Stop();
            }

            LocalPeerDiscovery = localPeerDiscovery ?? new NullLocalPeerDiscovery();

            if (LocalPeerDiscovery != null)
            {
                LocalPeerDiscovery.PeerFound += HandleLocalPeerFound;
                LocalPeerDiscovery.Start();
            }
        }
        public void Dispose ()
        {
            if (Disposed)
                return;

            Disposed = true;
            MainLoop.QueueWait (() => {
                PeerListener.Stop ();
                listenManager.SetListener (new NullPeerListener ());

                DhtListener.Stop ();
                DhtEngine.Dispose ();

                DiskManager.Dispose ();
                LocalPeerDiscovery.Stop ();
            });
        }
示例#6
0
        void RegisterLocalPeerDiscovery(ILocalPeerDiscovery localPeerDiscovery)
        {
            if (LocalPeerDiscovery != null)
            {
                LocalPeerDiscovery.PeerFound -= HandleLocalPeerFound;
                LocalPeerDiscovery.Stop();
            }

            if (!SupportsLocalPeerDiscovery || localPeerDiscovery == null)
            {
                localPeerDiscovery = new NullLocalPeerDiscovery();
            }

            LocalPeerDiscovery = localPeerDiscovery;

            if (LocalPeerDiscovery != null)
            {
                LocalPeerDiscovery.PeerFound += HandleLocalPeerFound;
                if (IsRunning)
                {
                    LocalPeerDiscovery.Start();
                }
            }
        }