웹소켓 메시지 명세서 - boostcampwm-2024/web08-BooQuiz GitHub Wiki

클라이언트 → 서버 메시지

  1. start 이벤트

    • 용도: 클라이언트가 퀴즈를 시작하고 싶을 때 사용.

    • 송신 데이터: 없음

      {
        "event": "start",
      }
      
    • 서버 응답 데이터:

      {
        "event": "start",
        "data": "OK"
      }
      
  2. submit 이벤트

    • 용도: 클라이언트가 퀴즈의 답을 제출할 때 사용.

    • 송신 데이터: quizSubmit 객체

      {
        "event": "submit",
        "data": {
          index: 0;
          answer: "abc";
          submittedAt: 172392390;
        }
      }
      
    • 서버 응답 데이터:

      {
        "event": "submit",
        "data": "OK"
      }
      

서버 → 클라이언트 메시지

  1. nextQuiz 이벤트

    • 용도: 새로운 퀴즈를 클라이언트에 전달.
    • 송신 데이터: 다음 퀴즈 정보 (nextQuiz)
      • 데이터 형식

        interface CurrentQuizDto {
            readonly question: string;
            readonly stage: 'LOBBY' | 'WAITING' | 'IN_PROGRESS' | 'COMPLETED' | 'RESULT';
            readonly currentIndex: number;
            readonly startTime: number;
            readonly deadlineTime: number;
        }
        
      • 예시

        {
          "event": "nextQuiz",
          "data": {
              stage: "WAITING",
              question: "질문1",
              currentIndex: 0,
              playTime: 3000,
              startTime: 172392390,
              deadlineTime: 172395390,
           }
        }
        
  2. finish 이벤트

    • 용도: 퀴즈가 더 이상 없을 때 전송.
    • 송신 데이터: 없음
      • 예시

        {
          "event": "finish"
        }
        
  3. quizTimeOut 이벤트

    • 용도: 클라이언트가 주어진 시간 내에 답을 제출하지 않은 경우.
    • 송신 데이터: 없음
      • 예시

        {
          "event": "quizTimeOut"
        }
        
  4. summary 이벤트

    • 용도: 퀴즈 종료 후 클라이언트에게 최종 결과를 전달.
    • 송신 데이터: 요약 결과 (summaryResult)
      • 데이터 형식

        interface QuizResultSummaryDto {
            score: number;
            submits: SubmittedQuiz[];
            quizzes: Quiz[];
        }
        
      • 예시

        {
          "event": "summary",
          "data": {
            score: 0,
            submits: [
        	    {
        	      index: 0,
        	      answer: "제출1",
        	      summitedAt: 172392390,
        	      receivedAt: 172392390
        	    }
              ],
              quizzes: [
        	    {
        	      quiestion: "문제1",
        	      answer: "답변1",
        	      playTime: "30000"
        	    }
              ],
            }
        }