チャンクの動的な順序変更
タイトルのインストールが開始すると、インストール システムでは定義された既定の順序に従って、チャンク (グループとしてインストールされるファイルのコレクション) を取得してコピーします。 タイトルを実行するために必要なチャンクがインストールされた後の、残りのチャンクのインストール順序をタイトルでカスタマイズできます。このカスタマイズにより、既定のインストール順序に戻るまでその順序でインストール システムで処理されます。
これによって、タイトルではさまざまな状況やユーザーからの各種入力に応じてコンテンツの取得順序を制御できます。 動的な順序変更により、ユーザーがコンテンツのインストールを待機する時間を最小化でき、さらに、最初に使用可能にするものをユーザーが選択できるようになります。
インストール順序を変更した後で、ゲームプレイまたはタイトルが使用するためチャンクが必要な場合は、「ストリーミング インストール: 状態」で説明されているいずれかのメソッドを使用してインストールの状態を監視できます。
チャンクのインストール順序を変更する方法
次に示すコード例では、ユーザーがプレイを続行できるように、ゲームがファイルにすぐにアクセスできる必要があります。 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;
}