Skip to content

Socket API 명세서

Front-line-dev edited this page Dec 16, 2020 · 51 revisions

용어 정리

플레이어 네이밍

  • Teller : 해당 턴의 주제를 정하는 사람 (스토리텔러, 이야기꾼)
  • Guesser : Teller의 주제를 보고 카드를 선택하고 최종 카드를 선택하는 사람
  • Player : Teller + Guesser (게임에 참여하고 있는 모든 사람)

화면 네이밍

  • scoreBoard : 오리가 징검다리 있는 테두리 화면

Socket API 명세서

11.23 오후 회의에서 작성
12.07 미완성된 부분 작성
12.08 guesser select | 오리 커서 수정

method desc
Emit 클라이언트에서 서버로 보내는 것
On 서버에서 클라이언트로 보내는 것

Main

방 코드의 유효성 체크

방 입장하기 전에 코드가 유효한지 체크

  • request
GET /rooms/{roomId}

방 개설

  • request
POST /rooms

response

Common(좌측, 우측탭)

On

event name args callback description
'send chat' { message: string } 받아온 채팅 데이터를 채팅창에 추가 플레이어가 채팅을 전송했을 때
'get players' { total: int, players: Array } 전체 인원 수와 플레이어의 정보를 좌측 탭에 렌더링 전체 플레이어의 정보
'get duck move' { x, y, playerID } 플레이어 오리커서 렌더 플레이어 커서
'game terminated' {} 게임을 즉시 종료하고 홈페이지로 이동 누군가 나가서 게임 진행이 불가능 해짐

Emit

event name args description
'send chat' { message: string } 나의 채팅 전송
'send duck move' {x, y} 마우스 클릭 or 이동 시

voice chat

PeerJS을 사용한 보이스 채팅에 관한 메세지

Emit

event name args callback description
'player connect voice' {} 보이스 채팅 입장 버튼을 눌렀을 때
'player disconnect voice' {} 보이스 채팅 나가기 버튼을 눌렀을 때

On

event name args callback description
'another voice connected' {} 내가 보이스 채팅에 접속 해 있는 상태에서
다른 플레이어가 보이스 채팅에 접속 했을 때
'voice disconnected' {} 다른 플레이어가 보이스 채팅에 나갔을 때

대기실

게임이 시작하기 전에 게임 시작을 기다리는 상태

players data type

players = [
    {
        playerID : string,
        nickname: string,
        color: string,
        isReady: boolean
    },
]

On

event name args callback description
'enter room' { nickname, color, roomID, players: [] } 플레이어 정보 저장 + 모든 플레이어 좌측에 렌더링 처음 룸에 입장했을 때
서버에서 랜덤한 닉네임과 색을 가져온다
'update player' { playerID, nickname, color } 업데이트된 플레이어 정보 업데이트 + 렌더 새로운 플레이어 참여 혹은 플레이어의 닉네임, 색 변화
'exit player' { playerID } 해당 플레이어 삭제 다른 플레이어 나감
'ready player' { playerID, isReady } 준비한 플레이어의 커서 보임 다른 플레이어의 준비 여부
'all ready' {} 5초 안에 게임이 시작된다는 메시지 렌더링 모든 플레이어 준비
'game start aborted' {} 중간에 타이머 멈추고 다시 대기 상태로 복귀 게임 시작 이벤트 중단

Emit

event name args description
'join player' {roomID: string} 나의 참가 (서버에서 room에 join 시켜줌)
'update player' {nickname: string, color: string} 내가 정보를 변경했을 때
'ready player' { isReady: boolean } 나의 준비 여부
'exit player' {} 나의 나감 (확실히 필요한지 모르겠음)

who is teller

여기서 모두가 카드를 받아야 된다. 매 라운드마다 6장을 모든 플레이어에게 전달해야 된다.

On

event name args callback description
'get round data' { tellerID, cards: Array, endTime } 내가 텔러인지 계산해서 isTeller 저장, 카드정보 저장 카드와 텔러에 관련된 정보 받아오기

teller select card

teller가 해당 라운드의 카드와 주제를 선택했을 때

Emit

event name args callback description
'send teller decision' { cardID: int, topic: string } Teller가 카드를 선택했을 때
'send teller picking' { cardID: int } Teller가 카드위에 마우스를 올렸을 때

On

event name args callback description
'teller select card' { cardID, topic, endTime } 텔러는 카드가 위로 올라가는 애니메이션 해당 플레이어에게만
시간초과 시를 대비
'teller decision' { topic, endTime } 다른 유저들은 카드 선택창으로 넘어간다 다른 플레이어에게만

guesser select card

gueeser가 topic에 맞는 카드를 선택하는 화면

Emit

event name args description
'send guesser decision' { cardID: int } guesser가 카드를 선택했을 때

On

event name args callback description
'guesser select card' { cardID } 카드가 위로 올라가는 애니메이션 해당 플레이어에게만 보냄
시간초과 시를 대비
'other guesser decision' { playerID } 선택된 카드가 떨어지는 애니메이션

guesser waiting

Teller가 카드를 고르는 것을 Guesser가 기다리고 있는 화면

Emit

없음

On

event name args callback description
'get teller decision' { topic: string } 주제를 state에 저장 주제 선정이 완료되었을 때
'get teller picking' { cardPosition: int } 현재 올라와 있는 Teller의 카드를 내리고 받은 Teller의 카드를 올림 Teller가 카드를 고르는 중

player waiting

Guesser들이 카드를 고르는 것을 모든 player가 기다리는 화면

Emit

없음

On

event name args callback description
'other guesser decision' { playerID } 선택된 카드가 떨어지는 애니메이션
'get all decisions' { cards: Array, endTime } 모든 플레이어의 카드가 정해졌을 때

mix card

On

없음

Emit

없음

discussion

On

event name args callback description
'end discussion' {skipped: boolean, endTime } 다음 신으로 이동 토론시간이 모두 경과됨

Emit

event name args description
'skip player' player가 스킵했다는 것을 서버에 알림

vote

players = [
  {
    socketID: '12345',
    submittedCardID: 1,
    votedCardID: 3,
    correctScore: 3,
    bonusScore: 2,
  },
]

On

event name args callback description
'end vote' { players: [위에 참조], endTime } 다음 신으로 이동 투표시간이 모두 경과됨.
현재 플레이어 포함된 정보

Emit

event name args callback description
'vote card' { cardID: int or null } 서버는 플레이어와 카드 매칭하여 저장 카드 선택

vote result

출제자
출제자 (0 < 정답자 < 맞추는 사람.length): +3  => 보너스

맞추는 사람
정답을 맞힌 경우 : +3점 => 정답
내 카드를 선택한 사람이 있는 경우 : +1 * (속인 사람의 수) => 보너스
모두 정답을 맞힌 경우 : 출제자를 제외한 전원 +2점 => 보너스
정답자가 1명도 없는 경우 : 출제자를 제외한 전원 +2점 => 보너스

On

event name args callback description
'end vote result' { round: number } 스코어 보드 씬으로 넘어간다.

Emit

없음

score board

On

event name args callback description
'get round data' { tellerID, cards: Array, endTime } tellerSelectScene으로 넘어감 승리 조건이 만족 되지 않아서 다음 텔러의 순서로 넘어감
'game end' { winnerID: soketID } 게임 엔드 씬으로 넘어감 승리 조건이 만족 되어서 게임이 끝남

Emit

없음

game end

On

없음

Emit

없음

  • game end 씬에서 다시하기 버튼을 누르면 waitingRoomScene으로 넘어가야 함
Clone this wiki locally