본문으로 건너뛰기

룸 관리

게임 룸은 플레이어들이 함께 게임을 플레이하는 공간입니다. 각 룸은 독립된 게임 상태를 가집니다.

룸 생성

typescript
const game = new GameRoom({
  appId: 'YOUR_APP_ID',
  clientId: 'player_123',
  publicKey: 'cb_pk_...'
})

await game.connect()

// 기본 설정으로 룸 생성
const state = await game.createRoom()
console.log('룸 ID:', state.roomId)

// 커스텀 설정으로 룸 생성
const state = await game.createRoom({
  roomId: 'my-custom-room',  // 선택사항, 미지정시 자동 생성
  tickRate: 64,              // 초당 틱 수 (기본 64)
  maxPlayers: 10,            // 최대 플레이어 수 (기본 100)
  metadata: {                // 커스텀 메타데이터
    mapName: 'arena',
    gameMode: 'deathmatch'
  }
})

룸 참가

typescript
// 룸 ID로 참가
const state = await game.joinRoom('room-id')

// 메타데이터와 함께 참가
const state = await game.joinRoom('room-id', {
  nickname: 'Player1',
  team: 'red'
})

console.log('현재 플레이어:', state.players)

룸 퇴장

typescript
await game.leaveRoom()

룸 목록 조회

typescript
// HTTP API로 룸 목록 조회
const rooms = await game.listRooms()

rooms.forEach(room => {
  console.log(`${room.id}: ${room.playerCount}/${room.maxPlayers} 플레이어`)
})

룸 설정 타입

typescript
interface GameRoomConfig {
  roomId?: string              // 룸 ID (선택)
  categoryId?: string          // 카테고리 ID (선택)
  tickRate?: number            // 틱 레이트 (기본 64)
  maxPlayers?: number          // 최대 플레이어 수 (기본 100)
  metadata?: Record<string, string>  // 커스텀 메타데이터
}

룸 정보 타입

typescript
interface GameRoomInfo {
  id: string
  appId: string
  categoryId?: string
  playerCount: number
  maxPlayers: number
  tickRate: number
  isRunning: boolean
  createdAt: number
  metadata?: Record<string, string>
}

플레이어 이벤트

typescript
// 플레이어 입장 감지
game.on('onPlayerJoined', (player) => {
  console.log(`${player.clientId} 입장`)
  console.log('메타데이터:', player.metadata)
})

// 플레이어 퇴장 감지
game.on('onPlayerLeft', (player) => {
  console.log(`${player.clientId} 퇴장`)
})

플레이어 타입

typescript
interface GamePlayer {
  clientId: string                    // 클라이언트 ID
  userId?: string                     // 사용자 ID (인증된 경우)
  joinedAt: number                    // 입장 시간 (timestamp)
  metadata?: Record<string, string>   // 커스텀 메타데이터
}