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