Protocol
서버와의 통신은 socket.io를 사용합니다.
모든 메세지 interface들은 server/message/types.ts
에 정의되어 있습니다.
클라이언트에서 emit
을 사용하여 전송한 모든 메세지에 대해 서버는 MessageResponse
로 처리 결과를 알립니다. 자세한 사항은 https://socket.io/docs/v4/emitting-events/ 의 Acknowledgements
항목을 참조하세요. 만약 요청에 대한 결과가 즉시 필요한 경우 MessageResponse.result
로 결과가 전달됩니다.
메세지 타입과 그에 대한 결과 타입은 server/message/types.ts
를 참고하세요.
로그인
서버에 LoginMessage
를 보냅니다. 아직 로그인 로직이 구현되지 않았으므로, 임의로 사용할 username
만을 포함하여 보내면 됩니다.
로비
로비에서는 모든 방 목록을 확인하고 접속할 수 있습니다. 서버에 RoomListRequestMessage
를 전송하면 RoomDescription[]
가 반환됩니다. 이 메세지는 모든 방에 관한 정보를 가지고 있습니다. 각 방은 고유한 uuid
값으로 구분됩니다.
특정한 방에 접속하기 위해서는 서버에 RoomJoinMessage
를 보내면 됩니다. 요청이 성공하면 RoomInfo
가 반환됩니다. RoomInfo
에는 본인을 제외한 다른 플레이어들의 정보만이 담겨 있습니다.
방
방에 접속중인 유저의 목록에 변화가 생기면, RoomUserUpdateMessage
가 수신됩니다. state
는 다음 3가지 값 중 하나의 값을 가집니다.
-
added
: 새로운 유저가 접속하였습니다. -
updated
: 기존 유저의 정보가 업데이트되었습니다. (아직 사용되지 않음) -
removed
: 유저가 방에서 퇴장하였습니다.
유저가 채팅을 입력했다면 RoomChatMessage
를 보내면 됩니다. 이 경우 오직 message
필드만 채워 보내면 됩니다. 다른 사람이 채팅을 입력한 경우, RoomChatMessage
가 수신됩니다. 자신이 보낸 채팅에 대해서는 RoomChatMessage
가 수신되지 않으므로 이 경우 오프라인으로 메세지를 추가하여야 합니다.
방을 나가고 싶으면 RoomLeaveMessage
를 보내면 됩니다.