// called from ---GUI--- thread NetPlayClient::~NetPlayClient() { // not perfect if (m_is_running.load()) StopGame(); if (is_connected) { m_do_loop.store(false); m_thread.join(); } if (m_server) { Disconnect(); } if (g_MainNetHost.get() == m_client) { g_MainNetHost.release(); } if (m_client) { enet_host_destroy(m_client); m_client = nullptr; } if (m_traversal_client) { ReleaseTraversalClient(); } }
NetPlayServer::~NetPlayServer() { if (is_connected) { m_do_loop = false; m_thread.join(); enet_host_destroy(m_server); if (g_MainNetHost.get() == m_server) { g_MainNetHost.release(); } if (m_traversal_client) { g_TraversalClient->m_Client = nullptr; ReleaseTraversalClient(); } } #ifdef USE_UPNP UPnP::StopPortmapping(); #endif }