다음을 통해 공유


동적 청크 재정렬

타이틀 설치가 시작되면 설치 시스템은 개발자가 정의한 기본 순서에 따라 그룹으로 설치할 청크, 즉 파일 컬렉션을 받아 복사합니다. 타이틀 실행을 위한 청크가 설치된 후, 타이틀은 기본 설치 순서로 돌아가기 전에 설치 시스템이 처리할 나머지 청크의 설치를 사용자가 지정한 순서로 할 수 있도록 합니다.

이러한 방식으로 타이틀은 사용자의 여러 상황 또는 입력 유형에 응답하여 콘텐츠의 설치 순서를 제어할 수 있습니다. 이러한 동적 재배열은 사용자가 콘텐츠를 설치하기 위해 기다리는 시간을 최소화할 수 있으며 먼저 사용할 수 있는 것을 선택할 수 있습니다.

설치 순서가 변경된 후 청크가 게임 플레이에 필요하거나 타이틀에 필요하면 스트리밍 설치: 상태에 설명된 방법 중 하나를 사용하여 설치 상태를 모니터링할 수 있습니다.

청크가 설치되는 순서 변경

다음 코드 예제에서 게임은 사용자가 계속 플레이할 수 있게 만들기 위해 파일이 곧 필요합니다. 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; 
}