[언리얼 C++] 온라인 서브시스템 데이터 타입
이 글에서는 온라인 서브시스템 전반에 걸쳐 사용되는 다양한 데이터 구조체에 대해 알아보도록 하겠습니다.
1. IOnlinePlatformData
IOnlinePlatformData는 인터페이스 클래스로, 그 안에 들어있는 데이터를 고려하지 않고 데이터를 전달할 수 있도록 해줍니다. 사람이 읽을 수 있는 버전의 데이터는 ToString() 함수를 통해 얻을 수 있으며, 그 이외에는 플랫폼 코드만 데이터에 직접 연산해야 할 것입니다.
다양한 구조체의 플랫폼 전용 표현을 종종 볼 수 있는데, 게임에서의 처리는 필요하지만 디테일을 노출시킬 필요는 없는 것을 말합니다. 이를 통해 게임이 데이터를 보유하다가 세부적인 이해 없이도 다른 플랫폼에 리플리케이트할 수 있습니다.
IOnlinePlatformData의 파생 클래스들은 아래와 같습니다.
- FUniqueNetId
- FSharedContentHandle
- FSessionInfo
IOnlinePlatformData 인터페이스 클래스가 제공해주는 함수는 아래와 같습니다.
/**
* 불투명 데이터의 원형 바이트 표현을 구합니다.
* 데이터는 플랫폼에 따라 달라지며, 직접 조작해서는 안됩니다.
* @return GetSize() 의 바이트 배열 크기
*/
virtual const uint8* GetBytes() const = 0;
/**
* 불투명 데이터 크기를 구합니다.
* @return 데이터 표현의 크기
*/
virtual int32 GetSize() const = 0;
/**
* 불투명 데이터의 유효성을 검사합니다.
* @return 제대로 형성된 데이터면 True, 아니면 False
*/
virtual bool IsValid() const = 0;
/**
* 불투명 데이터의 사람이 읽을 수 있는 표현을 구합니다.
* 로깅/디버깅 이외의 곳에 사용해서는 안됩니다.
* @return String 형 데이터
*/
virtual FString ToString() const = 0;
- FUniqueNetId
FUniqueNetId에는 프로파일 서비스 온라인 ID가 들어있으며, 개별 플레이어를 나타낼 수 있으며, 친구나 세션의 무언가를 나타낼 수 있습니다.
- FSharedContentHandle
FSharedContentHandle에는 프로파일 서비스 공유 파일 핸들이 들어있습니다. 이 핸들은 이곳저곳 전달이 가능하며, 적절한 권한만 주어진다면 어디에서도 공유 컨텐츠에 접근하는데 사용될 수 있습니다.
- FSessionInfo
FSessionInfo에는 세션의 플랫폼 전용 데이터가 들어있습니다. 그 데이터는 대부분 세션 식별자, 호스트 주소, 생성된 세션을 식별하고 접속하기 위한 기타 수단 등입니다.
- FEmsFile
FEmsFile은 주어진 다운로드 가능 파일 관련 메타데이터입니다. 이 구조체는 주어진 서비스에서 사용할 수 있는 데이터를 열거하는데 사용됩니다.
FEmsFile에는 다음과 같은 요소들이 들어있습니다.
- Hash - 주어진 파일 컨텐츠의 해시 값입니다.
- Filename - 다운로드된 파일명입니다.
- Logical name - 다운로드된 파일명에 매핑되는 이름입니다.
- File size - 파일의 크기입니다.
- FTitleFile
FTitleFile은 온라인 서비스에서 파일을 비동기식으로 다운로드하는데 사용되는 데이터를 담는 내부 구조체입니다.
FTitleFile에는 다음과 같은 요소들이 들어있습니다.
- Filename - 다운로드된 파일명입니다.
- Async state - 다운로드된 파일의 상태입니다.
- Data - 파일 컨텐츠가 들어있는 버퍼입니다.
- EOnlineAsyncTaskState
EOnlineAsyncTaskState는 비동기 작업에 가능한 상태를 나타내는 단순 Enum입니다.
/** 태스크 시작되지 않음 */
NotStarted,
/** 태스크 현재 처리중 */
InProgress,
/** 태스크 성공 */
Done,
/** 태스크 실패 */
Failed