UI: session save/resume controls + resync status #8

Closed
opened 2026-08-25 06:03:47 +02:00 by pbwraith · 1 comment
Owner

Repo: gopher64-netplay (fork of https://github.com/gopher64/gopher64)
Context: Full scope doc at upstream analysis — see commit history. Netplay uses GGRS over WebRTC (matchbox_socket), reliable channel carries NetplayMessage { name, data } in 16KB chunks. Savestates serialize full Device via postcard + compress.

Goal: Expose the new features in the Slint UI with clear feedback.

Background:

  • Netplay UI: src/ui/netplay.rs (1047 lines) — create/join/wait windows, Slint callbacks via app.on_netplay_*
  • Input/keybind handling: src/ui/input.rs + config; onscreen messages via ui::video::onscreen_message

Acceptance:

  • Create-session window: "Resume Session…" button + file picker (.netplay-state), shown only when a state file exists
  • Wait window: "Save Session" button (host only; hidden/disabled for non-host), triggers #3 flow
  • In-game: save-session hotkey from #3 shows in the controls reference (if the UI has one)
  • Resync indicator: during resync, a small "Resyncing…" status in the corner (reuse onscreen_message OR a persistent badge — your call, keep it simple); replaced with "Resynced" on completion
  • Nice-to-have (only if cheap): show last-saved frame/time in the resume picker
  • Tests: UI wiring compiles; callbacks fire the right netplay functions (unit or manual — manual acceptable, note it)

Verification: cargo build clean; manual smoke: create session→save→quit→resume flow on 2 machines or 2 windows.

**Repo:** gopher64-netplay (fork of https://github.com/gopher64/gopher64) **Context:** Full scope doc at upstream analysis — see commit history. Netplay uses GGRS over WebRTC (matchbox_socket), reliable channel carries `NetplayMessage { name, data }` in 16KB chunks. Savestates serialize full Device via postcard + compress. **Goal:** Expose the new features in the Slint UI with clear feedback. **Background:** - Netplay UI: `src/ui/netplay.rs` (1047 lines) — create/join/wait windows, Slint callbacks via `app.on_netplay_*` - Input/keybind handling: `src/ui/input.rs` + config; onscreen messages via `ui::video::onscreen_message` **Acceptance:** - Create-session window: "Resume Session…" button + file picker (`.netplay-state`), shown only when a state file exists - Wait window: "Save Session" button (host only; hidden/disabled for non-host), triggers #3 flow - In-game: save-session hotkey from #3 shows in the controls reference (if the UI has one) - Resync indicator: during resync, a small "Resyncing…" status in the corner (reuse onscreen_message OR a persistent badge — your call, keep it simple); replaced with "Resynced" on completion - Nice-to-have (only if cheap): show last-saved frame/time in the resume picker - Tests: UI wiring compiles; callbacks fire the right netplay functions (unit or manual — manual acceptable, note it) **Verification:** `cargo build` clean; manual smoke: create session→save→quit→resume flow on 2 machines or 2 windows.
pbwraith added the
netplay
p2
labels 2026-08-25 06:04:35 +02:00
pbwraith added the
in-progress
label 2026-08-25 07:51:01 +02:00
pbwraith added
in-review
and removed
in-progress
labels 2026-08-25 07:54:27 +02:00
Author
Owner

/tmp/comment_8.md

/tmp/comment_8.md
This repo is archived. You cannot comment on issues.
No Milestone
No project
No Assignees
1 Participants
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: pbwraith/gopher64-netplay#8
No description provided.