TIL

Tower Defense Online Project 트러블 슈팅 - 4

추운날_너를_기다리며 2024. 11. 12. 10:11

한판 한 뒤 끝내면 서버 에러

socket.id = 게임 세션 ID (애당초 socket.id에 무언갈 담으려한 우리의 잘못 나중에 코드 보고 놀란 우리 모두들)

게임 세션 id를 가지고 있는 경우에 onEnd 이벤트가 발생하면 상태동기화를 해제하고 게임세션을 제거하려고함. -> 이 기능이 오류남.

게임을 한판 한 경우 게임 세션 ID가 남아 있어 상태동기화 해제 및 게임세션 제거 동작을 하기 때문에 오류가 발생.

 

endGame.handler.js에서 게임이 끝났을 때 소켓에 저장된 세션ID를 없애려고했음.

	socket.id = null; // 세션ID 초기화

 

endGame.handler.js에서 게임이 끝났을 때 소켓에 저장된 세션ID를 없애려고했음, 하지만 클라이언트에게 특별히 응답을 주는 내용이 없기 때문에 갱신이 안됨.

 

onEnd 이벤트

// 게임 한판 한뒤 종료하는 경우: socket.id가 이미 있음으로.
    const gameSession = getGameSession(socket.id);
    if (!gameSession) {
      console.log('클라이언트 연결이 종료되었습니다.');
      return;
    }

 

따라서 onEnd 이벤트에서 대응하기로함.

 

여기서 문제는 socket.id를 우리 마음대로 무언가를 넣거나 제거하거나 하니까 만약 socket을 저장해두는 형식이라면 나중에 내 socket이랑 비교할때 당연히 false만 뜬다. 이건  먼 훗날 우리가 겪어버린 문제... 따라서 다른 곳에 저장해서 사용하는 방식으로 했습니다.