fix(game): prevent green-felt freeze — loading spinner + retry resync
CI/CD / CI - API (dotnet build + engine sim) (push) Successful in 2m52s
CI/CD / CI - Web (tsc + next build) (push) Successful in 1m10s
CI/CD / Deploy - local stack (db + server + web) (push) Successful in 57s

Three changes:
1. GameTable shows a spinner instead of an empty table when mode=online
   and seatPlayers is empty (waiting for first state broadcast).
2. enterServerMatch schedules a 3s interval that calls service.resync()
   until seatPlayers is populated, guaranteeing the state always lands.
3. resync() added to OnlineService interface + both implementations so
   the game store can call it without casting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-19 20:05:16 +03:30
parent 4fb5a1776f
commit 3875141f46
5 changed files with 37 additions and 0 deletions
+4
View File
@@ -338,6 +338,10 @@ export class SignalrService implements OnlineService {
await this.conn?.invoke("PlayNow");
}
resync(): void {
void this.conn?.invoke("Resync").catch(() => {});
}
onMatchmaking(cb: (s: MatchmakingState) => void): Unsubscribe {
this.mmCbs.add(cb);
return () => this.mmCbs.delete(cb);