Skip to content

Game WebSocket API

Client → Server

게임 시작

  • Destination: /app/room/{roomCode}/start-game
  • PathVariable: roomCode (String)
  • 설명: 현재 스테이지에 맞는 게임 시작을 요청합니다. 방장만 호출할 수 있습니다.

Payload: GameContext

필드타입설명
roomCodeString현재 방의 코드
typeString시작할 게임 타입 (MANITTO, RANDOM_ROULETTE, TOPIC_RECOMMEND)
topicNameStringtypeTOPIC_RECOMMEND일 경우, 특정 토픽에 대한 질문을 원할 때 사용하는 토픽 이름 (선택 사항)
json
{
  "roomCode": "a1b2c3d4",
  "type": "MANITTO"
}
json
{
  "roomCode": "a1b2c3d4",
  "type": "TOPIC_RECOMMEND",
  "topicName": "영화"
}

게임 목록 요청

  • Destination: /app/room/{roomCode}/game-list
  • PathVariable: roomCode (String)
  • 설명: 선택 가능한 게임 목록을 요청합니다. 방장만 호출할 수 있습니다.

Server → Client

게임 목록 구독

  • Topic: /topic/game-list/{roomCode}
  • 설명: game-list 요청 시, 방장에게 선택 가능한 게임 목록을 전송합니다.

Payload: GameCategory[]

필드타입설명
statusString응답 상태 ("SUCCESS")
dataString[]게임 카테고리 목록
messageString응답 메시지
json
{
  "status": "SUCCESS",
  "data": [
    "MANITTO",
    "RANDOM_ROULETTE",
    "TOPIC_RECOMMEND"
  ],
  "message": "게임 리스트를 정상적으로 전송했습니다."
}

게임 결과 구독

start-game 요청 시, 해당 게임의 결과를 수신합니다. 게임 종류에 따라 수신하는 Topic과 Payload가 다릅니다.

마니또 (MANITTO) 결과

  • Topic: /user/queue/game-result (Unicast)
  • 설명: 마니또 게임 결과로, 각 참여자는 자신이 지켜줘야 할 마니또가 누구인지 개인적으로 메시지를 받습니다.

Payload: String - 내가 지켜줘야 할 마니또의 이름

json
{
  "status": "SUCCESS",
  "data": "김철수",
  "message": "게임 결과를 정상적으로 전송했습니다."
}

랜덤 룰렛 (RANDOM_ROULETTE) 결과

  • Topic: /topic/game-result/{roomCode} (Broadcast)
  • 설명: 랜덤으로 선택된 참여자 1명과, 그 참여자의 관심사 토픽에서 파생된 질문 1개를 모든 참여자에게 전송합니다.

Payload: UserWithQuestion

필드타입설명
data.userNameString선택된 사용자 이름
data.questionObject질문 정보
data.question.contentString질문 내용
json
{
  "status": "SUCCESS",
  "data": {
    "userName": "홍길동",
    "question": {
      "content": "가장 기억에 남는 여행지는 어디인가요?"
    }
  },
  "message": "게임 결과를 정상적으로 전송했습니다."
}

토픽 추천 (TOPIC_RECOMMEND) 결과

  • Topic: /topic/game-result/{roomCode} (Broadcast)
  • 설명: 요청 시 topicName이 있었는지 여부에 따라 다른 정보를 모든 참여자에게 전송합니다.
    • topicName이 없는 경우: 방 참여자들의 관심사를 기반으로 집계된 주요 토픽들과, 가장 연관성이 높은 토픽에 대한 추천 질문 목록을 반환합니다.
    • topicName이 있는 경우: 해당 토픽과 관련된 추천 질문 목록을 반환합니다.

Payload: TopicsWithQuestions 또는 Question[]

필드타입설명
data.topicsTopic[]추천 토픽 목록 (topicName 없을 시)
data.topics[].nameString토픽 이름
data.questionsQuestion[]추천 질문 목록
data.questions[].contentString질문 내용
json
{
  "status": "SUCCESS",
  "data": {
    "topics": [
      { "name": "여행" },
      { "name": "음악" }
    ],
    "questions": [
      { "content": "가장 기억에 남는 여행지는 어디인가요?" },
      { "content": "여행지에서 겪었던 재미있는 에피소드가 있나요?" }
    ]
  },
  "message": "게임 결과를 정상적으로 전송했습니다."
}
json
{
  "status": "SUCCESS",
  "data": [
    { "content": "최근에 본 영화 중 가장 인상 깊었던 것은 무엇인가요?" },
    { "content": "인생 영화를 3편 꼽는다면?" }
  ],
  "message": "게임 결과를 정상적으로 전송했습니다."
}