mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-09-14 22:36:01 -05:00
Implement StopGame callback and use it to finish the emulation activity
This commit is contained in:
@@ -44,6 +44,9 @@ object Netplay {
|
||||
private val _launchGame = Channel<String>(Channel.CONFLATED)
|
||||
val launchGame = _launchGame.receiveAsFlow()
|
||||
|
||||
private val _stopGame = Channel<Unit>(Channel.CONFLATED)
|
||||
val stopGame = _stopGame.receiveAsFlow()
|
||||
|
||||
private val _connectionErrors = Channel<String>(Channel.BUFFERED)
|
||||
val connectionErrors = _connectionErrors.receiveAsFlow()
|
||||
|
||||
@@ -123,6 +126,7 @@ object Netplay {
|
||||
}
|
||||
|
||||
_launchGame.flush()
|
||||
_stopGame.flush()
|
||||
_connectionErrors.flush()
|
||||
_players.resetReplayCache()
|
||||
_messages.resetReplayCache()
|
||||
@@ -166,9 +170,16 @@ object Netplay {
|
||||
@JvmStatic
|
||||
fun onBootGame(gameFilePath: String, bootSessionDataPointer: Long) {
|
||||
this.bootSessionDataPointer = bootSessionDataPointer
|
||||
_stopGame.flush()
|
||||
_launchGame.trySend(gameFilePath)
|
||||
}
|
||||
|
||||
@Keep
|
||||
@JvmStatic
|
||||
fun onStopGame() {
|
||||
_stopGame.trySend(Unit)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun onConnectionError(message: String) {
|
||||
_connectionErrors.trySend(message)
|
||||
@@ -244,6 +255,6 @@ object Netplay {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Channel<String>.flush() {
|
||||
private fun <T> Channel<T>.flush() {
|
||||
while (this.tryReceive().isSuccess) Unit
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ import android.view.SurfaceHolder
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.launch
|
||||
import org.dolphinemu.dolphinemu.NativeLibrary
|
||||
import org.dolphinemu.dolphinemu.activities.EmulationActivity
|
||||
import org.dolphinemu.dolphinemu.databinding.FragmentEmulationBinding
|
||||
@@ -220,6 +223,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
||||
val paths = requireNotNull(gamePaths) {
|
||||
"Cannot start emulation without any game paths"
|
||||
}
|
||||
lifecycleScope.launch {
|
||||
Netplay.stopGame.first()
|
||||
stopEmulation()
|
||||
}
|
||||
NativeLibrary.RunNetPlay(paths, riivolution)
|
||||
} else {
|
||||
Log.debug("[EmulationFragment] Starting emulation thread.")
|
||||
|
||||
Reference in New Issue
Block a user