게임 종료 후 인터벌 매니저가 남아 발생하는 오류
게임이 끝나도 인터벌 매니저를 종료하지 않아서 그랬다.
따라서 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를 반환하기 때문에 문제 없는 코드이다.
하지만 여기서 제대로 삭제하지 않고 남아 있거나 무언가 잘못 넣은게 분명하다.
'TIL' 카테고리의 다른 글
Class와 Structure의 차이점 및 사용 목적 (0) | 2024.11.26 |
---|---|
자원 전쟁 프로젝트 ProtoBuf 구분 기준 (1) | 2024.11.15 |
Tower Defense Online Project 트러블 슈팅 - 4 (0) | 2024.11.12 |
Tower Defense Online Project 트러블 슈팅 - 3 (0) | 2024.11.12 |
Tower Defense Online Project 트러블 슈팅 - 2 (0) | 2024.11.12 |