summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorTom Pratt <tom.pratt@outlook.com>2026-04-29 14:31:25 +0200
committerTom Pratt <tompratt@squareup.com>2026-05-19 12:02:58 +0200
commit117d1d71acc6b85b6c67396bd2222fbee7f0ff05 (patch)
treeca21c19d02b49d6dd1fe9c62683a0689b92019e6 /Source/Android/app/src/main/java
parentabd324e98d735d836d8131cef91b58f3278bc6fa (diff)
Handle desync messages
Show them in the chat window and also in a toast during game play.
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt12
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayMessage.kt5
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.kt7
3 files changed, 24 insertions, 0 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt
index f47d9ab198..fbeba1510c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/NetplaySession.kt
@@ -95,6 +95,12 @@ class NetplaySession(
)
val padBuffer = _padBuffer.asSharedFlow()
+ private val _desyncMessages = MutableSharedFlow<NetplayMessage.Desync>(
+ extraBufferCapacity = 32,
+ onBufferOverflow = BufferOverflow.DROP_OLDEST
+ )
+ val desyncMessages = _desyncMessages.asSharedFlow()
+
private val _saveTransferProgress = MutableStateFlow<SaveTransferProgress?>(null)
val saveTransferProgress = _saveTransferProgress.asStateFlow()
@@ -148,6 +154,7 @@ class NetplaySession(
game.map { NetplayMessage.GameChanged(it) },
hostInputAuthorityEnabled.map { NetplayMessage.HostInputAuthorityChanged(it) },
padBuffer.map { NetplayMessage.BufferChanged(it) },
+ desyncMessages,
)
private fun releaseNativeResources() {
@@ -237,6 +244,11 @@ class NetplaySession(
}
@Keep
+ fun onDesync(frame: Int, player: String) {
+ _desyncMessages.tryEmit(NetplayMessage.Desync(player, frame))
+ }
+
+ @Keep
fun onShowChunkedProgressDialog(title: String, dataSize: Long, playerIds: IntArray) {
val players = _players.replayCache.firstOrNull()
_saveTransferProgress.value = SaveTransferProgress(
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayMessage.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayMessage.kt
index 41ab8997bd..b8291c094b 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayMessage.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/netplay/model/NetplayMessage.kt
@@ -26,4 +26,9 @@ sealed class NetplayMessage {
override fun message(context: Context) =
context.getString(R.string.netplay_message_buffer_changed, buffer)
}
+
+ class Desync(private val player: String, private val frame: Int) : NetplayMessage() {
+ override fun message(context: Context) =
+ context.getString(R.string.netplay_message_desync, player, frame)
+ }
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.kt
index c989cdc780..a005995bdb 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.kt
@@ -9,9 +9,12 @@ import android.view.LayoutInflater
import android.view.SurfaceHolder
import android.view.View
import android.view.ViewGroup
+import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.activities.EmulationActivity
@@ -231,6 +234,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
netplaySession.stopGame.first()
stopEmulation()
}
+ netplaySession
+ .desyncMessages
+ .onEach { Toast.makeText(requireContext(), it.message(requireContext()), Toast.LENGTH_SHORT).show() }
+ .launchIn(lifecycleScope)
NativeLibrary.RunNetPlay(
paths,
riivolution,