Syntax
Parameters
context  _In_opt_ void*
The context member of the PFLocalStorageHooks structure that you passed to PFPlatformLocalStorageSetHandlers. Can be nullptr. PlayFab doesn’t own this pointer.
key  _In_z_ const char*
Identifies the data. Typically a file path. Clear the data stored under this key.
async  _Inout_ XAsyncBlock*
The XAsyncBlock for the clear operation.
Return value
Type: HRESULT ReturnS_OK if you started the asynchronous operation on async, for example with XAsyncBegin. If the handler returns a failure HRESULT, PlayFab fails the storage operation with that HRESULT and doesn’t wait for async to complete, so return a failure only when you haven’t started an operation on async. Report the result of the storage operation itself by completing async with XAsyncComplete.
Remarks
To install this handler, set it in theclear member of a PFLocalStorageHooks structure, together with the other two storage handlers, and pass the structure to PFPlatformLocalStorageSetHandlers before you call PFInitialize. PFPlatformLocalStorageSetHandlers returns E_INVALIDARG if any of the three handlers is nullptr. If you don’t set custom handlers, PlayFab uses a default implementation based on cstdio and std::fstream objects.
Complete async with XAsyncComplete, passing the result of the clear and a result size of 0.
The default implementation tries to delete the file named by key and completes with S_OK even if the deletion fails, for example because the file doesn’t exist. Treat a missing key as success in your handler too.
When trace output to a file is enabled with PFTraceEnableTraceToFile, PFInitialize calls this handler for the trace file and waits for the operation to complete before it continues. The work port of the queue that the operation runs on must make progress while PFInitialize waits. If you dispatch that work port manually, dispatch it from another thread; dispatching only the completion port isn’t enough.
PlayFab can call this handler inline on the thread that starts the storage operation, so don’t depend on which thread it runs on. The queue of async is a queue that PlayFab derives from the queueHandle member of PFLocalStorageHooks. If queueHandle is nullptr, PlayFab derives it from the background queue that you passed to PFInitialize, or from the process task queue if that queue was also nullptr. The work and completion callbacks of the derived queue both run on the work port of the queue that it’s derived from.
PlayFab runs one storage operation at a time and starts the next one only after the current one completes.
PlayFab can cancel a pending operation by calling XAsyncCancel on async. Handle XAsyncOp::Cancel in your provider if your storage operation can be canceled.
The key and async arguments are owned by PlayFab and stay valid until the operation completes. The context argument isn’t covered by this guarantee.
