Card, draw, and winner decision

both cards submitted → the room's logical timer draws numbers each tick → a winner is decided and the room is Finished

Card, draw, and winner decision both cards submitted → the room's logical timer draws numbers each tick → a winner is decided and the room is Finished SubmitBingoCardReq Relay through binding Submit card Card accepted SubmitBingoCardRes SubmitBingoCardRes [loop each draw tick] BingoNumberDrawnNotify (increasing DrawSeq) BingoNumberDrawnNotify BingoNumberDrawnNotify BingoGameEndedNotify (winner set, Finished) BingoGameEndedNotify BingoGameEndedNotify Player Clients · Sequence participant Player Clients Session · Sequence participant Session Player Actors · Sequence participant Player Actors Room · Sequence participant Room

Room self-steps (mermaid Room self-messages)

  • • After both cards are accepted the Room starts the logical draw timer.
  • • loop 'Each draw tick': the Room draws one number and updates marks, then notifies with an increasing DrawSeq — the diagram renders one representative tick.
  • • On the draw where a complete line first appears, the Room selects the winner and sets state = Finished, then sends both players BingoGameEndedNotify.

Rule ownership

  • • Once both players confirm the start push, each submits a different deterministic card. The Room validates card size, number range, and duplicates, and marks the center free cell.
  • • Card validation, the draw deck, marking, and winner determination are owned by the domain module. The Client doesn't draw numbers or submit marks; the Session handler and Framework adapter don't implement game rules.