/// <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; } }
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; } }
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; }
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); }
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)); } }
public ClientEngine(EngineSettings settings, PeerListener listener) : this(settings, listener, new DiskWriter()) { }
public void Unregister(PeerListener listener) { listener.ConnectionReceived -= ConnectionReceived; }
public void Register(PeerListener listener) { listener.ConnectionReceived += ConnectionReceived; }