#pragma once #include #include #include "Utilities/mutex.h" #include "Emu/Cell/PPUThread.h" #include "nt_p2p_port.h" struct base_network_thread { void add_ppu_to_awake(ppu_thread* ppu); void del_ppu_to_awake(ppu_thread* ppu); shared_mutex mutex_ppu_to_awake; std::vector ppu_to_awake; void wake_threads(); }; struct network_thread : base_network_thread { shared_mutex mutex_thread_loop; atomic_t num_polls = 0; static constexpr auto thread_name = "Network Thread"; void operator()(); }; struct p2p_thread : base_network_thread { shared_mutex list_p2p_ports_mutex; std::map list_p2p_ports; atomic_t num_p2p_ports = 0; static constexpr auto thread_name = "Network P2P Thread"; p2p_thread(); void create_p2p_port(u16 p2p_port); void bind_sce_np_port(); void operator()(); }; using network_context = named_thread; using p2p_context = named_thread;