TIL

Tower Defense Online Project 트러블 슈팅 - 5

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

게임 종료 후 인터벌 매니저가 남아 발생하는 오류

게임이 끝나도 인터벌 매니저를 종료하지 않아서 그랬다.

따라서 clearAll을 추가함.

 

endGameHandler.js

const user = gameSession.getUser(socket.uuid);
const intervalManager = user.getIntervalManager();
intervalManager.clearAll(); // 인터벌 메니저 클리어

 

그래도 동일하게 오류가 발생했다.

 

나가는 사람은 두 사람인데 한 사람이 일방적으로 세션을 먼저 종료하고 나갔기 때문에

마지막에 문닫는 사람이 게임 세션을 종료시켜야함.

const user = gameSession.getUser(socket.uuid);
const intervalManager = user.getIntervalManager();
intervalManager.clearAll();
gameSession.removeUser(socket); // 게임세션에서 유저 제거

// 게임 세션에 남은 사람이 없다면 게임 세션을 제거
if (!gameSession.users) {
  removeGameSession(socket.id);

클라이언트 종료시 인터벌을 찾는 문제 (onEnd)

게임 한판이 끝난뒤 클라이언트 종료시 게임세션이 삭제되지 않는 문제.

!gameSession.users은 false가 아니다 파이썬이랑 헷갈렸다.

 

endGame.handler.js

   // 게임 세션에 남은 사람이 없다면 게임 세션을 제거
    console.log(gameSession.users);
    if (!gameSession.users.length) { // length로 해야됐다. 파이썬이랑 햇갈림.
      removeGameSession(socket.id);
      console.log(socket.id, '세션이 제거됐습니다.');
    }

 

사실 위의 내용중에서 gameSession의 users가 빈 [] 배열이면 애초에 비어있는 값이기 때문에 바이너리로 표현하면 0이다. 

0은 false를 뜻하고 그럼 true를 반환하기 때문에 문제 없는 코드이다.

하지만 여기서 제대로 삭제하지 않고 남아 있거나 무언가 잘못 넣은게 분명하다.