diff --git a/src/pc/discord/discord_activity.c b/src/pc/discord/discord_activity.c index 0e500ade0..b5679c279 100644 --- a/src/pc/discord/discord_activity.c +++ b/src/pc/discord/discord_activity.c @@ -33,10 +33,15 @@ static void on_activity_join(UNUSED void* data, const char* secret) { // extract lobby password token = strtok(NULL, ":"); + if (token == NULL) { token = ""; } // join + if (gNetworkType != NT_NONE) { + network_shutdown(true, false, false, false); + } gCoopNetDesiredLobby = lobbyId; snprintf(gCoopNetPassword, 64, "%s", token); + network_reset_reconnect_and_rehost(); network_set_system(NS_COOPNET); network_init(NT_CLIENT, false); diff --git a/src/pc/network/coopnet/coopnet.c b/src/pc/network/coopnet/coopnet.c index f957893d4..37f08e48f 100644 --- a/src/pc/network/coopnet/coopnet.c +++ b/src/pc/network/coopnet/coopnet.c @@ -22,6 +22,7 @@ static uint64_t sLocalLobbyId = 0; static uint64_t sLocalLobbyOwnerId = 0; static enum NetworkType sNetworkType; static bool sReconnecting = false; +static bool sIntentionalDisconnect = false; static CoopNetRc coopnet_initialize(void); @@ -39,7 +40,9 @@ static void coopnet_on_connected(uint64_t userId) { static void coopnet_on_disconnected(void) { LOG_INFO("Coopnet shutdown!"); - djui_popup_create(DLANG(NOTIF, COOPNET_DISCONNECTED), 2); + if (!sIntentionalDisconnect) { + djui_popup_create(DLANG(NOTIF, COOPNET_DISCONNECTED), 2); + } coopnet_shutdown(); gCoopNetCallbacks.OnLobbyListGot = NULL; gCoopNetCallbacks.OnLobbyListFinish = NULL; @@ -167,9 +170,12 @@ static void ns_coopnet_get_lobby_secret(UNUSED char* destination, UNUSED u32 des static void ns_coopnet_shutdown(bool reconnecting) { if (reconnecting) { return; } LOG_INFO("Coopnet shutdown!"); + sIntentionalDisconnect = true; coopnet_shutdown(); gCoopNetCallbacks.OnLobbyListGot = NULL; gCoopNetCallbacks.OnLobbyListFinish = NULL; + coopnet_update(); + sIntentionalDisconnect = false; sLocalLobbyId = 0; sLocalLobbyOwnerId = 0;