2025-01-21 TIL
오늘 작업
- 몬스터 관련 handler 작업
packetType은 11번이며 클라이언트 쪽에서 몬스터를 스폰한다는 신호를 보냈을 때 어떻게 처리할 것인지에 관한 함수.
user는 userSession에서 socket을 통해 찾는 방식을 사용하고 있다. gameSession에서 찾아도 되겠지만 어차피 양쪽에 다 들어 있으니 더 얕은 위치에서 찾을 수 있는 값을 사용하도록 하자.
게임 세션의 업데이트 또한 할 수 있으니 다양한 방법으로 접근할 수 있어야 한다.
const spawnMonsterHandler = async ({ socket, sequence, payload }) => {
try {
const { } = payload;
const user = getUserBySocket(socket);
const gameSessions = getJoinGameSessions(user);
const monsterId = gameSessions.getSpawnMonsterCounter();
//1부터 5까지라면
const monsterNumber = Math.ceil(Math.random()*(5));
const monster = { monsterId , monsterNumber, level:gameSessions.monsterLevel };
user.addMonster(monster);
const spawnMonsterpayload = {
monsterId,
monsterNumber,
};
let packetType = PacketType.SPAWN_MONSTER_RESPONSE;
const spawnMonsterResponse = createResponse(packetType, spawnMonsterpayload, sequence);
socket.write(spawnMonsterResponse);
//상대한테 내 몬스터 나왔다고 보내기.
const enemyUser = getUserBySocket(user.getMatchingUsersocket());
const spawnEnemyMonsterNotificationpayload = {
monsterId,
monsterNumber,
}
packetType = PacketType.SPAWN_ENEMY_MONSTER_NOTIFICATION;
const spawnEnemyMonsterNotificationResponse = createResponse(packetType, spawnEnemyMonsterNotificationpayload, sequence);
enemyUser.socket.write(spawnEnemyMonsterNotificationResponse);
} catch (error) {
console.error(error);
}
};
다음 작업
S2CstateSyncNotification 관련 직렬화를 통해 클라이언트 쪽의 데이터를 관리할 필요가 있다.
몬스터가 사망하거나 했을 때마다 호출하는 방법과 서버 내부에서 update 함수를 돌려 frame마다 호출하는 방법 중에 더 효율적인 방법을 찾아 보도록 하자.