Partager via


XGameSaveContainerInfoCallback

Callback function for completing work after calling for data from XGameSave.

Syntax

bool XGameSaveContainerInfoCallback(  
         const XGameSaveContainerInfo* info,  
         void* context  
)  

Parameters

info   _In_
Type: XGameSaveContainerInfo*

XGameSaveContainerInfo passed from the call made to XGameSaveGetContainerInfo, XGameSaveEnumerateContainerInfo or XGameSaveEnumerateContainerInfoByName.

context   _In_opt_
Type: void*

The object passed into XGameSaveGetContainerInfo, XGameSaveEnumerateContainerInfo or XGameSaveEnumerateContainerInfoByName. The context pointer carries information about that object that may be needed in the callback function.

void Sample::_GetContainerInfo(const char* name) 
{ 
    XGameSaveContainerInfoCallback* callback = [](_In_ const XGameSaveContainerInfo* info, _In_ void* ctx) -> bool 
    { 
        auto self = reinterpret_cast<Sample*>(ctx); 
        self->_UpdateContainerList(info); 
        return true; 
    }; 
  
    HRESULT hr = XGameSaveGetContainerInfo(_provider, name, this, callback); 
    if (FAILED(hr)) 
    { 
        _HandleContainerErrors(name, hr); 
    } 
} 
 
void Sample::_UpdateContainerList(const XGameSaveContainerInfo* container) 
{ 
    //update UX 
    printf("%s - %s: %I64dbytes %d blobs\n", container->name, container->displayName, container->totalSize, container->blobCount); 
    if (strcmp(container->name, "AutoSave") == 0) 
    { 
        _ReadContainerBlobsAsync(container); 
    } 
} 
 
void Sample::_HandleContainerErrors(const char* name, HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_INVALID_CONTAINER_NAME: 
        printf("\'%s\' name is invalid for a container", name); 
        break; 
    case E_GS_USER_CANCELED: 
        printf("Container %s failed to sync user canceled hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_CONTAINER_NOT_IN_SYNC: 
    case E_GS_CONTAINER_SYNC_FAILED: 
        printf("Container %s failed to sync hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_HANDLE_EXPIRED: 
        printf("Container %s failed, re-initialize provider", name); 
        break; 
    case S_OK: 
        break; 
    default: 
        printf("Unknown Container error %s hr=0x%08X\n", name, hr); 
    } 
} 

Return value

Type: bool

Return false to stop enumeration.

Remarks

Passed as a parameter to the XGameSaveGetContainerInfo, XGameSaveEnumerateContainerInfo or XGameSaveEnumerateContainerInfoByName call. This function is used as a callback so that other processes may continue while XGameSave information is obtained. This callback pattern also allows for data to be returned in sections. Whether your callback function is declared separately or inline the function must have the same parameters and boolean return value as XGameSaveContainerInfoCallback.

Requirements

Header: XGameSave.h

Library: xgameruntime.lib

Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles

See also

XGameSave
XGameSaveGetContainerInfo
XGameSaveEnumerateContainerInfo
XGameSaveEnumerateContainerInfoByName Game save errors