구문
매개 변수
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를 완료하여 보고하세요.
설명
이 처리기를 설치하려면 다른 두 스토리지 처리기와 함께 PFLocalStorageHooks 구조체의read 멤버에 설정하고 PFInitialize를 호출하기 전에 해당 구조체를 PFPlatformLocalStorageSetHandlers에 전달하세요. 세 처리기 중 하나라도 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은 한 번에 하나의 스토리지 작업을 실행하며, 현재 작업이 완료된 후에만 다음 작업을 시작합니다.
PlayFab은 async에서 XAsyncCancel을 호출하여 보류 중인 작업을 취소할 수 있습니다. 스토리지 작업을 취소할 수 있는 경우 공급자에서 XAsyncOp::Cancel을 처리하세요.
key 및 async 인수는 PlayFab이 소유하며 작업이 완료될 때까지 유효한 상태로 유지됩니다. context 인수에는 이 보장이 적용되지 않습니다.
