# 흐름 구성요소 ## StreamingManager -> dispatch ```javascript= // stream 상태 변경 // null을 넘기면 close // 출제자 변경시 새로운 출제자의 stream을 넘김 dispatch({type: 'setStream', payload: { stream }}); ``` ## GameManager -> dispatch ```javascript= /** * * 유저가 join/leave할 경우 view 업데이트 * 유저가 Ready/ReleaseReady할 경우 view 업데이트 * 특정 유저가 Streamer로 선정될 경우 view 업데이트 * * player = { * socketId * nickname, * score, * isReady, * type, * isLocalPlayer, * } **/ dispatch({type: 'setPlayerList', payload: { playerList }}); /** * quizCandidates = [ * quizCandidate, * quizCandidate, * quizCandidate, * ] * 미니버스에 이벤트 등록 필요(단어 클릭 이벤트) * 빈 배열로 전달하면 후보 단어를 화면에서 삭제한다. * */ // 게임이 시작되면 후보 단어를 선택하고 view 업데이트 dispatch({type: 'setQuizCandidates', payload: { quizCandidates }}); /** * quiz = string * */ // 출제자가 문제를 선택 하면 view 업데이트 dispatch({type: ' ', payload: { quiz }}); // 1초마다 view의 카운트다운을 변경 // 혹은 120으로 reset // 시간은 궁극적으로 서버로부터 받는다. dispatch({type: 'setTimer', payload: { time }}); /** * matching - 게임에 들어가기 전 방의 매칭을 기다리는 상태 * waiting - 게임전 모든 유저의 레디를 기다리는 상태 * selecting - 출제자가 단어를 선택하는 시간 * playing - 게임 중 * result - 세트가 끝나고 누적 점수를 보여주는 상태 * gameEnd - 방으로 돌아가기 버튼 가운데에 보여주기 * * waiting(unlimited) -> (ready) -> selecting(10s) -> playing(120s) -> result(5s) -> gameEnd * **/ dispatch({type: 'setGameStatus', payload: { gameStatus }}); ```` ## ChatManager -> dispatch ```javascript= /** * newChat = { socketId, nickname, chatContent, time } * **/ dispatch({type: 'addChat', payload: { newChat }}); dispatch({type: 'resetChatList'}); dispatch({type: 'speechBubble', payload: { newChat }}); ``` --- ```javascript= # Tempalate dispatch({type: '', payload: {}}) ```