#pragma once #include #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(); std::string addClient(std::shared_ptr socket); void removeClient(const std::string& id); std::shared_ptr getClient(const std::string& id); void sendTunnelPacket(const std::string& 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_; boost::asio::io_context& io_context_; bool& isHost_; int& localPort_; std::unordered_map> readBuffers_; void startAsyncRead(const std::string& id); };