최대 1 분 소요

오늘 작업

  1. 몬스터 관련 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마다 호출하는 방법 중에 더 효율적인 방법을 찾아 보도록 하자.

태그:

카테고리:

업데이트: