This repository has been archived on 2026-08-27. You can view files and clone it, but cannot push or open issues or pull requests.
gopher64-netplay/src
Claude 48598f45ca
Some checks failed
Rust-lint / lint-linux (pull_request) Failing after 2s
Rust / build-linux (linux-x86_64, X64, ubuntu-24.04, x86_64-unknown-linux-gnu) (pull_request) Failing after 1s
Rust / build-android (29.0.14206865, ubuntu-24.04, 33) (pull_request) Failing after 1s
Rust / build-linux (linux-aarch64, ARM64, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (pull_request) Has been cancelled
Rust / build-windows (windows-aarch64, woa64, windows-11-arm, aarch64-pc-windows-msvc) (pull_request) Has been cancelled
Rust / build-windows (windows-x86_64, win64, windows-2025, x86_64-pc-windows-msvc) (pull_request) Has been cancelled
Rust / build-macos (macos-aarch64, ARM64, aarch64-apple-darwin) (pull_request) Has been cancelled
Rust / Collect release artifacts (pull_request) Has been cancelled
Desync auto-resync: host sends state on desync event (#6)
When GGRS fires DesyncDetected, the host (player_number==0) snapshots
the current emulator state, sends it to all peers via the reliable
channel as a 'resync_state' message, and pauses the frame loop until
all peers acknowledge with 'resync_ready'. Non-host peers ignore the
desync event and wait for the host's state.

Changes:
- Add ResyncState enum (Idle, HostWaiting, ClientLoading) to Netplay
- In poll_clients DesyncDetected handler: host creates in-memory
  savestate, sends resync_state message, enters HostWaiting state
- Add check_resync_messages: non-host receives resync_state and enters
  ClientLoading; host receives resync_ready acks and resets frame when
  all peers ack
- Add process_resync_load: non-host decompresses and loads received
  state, calls reset_frame, sends resync_ready ack, resumes
- Add resyncing state check in advance_frame: pauses frame loop during
  resync (like disconnected path), with 5s timeout -> disconnect
- Add create_savestate_in_memory: serializes Device via postcard +
  compress without file I/O
- Call process_resync_load from vi.rs update_screen before normal frame
  processing
- Add tests: ResyncState default/transitions, message serialization,
  timeout logic, ack tracking

Based on issue-5 branch (includes GGRS frame reset from #5).

Closes #6
2026-08-25 00:44:37 -05:00
..
compat Use upstream sse2neon (#694) 2026-03-28 19:24:53 +01:00
device Desync auto-resync: host sends state on desync event (#6) 2026-08-25 00:44:37 -05:00
ui update quick-xml (#1195) 2026-08-24 13:10:50 +00:00
cheats.rs Don't store luts in savestate (#993) 2026-05-31 06:37:11 +00:00
device.rs Fix GGRS frame counter reset after state load (#5) 2026-08-25 00:37:22 -05:00
lib.rs Add cli flag for widescreen (#1152) 2026-07-06 12:54:51 +00:00
main.rs put tokio runtime in dedicated thread (#1086) 2026-06-16 09:33:27 +00:00
netplay.rs Desync auto-resync: host sends state on desync event (#6) 2026-08-25 00:44:37 -05:00
retroachievements.rs put tokio runtime in dedicated thread (#1086) 2026-06-16 09:33:27 +00:00
savestates.rs Fix GGRS frame counter reset after state load (#5) 2026-08-25 00:37:22 -05:00
ui.rs use rustls (#1194) 2026-08-24 12:35:05 +00:00