GGRS frame counter reset after state load #5
Labels
No Label
blocked
bounced
in-progress
in-review
manual-only
needs-guidance
netplay
p1
p2
p3
rust
No Milestone
No project
No Assignees
1 Participants
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: pbwraith/gopher64-netplay#5
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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: After a netplay state load, both clients' GGRS sessions must agree on the current frame, else desync detection fires immediately.
Background:
P2PSessiontracks internal frame counters; loading a savestate replaces emulator state but NOT the GGRS session framesrc/netplay.rsinit()builds the session withSessionBuilder— check if GGRS exposes current-frame mutation, or whether a new session must be built with an offsetAcceptance:
ggrs::P2PSession(check the Cargo.lock version and docs.rs for ggrs used by this fork) for frame reset; if no public API:[patch]in Cargo.toml) to exposeset_current_frame(i32)or equivalent — keep the change minimal and upstream-compatiblenetplay::reset_frame(session, frame)— safe no-op if unsupported, documentedload_savestate_from_datain a netplay context, call reset sosession.current_frame() == state framecurrent_frame()==60and no immediate desync event when resuming with matching inputsVerification:
cargo test. Note in the PR body whether ggrs had to be patched and how./tmp/comment_5.md
[lane5] orphaned_review invariant repaired — PR reopened, kept in-review
Orphaned-review repair for pbwraith/gopher64-netplay#5 ("GGRS frame counter reset
after state load"):
in-reviewbut had noreviewable open PR. Its own PR (!9) was closed/unmerged, marked "subsumed by
!18".
origin/issue-5still exists @eb5cf56ee3git merge-base --is-ancestor origin/issue-5 origin/main-> FALSE (work notlanded; non-empty diff vs main: 38 files, +10392/-2)
git merge-base --is-ancestor origin/issue-5 origin/issue-4-> TRUE (containedin !18's head)
never actually completed, so issue-5's work currently has NO delivered review
channel. Per the orphaned-review invariant: restored head has a non-empty diff,
so the SAME closed/unmerged PR (!9) is reopened (no duplicate opened).
(
c857fea), changed_files=38, additions=10392, deletions=2. Labels: none (thestale
blockedtied to closed #23 is gone).in-review; a reviewable open PR now exists for it. Do NOT closeor merge this manually — leave for the manual review lane; if !18's bounce is
fixed first, coordinate the merge order (this branch is a strict subset of !18).