룸 관리
게임 룸은 플레이어들이 함께 게임을 플레이하는 공간입니다. 각 룸은 독립된 게임 상태를 가집니다.
룸 생성
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> // 커스텀 메타데이터
}