전체 글 81

자원 전쟁 프로젝트 ProtoBuf 구분 기준

우리가 서버에서 사용할 message를 모아둔 .proto 메시지를 SessionServer, GameServer, 그리고 공용으로 나누기 위해서는 각 서버의 역할과 메시지의 사용 목적에 따라 구분해야 합니다. 아래는 메시지를 나누는 기준과 구체적인 분류입니다.구분 기준SessionServer:사용자 인증, 토큰 관리, 대기실 매칭 등 사용자 관리와 세션 관련 로직을 처리.로그인, 회원가입, 토큰 갱신 등의 메시지가 여기에 해당.GameServer:게임 플레이와 관련된 실시간 데이터 동기화와 게임 상태 관리를 처리.플레이어 동기화, 게임 상태, 유닛 상태, 액션 관련 메시지가 여기에 해당.대기실에 관한것 부터 이제 GameServer에 해당.공용:SessionServer와 GameServer 모두에서 사..

TIL 2024.11.15

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