Skip to content

feat(network): Measure connection latency, jitter and loss with packet feedback - #657

Open
tintinhamans wants to merge 4 commits into
GeneralsOnlineDevelopmentTeam:mainfrom
tintinhamans:arctic/go/stack2/02-packet-feedback-measurement
Open

tintinhamans wants to merge 4 commits into
GeneralsOnlineDevelopmentTeam:mainfrom
tintinhamans:arctic/go/stack2/02-packet-feedback-measurement

Conversation

@tintinhamans

@tintinhamans tintinhamans commented Oct 25, 2026 •

Copy link
Copy Markdown

Merge after #656. Conflicts with #625 in NetworkMesh.h and NextGenTransport.cpp; this stack gets rebased once #625 lands.

There were no numbers for how a connection behaves beyond the lobby ping, and the only loss figure was a guess from command retries. ConnectionStats (new) keeps latency, jitter and loss of one connection over a 10 s window, and a retry whose earlier send was acked after all counts as a late ack, not as loss. The mesh also probes each peer on the ping channel, every connection.probe_lobby_interval_ms in the lobby (250) and connection.probe_match_interval_ms in a match (1000), timed from when the transport received the probe so a slow frame is not counted as network delay.

PacketFeedback (new) measures real packet loss per direction. Every game packet gets a sequence number and the receiver reports what it got over the last 64 packets, at most every 250 ms. It only sees byte buffers and a clock, so GNS, EOS or any other transport can share it.

Wire change: game packets start with a 3 byte envelope (u16 sequence, u8 flags) plus a 5 byte feedback record when due, and GENERALS_MAGIC_NUMBER is 0xF00E, so this build does not talk to an older one. A packet without a valid envelope, or on an unknown channel, is dropped. A failed GNS send is retried once and returned as a failure. The send.flags key is removed. The numbers show in the debug stats display.

Tested: builds x86 Release z_generals. The full stack had 0 CRC mismatches in 3 player rig runs, n=1.

@tintinhamans
tintinhamans force-pushed the arctic/go/stack2/02-packet-feedback-measurement branch 4 times, most recently from 2249a03 to fc648ec Compare October 26, 2026 15:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant