mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-05-09 04:13:28 -05:00
Release boot session data during Netplay cleanup
Boot session data is already handled when the game is booted so this is just fallback in case the game launch fails in some weird way. Add missing @Keep annotations to functions called from C++
This commit is contained in:
parent
ee1271e5b2
commit
05cfd16665
|
|
@ -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<Player>) {
|
||||
_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.
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include <jni.h>
|
||||
|
||||
#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<jlong>(client);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_netplay_Netplay_ReleaseBootSessionData(JNIEnv* env, jclass)
|
||||
{
|
||||
auto* data = reinterpret_cast<BootSessionData*>(
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user