PROTOCOL.md 2.15 KB

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를 보내면 됩니다.