diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/Netplay.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/Netplay.kt index 7298795d71..f4eb178cb4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/Netplay.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/Netplay.kt @@ -27,8 +27,6 @@ import org.dolphinemu.dolphinemu.features.netplay.model.ConnectionType import org.dolphinemu.dolphinemu.features.netplay.model.NetplayMessage import org.dolphinemu.dolphinemu.features.netplay.model.Player -//TODO add other necessary @Keep annotations -//TODO clear boot session data at appropriate time object Netplay { @Keep private var netPlayClientPointer: Long = 0 @@ -123,6 +121,11 @@ object Netplay { sessionScope?.cancel() sessionScope = null + if (bootSessionDataPointer != 0L) { + ReleaseBootSessionData() + bootSessionDataPointer = 0 + } + if (netPlayClientPointer != 0L) { ReleaseNetplayClient() netPlayClientPointer = 0 @@ -158,6 +161,9 @@ object Netplay { @JvmStatic external fun adjustPadBufferSize(buffer: Int) + @JvmStatic + private external fun ReleaseBootSessionData() + @JvmStatic private external fun ReleaseNetplayClient() @@ -170,6 +176,7 @@ object Netplay { // NetPlayUI callbacks + @Keep @JvmStatic fun onBootGame(gameFilePath: String, bootSessionDataPointer: Long) { this.bootSessionDataPointer = bootSessionDataPointer @@ -189,31 +196,37 @@ object Netplay { _connectionLost.trySend(Unit) } + @Keep @JvmStatic fun onConnectionError(message: String) { _connectionErrors.trySend(message) } + @Keep @JvmStatic fun onUpdate(players: Array) { _players.tryEmit(players.toList()) } + @Keep @JvmStatic fun onChatMessageReceived(message: String) { _chatMessages.tryEmit(message) } + @Keep @JvmStatic fun onHostInputAuthorityChanged(enabled: Boolean) { _hostInputAuthorityEnabled.tryEmit(enabled) } + @Keep @JvmStatic fun onGameChanged(game: String) { _game.tryEmit(game) } + @Keep @JvmStatic fun onPadBufferChanged(buffer: Int) { // Only for remote pad buffer settings. Ignore local max buffer changes. diff --git a/Source/Android/jni/NetPlay/Netplay.cpp b/Source/Android/jni/NetPlay/Netplay.cpp index 9dd2743d53..e8f3deaa17 100644 --- a/Source/Android/jni/NetPlay/Netplay.cpp +++ b/Source/Android/jni/NetPlay/Netplay.cpp @@ -8,6 +8,7 @@ #include #include "Common/CommonTypes.h" +#include "Core/Boot/Boot.h" #include "Core/Config/NetplaySettings.h" #include "Core/NetPlayClient.h" #include "UICommon/GameFile.h" @@ -166,6 +167,15 @@ Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_Join(JNIEnv* env, jclass return reinterpret_cast(client); } +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_ReleaseBootSessionData(JNIEnv* env, jclass) +{ + auto* data = reinterpret_cast( + env->GetStaticLongField(IDCache::GetNetplayClass(), IDCache::GetNetplayBootSessionDataPointer())); + delete data; + env->SetStaticLongField(IDCache::GetNetplayClass(), IDCache::GetNetplayBootSessionDataPointer(), 0); +} + JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_ReleaseNetplayClient(JNIEnv* env, jclass) {