#pragma once #include #include #include #include #include #include #include #include using boost::asio::ip::tcp; class MultiplexManager { public: MultiplexManager(ISteamNetworkingSockets* steamInterface, HSteamNetConnection steamConn, boost::asio::io_context& io_context, bool& isHost, int& localPort); ~MultiplexManager(); uint32_t addClient(std::shared_ptr socket); void removeClient(uint32_t id); std::shared_ptr getClient(uint32_t id); void sendTunnelPacket(uint32_t id, const char* data, size_t len, int type); void handleTunnelPacket(const char* data, size_t len); private: ISteamNetworkingSockets* steamInterface_; HSteamNetConnection steamConn_; std::unordered_map> clientMap_; std::mutex mapMutex_; uint32_t nextId_; boost::asio::io_context& io_context_; bool& isHost_; int& localPort_; };