강동현

프로토콜 문서 작성

1 +# Protocol
2 +
3 +서버와의 통신은 socket.io를 사용합니다.
4 +모든 메세지 interface들은 `server/message/types.ts`에 정의되어 있습니다.
5 +
6 +## 로그인
7 +
8 +서버에 `LoginMessage`를 보냅니다. 아직 로그인 로직이 구현되지 않았으므로, 임의로 사용할 `username`만을 포함하여 보내면 됩니다.
9 +
10 +## 로비
11 +
12 +로비에서는 모든 방 목록을 확인하고 접속할 수 있습니다. 로그인에 성공하면 서버에서 `RoomListMessage`가 전송됩니다. 이 메세지는 모든 방에 관한 정보를 가지고 있습니다. 각 방은 고유한 `uuid`값으로 구분됩니다.
13 +
14 +특정한 방에 접속하기 위해서는 서버에 `RoomJoinMessage`를 보내면 됩니다.
15 +
16 +### 방
17 +
18 +방 접속에 성공하면 `RoomInfoMessage`가 수신됩니다. 이 메세지는 현재 방에 접속 중인 모든 유저의 정보를 가져옵니다. 모든 유저는 고유한 `username`을 가지므로, 앞으로 모든 메세지는 유저의 `username`만이 전송됩니다.
19 +
20 +방에 접속중인 유저의 목록에 변화가 생기면, `RoomUserUpdateMessage`가 수신됩니다. `state`는 다음 3가지 값 중 하나의 값을 가집니다.
21 +
22 +- `added`: 새로운 유저가 접속하였습니다.
23 +- `updated`: 기존 유저의 정보가 업데이트되었습니다. (아직 사용되지 않음)
24 +- `removed`: 유저가 방에서 퇴장하였습니다.
25 +
26 +유저가 채팅을 입력했다면 `RoomChatMessage`를 보내면 됩니다. 이 경우 오직 `message` 필드만 채워 보내면 됩니다. 다른 사람이 채팅을 입력한 경우, `RoomChatMessage`가 수신됩니다. 자신이 보낸 채팅에 대해서는 `RoomChatMessage`가 수신되지 않으므로 이 경우 오프라인으로 메세지를 추가하여야 합니다.
27 +
28 +방을 나가고 싶으면 `RoomLeaveMessage`를 보내면 됩니다.