룸 관리
게임 룸은 플레이어들이 함께 게임을 플레이하는 공간입니다. 각 룸은 독립된 게임 상태를 가집니다.
룸 생성
룸 생성은 cb.game.createClient() 가 반환한 룸 인스턴스의 createRoom() 으로 합니다.
cb.game.createRoom(...) 는 아직 공개되지 않아 호출 시 에러를 던집니다.
📌 룸 생성 채널은 WebSocket 메시지
create_room전용입니다. REST 룸 생성 엔드포인트는 없습니다(REST/rooms는 조회/상태/통계용 GET 전용).
typescript
import ConnectBase from 'connectbase-client'
const cb = new ConnectBase({ appId: 'YOUR_APP_ID', publicKey: 'cb_pk_...' })
// 룸 인스턴스 생성 후 연결
const room = cb.game.createClient({ clientId: 'player_123' })
await room.connect()
// 기본 설정으로 룸 생성
const state = await room.createRoom()
console.log('룸 ID:', state.roomId)
// 커스텀 설정으로 룸 생성
const state2 = await room.createRoom({
roomId: 'my-custom-room', // 선택사항, 미지정시 자동 생성
tickRate: 64, // 초당 틱 수 (기본 64)
maxPlayers: 10, // 최대 플레이어 수 (기본 100)
metadata: { // 커스텀 메타데이터
mapName: 'arena',
gameMode: 'deathmatch'
}
})ℹ️ 플랫폼별 룸 생성 노출: JS 는 위
room.createRoom()(WS), Unreal 은UConnectBaseGameRoom::CreateRoom(Blueprint-callable)로 노출됩니다. Unity / Godot 는 룸 생성을 노출하지 않고 join/leave/sendAction 만 지원하므로, JS·Unreal·admin 이 만든 룸에 입장만 합니다.
룸 참가
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> // 커스텀 메타데이터
}