상태 머신 작동 방식
Game Saves는 UI 콜백을 비동기 작업 수명 주기와 조정하기 위해 내부 상태 머신을 사용합니다. UI 콜백이 실행되면 비동기 작업이 일시 중지됩니다 — 콜백이 해결될 때까지XAsyncBlock 콜백은 실행되지 않습니다. 게임이 해당 응답 API를 호출하거나 비동기 작업이 취소될 때까지 상태 머신은 진행되지 않습니다.
이는 다음을 의미합니다:
- 각 콜백 유형에는 해당하는 응답 API가 있습니다. 다음에 무엇을 할지 시스템에 알리려면 응답 API를 호출하세요.
- 응답 API는 콜백 함수 내부 또는 외부에서 호출할 수 있습니다.
- 응답 액션이
Retry인 경우 작업이 재시도되고 동일한 콜백을 다시 트리거할 수 있습니다. XAsyncBlock콜백은 작업이 최종 상태(성공, 취소 또는 오프라인 대체)에 도달한 후에만 실행됩니다.
PFGameSaveFilesUiSyncFailedCallback이 오류와 함께 실행됩니다.XAsyncBlock콜백은 아직 실행되지 않습니다 — 상태 머신이 응답을 기다립니다.- 사용자가
Retry를 선택하고 재시도도 실패하면 sync failed 콜백이 다시 실행됩니다. - 사용자가
Cancel을 선택하면XAsyncBlock콜백이E_PF_GAMESAVE_USER_CANCELLED로 실행됩니다. - 재시도가 성공하면
XAsyncBlock콜백이S_OK로 실행됩니다.
콜백이 트리거되는 시점
UI 콜백은 두 가지 비동기 작업 중에만 실행됩니다:콜백 등록
PFGameSaveFilesAddUserWithUiAsync 또는 PFGameSaveFilesUploadWithUiAsync를 호출하기 전에 모든 콜백을 등록하세요:
콜백 참조
Progress
업로드 또는 다운로드 진행 상황을 보고합니다. 콜백 내부에서PFGameSaveFilesUiProgressGetProgress를 사용하여 현재 PFGameSaveFilesSyncState, 완료된 바이트 및 전체 바이트를 검색합니다.
콜백: PFGameSaveFilesUiProgressCallback
응답 API: PFGameSaveFilesSetUiProgressResponse
진행 콜백은 계속 진행하기 위해 응답이 필요하지 않습니다 — 작업은 자체적으로 계속 진행됩니다. 사용자가 취소하려는 경우에만 응답 API를 호출하세요.
동기화 상태
PFGameSaveFilesSyncState 열거형은 작업이 어느 단계에 있는지를 나타냅니다:
Sync failed
예를 들어 네트워크 문제나 속도 제한으로 인해 동기화 작업이 실패할 때 실행됩니다. 콜백:PFGameSaveFilesUiSyncFailedCallback
매개변수: PFGameSaveFilesSyncState(실패한 단계)와 HRESULT(오류 코드)를 수신합니다.
응답 API: PFGameSaveFilesSetUiSyncFailedResponse
오프라인 모드 동작에 대한 자세한 내용은 Game Saves 오프라인 모드를 참조하세요.
Active device contention
다른 디바이스가 이미 이 사용자의 활성 디바이스인 경우PFGameSaveFilesAddUserWithUiAsync 중에 실행됩니다. 콜백은 로컬 및 원격 세이브 데이터 모두에 대한 PFGameSaveDescriptor 구조체를 수신하며, 사용자가 결정하는 데 도움이 되도록 표시할 수 있는 디바이스 이름, 타임스탬프 및 세이브 크기를 포함합니다.
콜백: PFGameSaveFilesUiActiveDeviceContentionCallback
응답 API: PFGameSaveFilesSetUiActiveDeviceContentionResponse
활성 디바이스 동작에 대한 자세한 내용은 Game Saves 활성 디바이스 변경을 참조하세요.
Conflict
로컬 및 클라우드 세이브 데이터가 갈라진 경우PFGameSaveFilesAddUserWithUiAsync 중에 실행됩니다. 콜백은 로컬 및 원격 세이브 데이터 모두에 대한 PFGameSaveDescriptor 구조체를 수신합니다.
콜백: PFGameSaveFilesUiConflictCallback
응답 API: PFGameSaveFilesSetUiConflictResponse
충돌 해결은 개별 파일이나 폴더가 아닌 전체 세이브에 적용됩니다. 원자적 단위 수준에서 충돌이 어떻게 감지되고 전역적으로 해결되는지에 대한 자세한 내용은 Game Saves 충돌을 참조하세요.
Out of storage
로컬 디바이스에 클라우드에서 세이브 데이터를 다운로드할 충분한 디스크 공간이 없는 경우PFGameSaveFilesAddUserWithUiAsync 중에 실행됩니다. 콜백은 얼마나 많은 공간이 필요한지 나타내는 requiredBytes를 수신합니다.
콜백: PFGameSaveFilesUiOutOfStorageCallback
응답 API: PFGameSaveFilesSetUiOutOfStorageResponse
플랫폼 요구 사항
Steam Deck 구현 세부 정보는 Steam Deck 구현 가이드를 참조하세요.
