構文
パラメーター
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 構造体のclear メンバーに設定し、PFInitialize を呼び出す前に、その構造体を PFPlatformLocalStorageSetHandlers に渡します。3 つのハンドラーのいずれかが nullptr の場合、PFPlatformLocalStorageSetHandlers は E_INVALIDARG を返します。カスタム ハンドラーを設定しない場合、PlayFab は cstdio および std::fstream オブジェクトに基づく既定の実装を使用します。
クリアの結果と結果サイズ 0 を渡して、XAsyncComplete で async を完了します。
既定の実装は key で指定されたファイルの削除を試み、削除に失敗した場合 (たとえばファイルが存在しない場合) でも S_OK で完了します。ハンドラーでも、キーが存在しない場合は成功として扱ってください。
PFTraceEnableTraceToFile でファイルへのトレース出力が有効になっている場合、PFInitialize はトレース ファイルに対してこのハンドラーを呼び出し、操作が完了するまで待機してから処理を続行します。PFInitialize が待機している間も、操作が実行されるキューのワーク ポートは処理を進められる必要があります。そのワーク ポートを手動でディスパッチする場合は、別のスレッドからディスパッチしてください。完了ポートだけをディスパッチしても十分ではありません。
PlayFab は、ストレージ操作を開始したスレッド上でこのハンドラーをインラインで呼び出す場合があるため、どのスレッドで実行されるかに依存しないでください。async のキューは、PlayFab が PFLocalStorageHooks の queueHandle メンバーから派生させたキューです。queueHandle が nullptr の場合、PlayFab は PFInitialize に渡したバックグラウンド キューから、またはそのキューも nullptr だった場合はプロセス タスク キューから、キューを派生させます。派生したキューのワーク コールバックと完了コールバックは、どちらも派生元のキューのワーク ポートで実行されます。
PlayFab はストレージ操作を一度に 1 つずつ実行し、現在の操作が完了した後でのみ次の操作を開始します。
PlayFab は、async で XAsyncCancel を呼び出すことで、保留中の操作をキャンセルできます。ストレージ操作をキャンセルできる場合は、プロバイダーで XAsyncOp::Cancel を処理してください。
key 引数と async 引数は PlayFab が所有し、操作が完了するまで有効です。context 引数はこの保証の対象外です。
