2024/11/12 5

Tower Defense Online Project 트러블 슈팅 - 5

게임 종료 후 인터벌 매니저가 남아 발생하는 오류게임이 끝나도 인터벌 매니저를 종료하지 않아서 그랬다.따라서 clearAll을 추가함. endGameHandler.jsconst user = gameSession.getUser(socket.uuid);const intervalManager = user.getIntervalManager();intervalManager.clearAll(); // 인터벌 메니저 클리어 그래도 동일하게 오류가 발생했다. 나가는 사람은 두 사람인데 한 사람이 일방적으로 세션을 먼저 종료하고 나갔기 때문에마지막에 문닫는 사람이 게임 세션을 종료시켜야함.const user = gameSession.getUser(socket.uuid);const intervalManager = user..

TIL 2024.11.12

Tower Defense Online Project 트러블 슈팅 - 4

한판 한 뒤 끝내면 서버 에러socket.id = 게임 세션 ID (애당초 socket.id에 무언갈 담으려한 우리의 잘못 나중에 코드 보고 놀란 우리 모두들)게임 세션 id를 가지고 있는 경우에 onEnd 이벤트가 발생하면 상태동기화를 해제하고 게임세션을 제거하려고함. -> 이 기능이 오류남.게임을 한판 한 경우 게임 세션 ID가 남아 있어 상태동기화 해제 및 게임세션 제거 동작을 하기 때문에 오류가 발생. endGame.handler.js에서 게임이 끝났을 때 소켓에 저장된 세션ID를 없애려고했음. socket.id = null; // 세션ID 초기화 endGame.handler.js에서 게임이 끝났을 때 소켓에 저장된 세션ID를 없애려고했음, 하지만 클라이언트에게 특별히 응답을 주는 내용이 없기 때..

TIL 2024.11.12

Tower Defense Online Project 트러블 슈팅 - 3

상대 게임 탈주시 상태동기화 인터벌이 날뛰는 문제user 클래스 안에서 intervalManager가 상태동기화를 일정 주기로 관리해주고 있음.현재 onEnd 이벤트에서 누군가 한명이 꺼지면 게임세션을 날려버림.그래서 남은 사람 intervalManager가 혼자 갈길을 잃은 것. 수정 전 onEnd 이벤트 한 명만 나가도 게임세션이 삭제됨.export const onEnd = (socket) => async () => { await removeUser(socket); // 매칭 돌려 유저 세션에 등록된 경우 유저 세션에서 제거 if (socket.id && ) { removeGameSession(socket.id); } else { } console.log('클라이언트 연결이 종료되었습니..

TIL 2024.11.12

Tower Defense Online Project 트러블 슈팅 - 2

MySQL, Redis가 연결이 안된 경우 계속 시도하는 문제레디스의 경우 연결이 실패한 경우 계속해서 연결 시도를 반복함.이 과정에서 무의미하게 로그가 계속해서 쌓임.DB연결에 실패한 경우 서버가 종료되도록 수정함. 해결 코드import dbPool from '../../db/database.js';import { config } from '../../config/config.js';export const testConnection = async () => { try { const [rows] = await dbPool.query('SELECT 1 + 1 AS solution'); console.log(`${config.database.database} 테스트 쿼리 결과:`, rows[0]..

TIL 2024.11.12

Tower Defense Online Project 트러블 슈팅 - 1

이상한 페이로드 출력  id를 꺼낸 경우C2SRegisterRequest { id: '\n\x04asdf\x12\x04asdf\x1A\x04asdf' } 제대로 파싱을 하지 못하는 에러가 발생함. test codeconsole.log("패킷 타입 : "+packetType) console.log("페이로드 길이 : "+payloadLength) switch (packetType) { case PACKET_TYPE.REGISTER_REQUEST: { const protoMessages = getProtoMessages(); const Register = protoMessages.common.C2SRegisterRequest; ..

TIL 2024.11.12