동적 청크 재정렬
타이틀 설치가 시작되면 설치 시스템은 개발자가 정의한 기본 순서에 따라 그룹으로 설치할 청크, 즉 파일 컬렉션을 받아 복사합니다. 타이틀 실행을 위한 청크가 설치된 후, 타이틀은 기본 설치 순서로 돌아가기 전에 설치 시스템이 처리할 나머지 청크의 설치를 사용자가 지정한 순서로 할 수 있도록 합니다.
이러한 방식으로 타이틀은 사용자의 여러 상황 또는 입력 유형에 응답하여 콘텐츠의 설치 순서를 제어할 수 있습니다. 이러한 동적 재배열은 사용자가 콘텐츠를 설치하기 위해 기다리는 시간을 최소화할 수 있으며 먼저 사용할 수 있는 것을 선택할 수 있습니다.
설치 순서가 변경된 후 청크가 게임 플레이에 필요하거나 타이틀에 필요하면 스트리밍 설치: 상태에 설명된 방법 중 하나를 사용하여 설치 상태를 모니터링할 수 있습니다.
청크가 설치되는 순서 변경
다음 코드 예제에서 게임은 사용자가 계속 플레이할 수 있게 만들기 위해 파일이 곧 필요합니다. PrioritizeChunk 함수가 정의되어 청크의 현재 설치 상태를 확인합니다.
청크가 아직 설치되지 않은 경우 함수는 스트리밍 시스템에 먼저 청크를 설치하고 청크의 진행 상황을 설치 모니터로 반환하도록 요청합니다.
청크가 이미 설치되어 있으면 함수는 null 모니터를 반환합니다.
template<>
struct std::default_delete<XPackageInstallationMonitorHandle> {
typedef XPackageInstallationMonitorHandle pointer;
void operator()(XPackageInstallationMonitorHandle handle) const noexcept
{
XPackageCloseInstallationMonitorHandle(handle);
}
};
HRESULT PrioritizeChunk(uint32_t chunkId, XPackageInstallationMonitorHandle* monitor)
{
char id[PACKAGE_IDENTIFIER_MAX_LENGTH];
*monitor = nullptr;
RETURN_IF_FAILED(XPackageGetCurrentProcessPackageIdentifier(_countof(id), id));
XPackageChunkSelector selector;
selector.type = XPackageChunkSelectorType::Chunk;
selector.chunk = chunkId;
XPackageInstallationMonitorHandle temp;
RETURN_IF_FAILED(XPackageCreateInstallationMonitor(id, 1, &selector, 1000, queue, &temp));
std::unique_ptr<XPackageInstallationMonitorHandle> localMonitor(temp);
XPackageInstallationProgress progress;
XPackageGetInstallationProgress(localMonitor.get(), &progress);
if (!progress.completed)
{
RETURN_IF_FAILED(XPackageChangeChunkInstallOrder(id, 1, &selector));
*monitor = localMonitor.release();
}
return S_OK;
}