Matching과 game start — Reserve · Join · Start

두 player가 같은 reservation으로 같은 Room에 deferred join하고, 두 번째 join이 game을 Running으로 만든다

Matching과 game start — Reserve · Join · Start 두 player가 같은 reservation으로 같은 Room에 deferred join하고, 두 번째 join이 game을 Running으로 만든다 MatchBingoReq Relay through binding MatchBingoApiReq ReserveBingoRoomReq ReserveBingoRoomRes Get or create Room Ready deferred join 등록 후 MatchBingoRes(WaitingForPlayers) MatchBingoRes Player 1 참가 (handler 반환 뒤 deferred join) 참가 수락 MatchBingoReq Relay through binding MatchBingoApiReq ReserveBingoRoomReq Same RoomId and settings [par] deferred join 등록 후 MatchBingoRes(WaitingForPlayers) [par] MatchBingoRes [par] Player 2 참가 State=Running 후 BingoGameStartedNotify BingoGameStartedNotify BingoGameStartedNotify BingoGameStartedNotify BingoGameStartedNotify BingoGameStartedNotify Player 1 · Sequence participant Player 1 Player 2 · Sequence participant Player 2 Session · Sequence participant Session Actor 1 · Sequence participant Actor 1 Actor 2 · Sequence participant Actor 2 API · Sequence participant API Matchmaker · Sequence participant Matchmaker Room · Sequence participant Room

자기 메시지 3개 (archify 미지원 → 인접 화살표에 합침)

  • • 원문 Actor1→Actor1 'Room join을 deferred operation으로 등록' → MatchBingoRes(WaitingForPlayers) 반환 라벨에 합쳤다. Handler 반환 뒤 join이 실행되므로 MatchBingoRes만으로 join 완료를 판정하지 않는다.
  • • 원문 Actor2→Actor2 'Room join을 deferred operation으로 등록' → 같은 방식으로 par 블록의 MatchBingoRes 반환에 합쳤다.
  • • 원문 Room→Room 'State = Running' → 뒤따르는 첫 BingoGameStartedNotify(Actor1) 라벨에 합쳤다. 두 번째 Actor join이 끝나면 room이 Running으로 바뀌고 두 player에게 알린다 — 이 알림이 game 시작의 authoritative completion이다.

원문 par 블록과 Note

  • • 참여자 원문 라벨 — Player 1/2: Player Client 1/2 · Actor 1/2: Play / Player Actor 1/2 · Matchmaker: Matchmaking · Room: Play / Room.
  • • `[par]` 표시 메시지는 원문 par/and 블록으로 두 그룹이 병렬 실행된다: (Matching 응답) Actor2→Session→Player2 MatchBingoRes 와 (Handler 반환 뒤 deferred join) Actor2→Room 참가 뒤 State=Running·BingoGameStartedNotify fan-out.
  • • 원문 Note(Actor1~Room): Handler 반환 뒤 deferred join이 실행된다.
  • • Room owner 조회와 remote join은 Location Store가 처리한다. Concurrent GetOrCreate caller는 하나의 Creating authority가 Ready가 될 때까지 기다리며 별도 factory를 실행하지 않는다. Player join callback은 API record 조회를 Yield로 기다린 뒤 room이 Finished인지·Actor가 여전히 member인지 재확인하고 state를 바꾼다.