diff options
| author | Tom Pratt <tom.pratt@outlook.com> | 2026-04-29 14:31:25 +0200 |
|---|---|---|
| committer | Tom Pratt <tompratt@squareup.com> | 2026-05-19 12:02:58 +0200 |
| commit | 117d1d71acc6b85b6c67396bd2222fbee7f0ff05 (patch) | |
| tree | ca21c19d02b49d6dd1fe9c62683a0689b92019e6 /Source/Android/app/src/main/java | |
| parent | abd324e98d735d836d8131cef91b58f3278bc6fa (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')
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, |
