5. 채널 설계

channel

라이브, 채팅룸 리스트, 랭킹, 토너먼트 페이지는 실시간이 아닌 페이지 새로고침을 따로 만들어서 동기화를 하자.

  • 패시브 - 항상 구독중

  • 액티브 - 이벤트에 따라 구독, 취소

notification - 패시브

  • 다이렉트 메시지가 온 것을 수신하여 appearance가 업데이트되도록 한다.

  • 상대가 대전 신청을 받지 않거나 거절한 것을 수신하여 하단 게임 신청 뷰를 제거하도록 한다.

  • 상대가 대전 신청을 받은 것을 수신하여 게임뷰로 이동하도록 한다.

appearance - 패시브

  • 친구목록과 친구들의 로그인 상황을 표시하고 추적한다.

  • 온라인 접속 중인 유저들의 목록을 표시하고 추적한다.

directChat - 액티브

  • directMessage가 켜지면 구독한다.

  • message를 수신하면 업데이트한다.

  • message 입력시 웹소켓으로 발송한다.

  • directMessage가 꺼지면 구독을 해제한다.

groupChat - 액티브

  • groupChatRoom에 입장하면 구독한다.

  • message를 수신하면 업데이트한다.

  • message 입력시 웹소켓으로 발송한다.

  • groupChatRoom에서 다른 페이지로 이동하거나, 나갈 때 구독을 해제한다.

  • ban 당했음을 통보 받으면 구독을 해제하고 채팅 리스트로 이동한다.

  • 승급/강등 사실을 통보받으면 자신의 멤버십 상태(front)를 업데이트한다.

game - 액티브

  • 게임이 진행중인 동안 플레이어와 게스트가 구독한다.

  • 게임이 시작되면 시작 알림을 받는다. 시작 알림에는 사용할 룰, 양쪽 플레이어의 정보와 사이드(L/R)가 포함되어 있다.

  • me의 패들과 공이 충돌할 때 서버에 변화된 공의 성질이 담긴 메시지를 웹소켓으로 발송한다.

  • me의 패들을 움직일 때마다 패들의 위치가 담긴 메시지를 웹소켓으로 발송한다.

  • 실점시마다 웹소켓으로 메시지를 발송한다.

  • 서버에서 전송되어오는 메시지에 담긴 패들, 공, 점수의 정보를 프론트 모델에 업데이트한다.

  • 중계를 보고 있는 게스트들은 메시지로 수신되는 패들과 공의 정보를 지속적으로 갱신하며, 패들에 부딪히기 전까지의 공 변화만 엔진으로 돌린다.

  • 상대 플레이어가 게임중에 나갔음을 me가 수신하면 현재 게임 상황을 서버에 API로 보고한 후 구독을 해제, 이전 페이지로 돌아간다.

  • 게임이 정상적으로 종료되었다면 승리한 유저가 게임 상황을 API로 보고한다.

  • 한쪽 플레이어가 게임중에 나가거나 정상적으로 게임이 종료되었음을 수신하면, 승자가 보고한 최종 종료 상태를 뷰에 업데이트한 후 구독을 해제, 이전 페이지로 돌아간다.

War - 액티브

  • War가 progress 상태인 동안 양 진영 길드원 모두가 같은 room을 구독한다.

  • Status

    • 게임이 끝날 때 마다 war point 가 갱신된다.

    • 우리 길드가 war match를 미응답하면 미응답 수를 업데이트한다.

  • Battle

    • war time 이 아님

      • 대충 아무거나 뜬다.

    • war time 인데 대전신청이 이뤄지지 않고 있음

      • 대전 하기 버튼이 뜬다.

    • war time 인데 상대방 길드가 대전신청함

      • 대전 수락 버튼로 업데이트 된다.

      • 수락 가능 시간이 얼마나 남았는지 표시된다.

    • war time 인데 우리 길드원이 대전 신청함 (아직 상대 길드가 받아들이지 않음)

      • 우리 길드의 누군가가 전투를 준비하고 있습니다 가 뜬다.

    • war time 이고 대전중임

      • 중계 참여 버튼이 뜬다.

    • 상태가 변경됨을 수신하면 그에 맞게 뷰를 업데이트한다.

  • 대전 기록

    • 게임이 끝날 때마다 대전기록이 갱신된다.

  • 전쟁 종료시

    • 페이지를 보고 있는 상태에서 전쟁 종료를 수신할 경우 그에 맞게 뷰를 업데이트하고 구독을 해제한다.

Last updated