강동현

프로토콜 문서 작성

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