Fix: device stuck offline in the hub while its service is still running
The Windows client keeps a WebSocket to the hub for presence and instant
push-sync. If that connection died silently — PC sleep, Tailscale re-route, a
Wi-Fi drop — the client could block forever waiting to read from the dead socket
and never reconnect. The hub's own heartbeat then marked the device offline,
even though the service looked "running" and background polling kept limping
along. Restarting the service was the only way back.
What changed (client 1.0.1):
- Application-level heartbeat: the client periodically pings the hub and treats
any reply as proof of life. If nothing comes back within the deadline, it drops
the dead socket and reconnects. (.NET 8 has noKeepAliveTimeout— that's .NET
9+ — so this is done in-app.) ConnectAsyncis now time-bounded so a dead network path can't wedge the loop.
The hub server is unchanged — this release just bundles the rebuilt client so
the dashboard's Setup tab serves 1.0.1. Update every device's client to
1.0.1.
Install
Download GameSyncClient-win-x64.zip, unzip, and run Install-GameSync.cmd as
admin (or grab it from the hub's Setup tab). Self-contained — no .NET runtime
needed.