Cómo funciona la máquina de estados
Game Saves usa una máquina de estados interna para coordinar las devoluciones de llamada de la interfaz de usuario con el ciclo de vida de la operación asincrónica. Cuando se activa una devolución de llamada de la interfaz de usuario, la operación asincrónica se pausa: la devolución de llamada deXAsyncBlock no se activa hasta que se resuelve la devolución de llamada. La máquina de estados no avanza hasta que el juego llama a la API de respuesta correspondiente o se cancela la operación asincrónica.
Esto significa que:
- Cada tipo de devolución de llamada tiene una API de respuesta correspondiente. Llame a la API de respuesta para indicar al sistema qué hacer a continuación.
- Las API de respuesta se pueden llamar dentro o fuera de la función de devolución de llamada.
- Si una acción de respuesta es
Retry, la operación se reintenta y puede desencadenar de nuevo la misma devolución de llamada. - La devolución de llamada de
XAsyncBlocksolo se activa una vez que la operación alcanza un estado terminal: éxito, cancelación o una alternativa sin conexión.
PFGameSaveFilesUiSyncFailedCallbackse activa con el error.- La devolución de llamada de
XAsyncBlockaún no se activa: la máquina de estados espera una respuesta. - Si el usuario selecciona
Retryy el reintento también falla, la devolución de llamada de error de sincronización se activa de nuevo. - Si el usuario selecciona
Cancel, la devolución de llamada deXAsyncBlockse activa conE_PF_GAMESAVE_USER_CANCELLED. - Si un reintento se realiza correctamente, la devolución de llamada de
XAsyncBlockse activa conS_OK.
Cuándo se desencadenan las devoluciones de llamada
Las devoluciones de llamada de la interfaz de usuario solo se activan durante dos operaciones asincrónicas:Registro de devoluciones de llamada
Registre todas las devoluciones de llamada antes de llamar aPFGameSaveFilesAddUserWithUiAsync o PFGameSaveFilesUploadWithUiAsync:
Referencia de devoluciones de llamada
Progreso
Notifica el progreso de la carga o descarga. UsePFGameSaveFilesUiProgressGetProgress dentro de la devolución de llamada para recuperar el PFGameSaveFilesSyncState actual, los bytes completados y los bytes totales.
Devolución de llamada: PFGameSaveFilesUiProgressCallback
API de respuesta: PFGameSaveFilesSetUiProgressResponse
La devolución de llamada de progreso no requiere una respuesta para continuar: la operación sigue avanzando por sí sola. Llame a la API de respuesta solo si el usuario quiere cancelar.
Estados de sincronización
La enumeraciónPFGameSaveFilesSyncState indica en qué fase se encuentra la operación:
Error de sincronización
Se activa cuando falla una operación de sincronización, por ejemplo debido a problemas de red o límites de frecuencia. Devolución de llamada:PFGameSaveFilesUiSyncFailedCallback
Parámetros: Recibe PFGameSaveFilesSyncState (la fase que falló) y HRESULT (el código de error).
API de respuesta: PFGameSaveFilesSetUiSyncFailedResponse
Para obtener más detalles sobre el comportamiento del modo sin conexión, consulte Modo sin conexión de Game Saves.
Contención de dispositivo activo
Se activa durantePFGameSaveFilesAddUserWithUiAsync cuando otro dispositivo ya es el dispositivo activo para este usuario. La devolución de llamada recibe estructuras PFGameSaveDescriptor de los datos de guardado locales y remotos, que incluyen nombres de dispositivo, marcas de tiempo y tamaños de guardado que puede mostrar para ayudar al usuario a decidir.
Devolución de llamada: PFGameSaveFilesUiActiveDeviceContentionCallback
API de respuesta: PFGameSaveFilesSetUiActiveDeviceContentionResponse
Para obtener más detalles sobre el comportamiento del dispositivo activo, consulte Cambios de dispositivo activo de Game Saves.
Conflicto
Se activa durantePFGameSaveFilesAddUserWithUiAsync cuando los datos de guardado locales y de la nube han divergido. La devolución de llamada recibe estructuras PFGameSaveDescriptor de los datos de guardado locales y remotos.
Devolución de llamada: PFGameSaveFilesUiConflictCallback
API de respuesta: PFGameSaveFilesSetUiConflictResponse
La resolución de conflictos se aplica a todo el guardado, no a archivos o carpetas individuales. Para obtener detalles sobre cómo se detectan los conflictos en el nivel de unidad atómica y se resuelven globalmente, consulte Conflictos de Game Saves.
Sin espacio de almacenamiento
Se activa durantePFGameSaveFilesAddUserWithUiAsync cuando el dispositivo local no tiene suficiente espacio en disco para descargar los datos de guardado desde la nube. La devolución de llamada recibe requiredBytes, que indica cuánto espacio se necesita.
Devolución de llamada: PFGameSaveFilesUiOutOfStorageCallback
API de respuesta: PFGameSaveFilesSetUiOutOfStorageResponse
Requisitos de plataforma
Para obtener detalles de implementación en Steam Deck, consulte la guía de implementación en Steam Deck.
