타이틀 관리 통계 작성
이 항목에서는 타이틀 관리 통계를 작성하는 방법을 보여 주는 예제 코드를 제공합니다.
지정된 타이틀 관리 통계만 업데이트
사용자 통계를 선택적으로 업데이트하는 XblTitleManagedStatsUpdateStatsAsync를 호출하여 업데이트하려는 지정된 통계를 보낼 수 있습니다. 지정된 통계는 이미 존재하는 경우에만 덮어씁니다.
XblTitleManagedStatsUpdateStatsAsync
호출에 지정되지 않은 모든 통계는 변경되지 않은 상태로 유지됩니다.
C API
std::vector<XblTitleManagedStatistic> stats{ s_svd->Stats() };
auto stat1 = std::find_if(stats.begin(), stats.end(), [](const XblTitleManagedStatistic& s)
{
return std::string{ "AddedStat" } == s.statisticName;
});
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = Data()->queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
HRESULT hr = XAsyncGetStatus(asyncBlock, false);
};
HRESULT hr = XblTitleManagedStatsUpdateStatsAsync(
Data()->xboxLiveContext,
&(*stat1),
1,
asyncBlock.get()
);
if (SUCCEEDED(hr))
{
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
// If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
asyncBlock.release();
}
참조
유지하려는 통계를 모두 작성하고 나머지를 삭제
유지하려는 타이틀 관리 통계만 작성하고 나머지는 삭제하려면 작성하려는 모든 통계에 XblTitleManagedStatsWriteAsync를 호출합니다. 호출에 포함되지 않은 통계는 모두 제거됩니다. 이 호출은 서비스의 마지막 통계 문서를 사용자가 설정한 값만 포함하는 새 통계 문서로 교체합니다.
C API
std::vector<XblTitleManagedStatistic> statList;
statList.push_back(XblTitleManagedStatistic{ "MyStatName1", XblTitleManagedStatType::Number, 200 });
statList.push_back(XblTitleManagedStatistic{ "MyStatName2", XblTitleManagedStatType::String, 0, "SomeValue" });
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
HRESULT hr = XAsyncGetStatus(asyncBlock, false);
};
HRESULT hr = XblTitleManagedStatsWriteAsync(
xboxLiveContext,
xboxUserId,
statList.data(), statList.size(),
asyncBlock.get());
if (SUCCEEDED(hr))
{
// The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
// If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
asyncBlock.release();
}
참조