/// <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();
        }
        //private ConsoleCommandHandlerThread? _consoleCommandHandlerThread;

        public ProgramHostedService(Logger logger, IHostApplicationLifetime hostApplicationLifetime, SqliteDatabaseFactory sqliteDatabaseFactory, PeerListener peerListener)
        {
            _logger = logger;
            _hostApplicationLifetime = hostApplicationLifetime;
            _sqliteDatabaseFactory   = sqliteDatabaseFactory;
            _peerListener            = peerListener;
        }
        /// <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;
            }
        }
Exemple #4
0
        public void AddPeer(Peer peer)
        {
            Peers.Add(peer);
            PeerInputPrinter printer  = new PeerInputPrinter(peer);
            PeerListener     listener = new PeerListener(peer, printer);

            listener.Start();

            if (Peers.Count == 1)
            {
                SessionIndex = 0;
            }
        }
Exemple #5
0
        private static void setup(string host, int port)
        {
            Common.IO.Console.Message("Connecting...");
            TcpClient client = new TcpClient(host, port);

            Common.IO.Console.Message("Connected");

            Peer            peer     = new Peer(client);
            NetInputHandler iHandler = new NetInputHandler();

            listener = new PeerListener(peer, iHandler);
            listener.Start();

            Model.Peer     = peer;
            Model.Listener = listener;
        }
Exemple #6
0
        public Task <ListenerSession> Start()
        {
            Action <ListenerStarted> onStarted = hooks.OnListenerStarted;
            TaskCompletionSource <ListenerSession> completion = new TaskCompletionSource <ListenerSession>();

            listener =
                new PeerListenerBuilder()
                .WithNetwork(pool)
                .Build(hooks);

            listener.Hooks.OnListenerStarted = data =>
            {
                onStarted?.Invoke(data);
                completion.SetResult(new ListenerSession(data.Port, pool));
            };

            listener.Start();

            return(completion.Task);
        }
Exemple #7
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));
            }
        }
Exemple #8
0
 public ClientEngine(EngineSettings settings, PeerListener listener)
     : this(settings, listener, new DiskWriter())
 {
 }
Exemple #9
0
 public void Unregister(PeerListener listener)
 {
     listener.ConnectionReceived -= ConnectionReceived;
 }
Exemple #10
0
 public void Register(PeerListener listener)
 {
     listener.ConnectionReceived += ConnectionReceived;
 }