-
Notifications
You must be signed in to change notification settings - Fork 7
Socket API 명세서
Front-line-dev edited this page Dec 16, 2020
·
51 revisions
- Teller : 해당 턴의 주제를 정하는 사람 (스토리텔러, 이야기꾼)
- Guesser : Teller의 주제를 보고 카드를 선택하고 최종 카드를 선택하는 사람
- Player : Teller + Guesser (게임에 참여하고 있는 모든 사람)
- scoreBoard : 오리가 징검다리 있는 테두리 화면
11.23 오후 회의에서 작성
12.07 미완성된 부분 작성
12.08 guesser select | 오리 커서 수정
method | desc |
---|---|
Emit | 클라이언트에서 서버로 보내는 것 |
On | 서버에서 클라이언트로 보내는 것 |
방 입장하기 전에 코드가 유효한지 체크
- request
GET /rooms/{roomId}
- request
POST /rooms
event name | args | callback | description |
---|---|---|---|
'send chat' | { message: string } | 받아온 채팅 데이터를 채팅창에 추가 | 플레이어가 채팅을 전송했을 때 |
'get players' | { total: int, players: Array } | 전체 인원 수와 플레이어의 정보를 좌측 탭에 렌더링 | 전체 플레이어의 정보 |
'get duck move' | { x, y, playerID } | 플레이어 오리커서 렌더 | 플레이어 커서 |
'game terminated' | {} | 게임을 즉시 종료하고 홈페이지로 이동 | 누군가 나가서 게임 진행이 불가능 해짐 |
event name | args | description |
---|---|---|
'send chat' | { message: string } | 나의 채팅 전송 |
'send duck move' | {x, y} | 마우스 클릭 or 이동 시 |
PeerJS을 사용한 보이스 채팅에 관한 메세지
event name | args | callback | description |
---|---|---|---|
'player connect voice' | {} | 보이스 채팅 입장 버튼을 눌렀을 때 | |
'player disconnect voice' | {} | 보이스 채팅 나가기 버튼을 눌렀을 때 |
event name | args | callback | description |
---|---|---|---|
'another voice connected' | {} | 내가 보이스 채팅에 접속 해 있는 상태에서 다른 플레이어가 보이스 채팅에 접속 했을 때 |
|
'voice disconnected' | {} | 다른 플레이어가 보이스 채팅에 나갔을 때 |
게임이 시작하기 전에 게임 시작을 기다리는 상태
players = [
{
playerID : string,
nickname: string,
color: string,
isReady: boolean
},
]
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' | {} | 중간에 타이머 멈추고 다시 대기 상태로 복귀 | 게임 시작 이벤트 중단 |
event name | args | description |
---|---|---|
'join player' | {roomID: string} | 나의 참가 (서버에서 room에 join 시켜줌) |
'update player' | {nickname: string, color: string} | 내가 정보를 변경했을 때 |
'ready player' | { isReady: boolean } | 나의 준비 여부 |
'exit player' | {} | 나의 나감 (확실히 필요한지 모르겠음) |
여기서 모두가 카드를 받아야 된다. 매 라운드마다 6장을 모든 플레이어에게 전달해야 된다.
event name | args | callback | description |
---|---|---|---|
'get round data' | { tellerID, cards: Array, endTime } | 내가 텔러인지 계산해서 isTeller 저장, 카드정보 저장 | 카드와 텔러에 관련된 정보 받아오기 |
teller가 해당 라운드의 카드와 주제를 선택했을 때
event name | args | callback | description |
---|---|---|---|
'send teller decision' | { cardID: int, topic: string } | Teller가 카드를 선택했을 때 | |
'send teller picking' | { cardID: int } | Teller가 카드위에 마우스를 올렸을 때 |
event name | args | callback | description |
---|---|---|---|
'teller select card' | { cardID, topic, endTime } | 텔러는 카드가 위로 올라가는 애니메이션 | 해당 플레이어에게만 시간초과 시를 대비 |
'teller decision' | { topic, endTime } | 다른 유저들은 카드 선택창으로 넘어간다 | 다른 플레이어에게만 |
gueeser가 topic에 맞는 카드를 선택하는 화면
event name | args | description |
---|---|---|
'send guesser decision' | { cardID: int } | guesser가 카드를 선택했을 때 |
event name | args | callback | description |
---|---|---|---|
'guesser select card' | { cardID } | 카드가 위로 올라가는 애니메이션 | 해당 플레이어에게만 보냄 시간초과 시를 대비 |
'other guesser decision' | { playerID } | 선택된 카드가 떨어지는 애니메이션 |
Teller가 카드를 고르는 것을 Guesser가 기다리고 있는 화면
없음
event name | args | callback | description |
---|---|---|---|
'get teller decision' | { topic: string } | 주제를 state에 저장 | 주제 선정이 완료되었을 때 |
'get teller picking' | { cardPosition: int } | 현재 올라와 있는 Teller의 카드를 내리고 받은 Teller의 카드를 올림 | Teller가 카드를 고르는 중 |
Guesser들이 카드를 고르는 것을 모든 player가 기다리는 화면
없음
event name | args | callback | description |
---|---|---|---|
'other guesser decision' | { playerID } | 선택된 카드가 떨어지는 애니메이션 | |
'get all decisions' | { cards: Array, endTime } | 모든 플레이어의 카드가 정해졌을 때 |
없음
없음
event name | args | callback | description |
---|---|---|---|
'end discussion' | {skipped: boolean, endTime } | 다음 신으로 이동 | 토론시간이 모두 경과됨 |
event name | args | description |
---|---|---|
'skip player' | player가 스킵했다는 것을 서버에 알림 |
players = [
{
socketID: '12345',
submittedCardID: 1,
votedCardID: 3,
correctScore: 3,
bonusScore: 2,
},
]
event name | args | callback | description |
---|---|---|---|
'end vote' | { players: [위에 참조], endTime } | 다음 신으로 이동 | 투표시간이 모두 경과됨. 현재 플레이어 포함된 정보 |
event name | args | callback | description |
---|---|---|---|
'vote card' | { cardID: int or null } | 서버는 플레이어와 카드 매칭하여 저장 | 카드 선택 |
출제자
출제자 (0 < 정답자 < 맞추는 사람.length): +3 => 보너스
맞추는 사람
정답을 맞힌 경우 : +3점 => 정답
내 카드를 선택한 사람이 있는 경우 : +1 * (속인 사람의 수) => 보너스
모두 정답을 맞힌 경우 : 출제자를 제외한 전원 +2점 => 보너스
정답자가 1명도 없는 경우 : 출제자를 제외한 전원 +2점 => 보너스
event name | args | callback | description |
---|---|---|---|
'end vote result' | { round: number } | 스코어 보드 씬으로 넘어간다. |
없음
event name | args | callback | description |
---|---|---|---|
'get round data' | { tellerID, cards: Array, endTime } | tellerSelectScene으로 넘어감 | 승리 조건이 만족 되지 않아서 다음 텔러의 순서로 넘어감 |
'game end' | { winnerID: soketID } | 게임 엔드 씬으로 넘어감 | 승리 조건이 만족 되어서 게임이 끝남 |
없음
없음
없음
- game end 씬에서 다시하기 버튼을 누르면 waitingRoomScene으로 넘어가야 함