each player reserves the same RoomId · the second join flips the room to Running and pushes the start notify
Guided views
Explore this system
Step through curated paths without changing the source diagram.
Beat
Next
ReadyChapter 01 / 01
Guided chapter
Diagram guideExplore this system
Inspecting compiled semantics
E ExportT ThemeS Style0 Reset+ Zoom in- Zoom outEsc Close
Find a node
⌕/
No matching nodes
Semantic passport
Verified source
Authored reach
Route probeChoose a start node
Pick two semantic nodes on the diagram
Choose the source, then the destination. Direction matters.
Semantic lensCompare system roles
Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.
Choose a kind to inspect its nodes and touching relationships.
Semantic radar
Building overview
Click nodeDrag to pan
Semantic radar needs more MAP space.
Participants (mermaid full names)
• Player 1/2 = Player Client 1/2; Player Actor 1/2 = Play / Player Actor 1/2; Room = Play / Room; Session and API as labeled.
• API requests a reservation from the level bucket's Matchmaker Instance Spot; the Matchmaker creates a waiting room in Redis and returns the RoomId and settings. When player-2 runs the same process, Redis returns the same reservation.
Deferred join and parallelism
• Each Player Actor registers a deferred Room join (mermaid Actor self-message) and responds with the WaitingForPlayers projection. mermaid Note over Actor1,Room: the handler returns, then the deferred join runs — so MatchBingoRes alone does not prove the join completed.
• For player-2 the response branch and the deferred-join branch run in parallel (mermaid par 'Match result' ‖ 'Deferred join after handler return'). Once the second Actor join finishes, the Room sets State = Running (mermaid Room self-message) and BingoGameStartedNotify is the authoritative game-start completion.
• The Location Store handles room-owner lookup and remote join; Reservation Redis doesn't decide which Play node owns the room. A concurrent GetOrCreate caller waits for the single Creating authority to become Ready.
• The join callback waits on API's record lookup via Yield; on resume it re-checks Finished/membership before changing state. The Observer doesn't look up the player record.