Skip to content

Waiting Room WebSocket API

Client → Server

대기방 생성

  • Destination: /app/waiting-room/create
  • 설명: 새로운 대기방을 생성합니다. 성공 시 생성된 roomId/user/queue/waiting-room으로 전송받습니다.

Request Payload: CreateWaitingRoomCommand

필드타입설명
nameString방 이름 (max 255)
capacityInteger최대 참여 인원 (2-20)
json
{
  "name": "카카오테크캠퍼스 아이디어톤",
  "capacity": 7
}

Response (to /user/queue/waiting-room): WaitingRoomId

필드타입설명
statusString응답 상태 ("SUCCESS")
dataObject응답 데이터
data.roomIdString생성된 대기방 ID
messageString응답 메시지
json
{
  "status": "SUCCESS",
  "data": {
    "roomId": "a1b2c3d4-e5f6-7890-1234-567890abcdef"
  },
  "message": "대기방이 정상적으로 생성되었습니다."
}

대기방 참여

  • Destination: /app/waiting-room/{roomId}/join
  • PathVariable: roomId (String)
  • 설명: 기존 대기방에 참여합니다. 참여 성공 시, 해당 대기방의 모든 참여자에게 /topic/waiting-room/{roomId}PARTICIPANT_JOINED 메시지가 전송됩니다.

Server → Client

대기방 상태 구독

  • Topic: /topic/waiting-room/{roomId}
  • 설명: 대기방의 상태 변경(참가자 입장, 게임 시작)을 수신합니다. 메시지는 type 필드로 구분됩니다.

PARTICIPANT_JOINED

참가자가 대기방에 입장했을 때 전송됩니다.

Payload: ParticipantJoinedPayload

필드타입설명
statusString응답 상태 ("SUCCESS")
dataObject응답 데이터
data.typeString메시지 타입 ("PARTICIPANT_JOINED")
data.payloadObject실제 페이로드
data.payload.statusString대기방 상태 (AVAILABLE, FULL)
data.payload.roomObject대기방 정보
data.payload.room.roomIdString대기방 ID
data.payload.room.nameString대기방 이름
data.payload.room.capacityInteger최대 참여 인원
data.payload.room.hostIdLong방장 ID
data.payload.participantsPariticipants[]참여자 목록
data.payload.participants[].idLong참여자 ID
data.payload.participants[].nameString참여자 이름
data.payload.participants[].roleString참여자 역할 (HOST, MEMBER)
messageString응답 메시지

Payload: ParticipantPayload

필드타입설명
data.payload.participants[].idLong참여자 ID
data.payload.participants[].nameString참여자 이름
data.payload.participants[].roleString참여자 역할 (HOST, MEMBER)
json
{
  "status": "SUCCESS",
  "data": {
    "type": "PARTICIPANT_JOINED",
    "payload": {
      "status": "AVAILABLE",
      "room": {
        "roomId": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
        "name": "카카오테크캠퍼스 아이디어톤",
        "capacity": 7,
        "hostId": 1
      },
      "participants": [
        {
          "id": 1,
          "name": "홍길동",
          "role": "HOST"
        },
        {
          "id": 2,
          "name": "김철수",
          "role": "MEMBER"
        }
      ]
    }
  },
  "message": "대기방에 참가자가 입장했습니다."
}

ROOM_STARTED

대기방이 가득 차서 게임이 시작될 때 전송됩니다.

Payload: RoomStartedPayload

필드타입설명
statusString응답 상태 ("SUCCESS")
dataObject응답 데이터
data.typeString메시지 타입 ("ROOM_STARTED")
data.roomIdString시작된 방(게임)의 ID
messageString응답 메시지
json
{
  "status": "SUCCESS",
  "data": {
    "type": "ROOM_STARTED",
    "roomId": "a1b2c3d4-e5f6-7890-1234-567890abcdef"
  },
  "message": "대기방이 시작되었습니다."
}