Пример #1
0
        internal async Task StartAsync()
        {
            CheckDisposed();
            if (!IsRunning)
            {
                IsRunning = true;

                Listener.Start();
                LocalPeerDiscovery.Start();
                await DhtEngine.StartAsync(await MaybeLoadDhtNodes());

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

                if (Listener is ISocketListener socketListener)
                {
                    await PortForwarder.RegisterMappingAsync(new Mapping (Protocol.Tcp, socketListener.EndPoint.Port));
                }
                else
                {
                    await PortForwarder.RegisterMappingAsync(new Mapping (Protocol.Tcp, Settings.ListenPort));
                }

                if (DhtListener.EndPoint != null)
                {
                    await PortForwarder.RegisterMappingAsync(new Mapping (Protocol.Udp, DhtListener.EndPoint.Port));
                }
            }
        }
Пример #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)
            {
                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();
            }
        }
Пример #3
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);
     }
 }
Пример #4
0
        public void Dispose()
        {
            if (Disposed)
            {
                return;
            }

            Disposed = true;
            MainLoop.QueueWait(() => {
                DhtEngine.Dispose();
                DiskManager.Dispose();
                listenManager.Dispose();
                LocalPeerDiscovery.Stop();
            });
        }
Пример #5
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();
            }
        }
Пример #6
0
 internal async Task StartAsync()
 {
     CheckDisposed();
     if (!IsRunning)
     {
         IsRunning = true;
         if (Listener.Status == ListenerStatus.NotListening)
         {
             Listener.Start();
         }
         if (LocalPeerDiscovery.Status == ListenerStatus.NotListening)
         {
             LocalPeerDiscovery.Start();
         }
         await PortForwarder.RegisterMappingAsync(new Mapping (Protocol.Tcp, Settings.ListenPort));
     }
 }
        public void Dispose ()
        {
            if (Disposed)
                return;

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

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

                DiskManager.Dispose ();
                LocalPeerDiscovery.Stop ();
            });
        }
Пример #8
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();
                }
            }
        }