더북(TheBook)

LinkingContext를 사용하면 메모리 스트림 내에서 간단한 링킹 시스템을 사용할 수 있다.

void Write(const GameObject* inGameObject)
{
    uint32_t networkId = mLinkingContext->GetNetworkId(inGameObject);
    Write(networkId);
}

void Read(GameObject*& outGameObject)
{
    uint32_t networkId;
    Read(networkId);
    outGameObject = mLinkingContext->GetGameObject(networkId);
}

Note ≣

꼼꼼하게 구현하려면 링킹 시스템과 이를 사용하는 게임 코드 모두 객체가 (아직) 없는 네트워크 ID를 수신하는 경우를 처리할 줄 알아야 한다. 패킷이 중도에 누락되기도 하므로, 미처 수신하지 못한 객체를 참조하는 멤버 변수를 가진 객체를 게임이 받기도 한다. 여러 방법으로 처리할 수 있는데, 전체 객체를 무시하는 방법, 일단 받을 수 있는 건 모두 받아 참조 가능한 건 모두 연결시킨 뒤 빠진 걸 널(null)로 처리하는 방법 등이 있다. 좀 더 복잡한 시스템은 널로 연결한 멤버 변수를 추적하다가 나중에 그 네트워크 ID에 해당하는 객체가 수신되었을 때 복원시켜 주기도 한다. 게임의 설계에 따라 적절한 방법을 선택하면 될 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.