構文
パラメーター
context _In_opt_ void*
PFPlatformLocalStorageSetHandlers に渡した PFLocalStorageHooks 構造体の context メンバー。nullptr にすることができます。PlayFab はこのポインターを所有しません。
key _In_z_ const char*
データを識別します。通常はファイル パスです。このキーの下に格納されたデータを読み取ります。
async _Inout_ XAsyncBlock*
読み取り操作の XAsyncBlock。
戻り値
型: HRESULTasync で非同期操作を開始した場合 (たとえば XAsyncBegin を使用して) は、S_OK を返します。ハンドラーがエラーの HRESULT を返すと、PlayFab はその HRESULT でストレージ操作を失敗させ、async の完了を待機しません。そのため、エラーを返すのは async で操作を開始していない場合だけにしてください。ストレージ操作自体の結果は、XAsyncComplete で async を完了することで報告します。
解説
このハンドラーをインストールするには、他の 2 つのストレージ ハンドラーと共に PFLocalStorageHooks 構造体のread メンバーに設定し、PFInitialize を呼び出す前に、その構造体を PFPlatformLocalStorageSetHandlers に渡します。3 つのハンドラーのいずれかが nullptr の場合、PFPlatformLocalStorageSetHandlers は E_INVALIDARG を返します。カスタム ハンドラーを設定しない場合、PlayFab は cstdio および std::fstream オブジェクトに基づく既定の実装を使用します。
読み取りの結果と、読み取ったデータのサイズ (バイト単位) を渡して、XAsyncComplete で async を完了します。その後、PlayFab はデータをコピーするために XAsyncGetResultSize と XAsyncGetResult を呼び出します。そのため、プロバイダーは XAsyncOp::GetResult を受け取ったときに、XAsyncProviderData の buffer メンバーにデータをコピーする必要があります。
key の下にデータが格納されていない場合、既定の実装は S_OK と結果サイズ 0 で操作を完了します。ハンドラーでも同じようにしてください。
PlayFab は、ストレージ操作を開始したスレッド上でこのハンドラーをインラインで呼び出す場合があるため、どのスレッドで実行されるかに依存しないでください。async のキューは、PlayFab が PFLocalStorageHooks の queueHandle メンバーから派生させたキューです。queueHandle が nullptr の場合、PlayFab は PFInitialize に渡したバックグラウンド キューから、またはそのキューも nullptr だった場合はプロセス タスク キューから、キューを派生させます。派生したキューのワーク コールバックと完了コールバックは、どちらも派生元のキューのワーク ポートで実行されます。
PlayFab はストレージ操作を一度に 1 つずつ実行し、現在の操作が完了した後でのみ次の操作を開始します。
PlayFab は、async で XAsyncCancel を呼び出すことで、保留中の操作をキャンセルできます。ストレージ操作をキャンセルできる場合は、プロバイダーで XAsyncOp::Cancel を処理してください。
key 引数と async 引数は PlayFab が所有し、操作が完了するまで有効です。context 引数はこの保証の対象外です。
