> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Obter estatísticas baseadas em eventos

> Código de exemplo da XSAPI para ler estatísticas baseadas em eventos do XBOX Live, incluindo consultas em lote entre usuários e SCIDs para minimizar chamadas de serviço.

Este tópico fornece código de exemplo para obter estatísticas baseadas em eventos.

As APIs expõem vários níveis de processamento em lote para obter estatísticas baseadas em eventos.
A prática recomendada é fazer o menor número possível de chamadas usando a API em lote que atenda às suas necessidades.

Este tópico aborda o seguinte:

* [Obter uma única estatística para um único usuário e um único SCID](#ID4EM1)
* [Obter várias estatísticas para um único usuário e um único SCID](#ID4EM2)
* [Obter várias estatísticas para vários usuários e um único SCID](#ID4EM3)
* [Obter várias estatísticas para vários usuários em vários SCIDs](#ID4EM4)

Você também pode [assinar alterações de estatísticas](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-handling-eb-stat-change.md).

## Obter uma única estatística para um único usuário e um único SCID

O código de exemplo a seguir mostra como ler uma única estatística de usuário.

#### API C simples

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblUserStatisticsGetSingleUserStatisticResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblUserStatisticsResult* result{};

        hr = XblUserStatisticsGetSingleUserStatisticResult(asyncBlock, resultSize, buffer.data(), &result, nullptr);

        if (SUCCEEDED(hr) && result->serviceConfigStatisticsCount > 0 && result->serviceConfigStatistics->statisticsCount > 0)
        {
            int64_t userStatValue = atoll(result->serviceConfigStatistics[0].statistics[0].value);
            // You can now show or store userStatValue.
        }
    }
};

HRESULT hr = XblUserStatisticsGetSingleUserStatisticAsync(
    xboxLiveContext,
    xboxUserId,
    scid,
    statisticName.c_str(),
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*.
    asyncBlock.release();
}
```

Para obter mais informações, veja o seguinte:

* [XAsyncBlock](https://docs.xbox.com/pt-BR/reference/system/xasync/structs/xasyncblock.md)
* [XblUserStatisticsGetSingleUserStatisticAsync](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticasync.md)
* [XblUserStatisticsGetSingleUserStatisticResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticresult.md)
* [XblUserStatisticsGetSingleUserStatisticResultSize](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticresultsize.md)
* [XblUserStatisticsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xbluserstatisticsresult.md)

[Voltar ao início deste tópico.](#top)

## Obter várias estatísticas para um único usuário e um único SCID

O código de exemplo a seguir mostra como ler várias estatísticas de um único usuário em uma única chamada HTTP.

#### API C simples

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblUserStatisticsGetSingleUserStatisticsResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblUserStatisticsResult* results{};

        hr = XblUserStatisticsGetSingleUserStatisticsResult(asyncBlock, resultSize, buffer.data(), &results, nullptr);
        if (SUCCEEDED(hr))
        {
            // You can now use the XblUserStatisticsResult array in results.
        }
    }

};

const char* statisticNames[2] = {};
statisticNames[0] = statisticName1.c_str();
statisticNames[1] = statisticName2.c_str();

HRESULT hr = XblUserStatisticsGetSingleUserStatisticsAsync(
    xboxLiveContext,
    xboxUserId,
    scid,
    statisticNames, 2, 
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*.
    asyncBlock.release();
}

```

Para obter mais informações, veja o seguinte:

* [XAsyncBlock](https://docs.xbox.com/pt-BR/reference/system/xasync/structs/xasyncblock.md)
* [XblUserStatisticsGetSingleUserStatisticAsync](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticasync.md)
* [XblUserStatisticsGetSingleUserStatisticResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticresult.md)
* [XblUserStatisticsGetSingleUserStatisticResultSize](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetsingleuserstatisticresultsize.md)
* [XblUserStatisticsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xbluserstatisticsresult.md)

[Voltar ao início deste tópico.](#top)

## Obter várias estatísticas para vários usuários e um único SCID

O código de exemplo a seguir mostra como ler várias estatísticas de vários usuários em uma única chamada HTTP.

#### API C simples

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblUserStatisticsGetMultipleUserStatisticsResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblUserStatisticsResult* results{};
        size_t resultsCount = 0;

        hr = XblUserStatisticsGetMultipleUserStatisticsResult(asyncBlock, resultSize, buffer.data(), &results, &resultsCount, nullptr);

        // Process results array to read the user stats data.
        for (size_t iResult = 0; iResult < resultsCount; iResult++)
        {
            LogToFile("%d", results[iResult].xboxUserId);
            for (size_t iScid = 0; iScid < results[iResult].serviceConfigStatisticsCount; iScid++)
            {
                LogToFile("SCID: %s", results[iResult].serviceConfigStatistics[iScid].serviceConfigurationId);
                for (size_t iStat = 0; iStat < results[iResult].serviceConfigStatistics[iScid].statisticsCount; iStat++)
                {
                    LogToFile("Stat %d: name:%s value:%s type:%s", iResult,
                        results[iResult].serviceConfigStatistics[iScid].statistics[iStat].statisticName,
                        results[iResult].serviceConfigStatistics[iScid].statistics[iStat].value,
                        results[iResult].serviceConfigStatistics[iScid].statistics[iStat].statisticType );
                }
            }
        }
    }

};

const char* statisticNames[2] = {};
statisticNames[0] = statisticName1.c_str();
statisticNames[1] = statisticName2.c_str();

uint64_t xuids[2] = {};
xuids[0] = xuid1;
xuids[1] = xuid2;

HRESULT hr = XblUserStatisticsGetMultipleUserStatisticsAsync(
    xboxLiveContext,
    xuids, 2,
    scid,
    statisticNames, 2,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*.
    asyncBlock.release();
}
```

Para obter mais informações, veja o seguinte:

* [XAsyncBlock](https://docs.xbox.com/pt-BR/reference/system/xasync/structs/xasyncblock.md)
* [XblUserStatisticsGetMultipleUserStatisticsAsync](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsasync.md)
* [XblUserStatisticsGetMultipleUserStatisticsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsresult.md)
* [XblUserStatisticsGetMultipleUserStatisticsResultSize](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsresultsize.md)
* [XblUserStatisticsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xbluserstatisticsresult.md)

[Voltar ao início deste tópico.](#top)

## Obter várias estatísticas para vários usuários em vários SCIDs

O código de exemplo a seguir mostra como usar a XBOX Services API (XSAPI) para ler várias estatísticas de uma única configuração de serviço para vários usuários usando apenas uma chamada.

#### API C simples

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblUserStatisticsResult* results{};
        size_t resultsCount = 0;

        hr = XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsResult(asyncBlock, resultSize, buffer.data(), &results, &resultsCount, nullptr);

        if (SUCCEEDED(hr))
        {
            for (size_t i = 0; i < resultsCount; i++)
            {
                // Log results.
                std::stringstream stream;
                stream << "XUID: " << results[i].xboxUserId << std::endl;;

                for (size_t j = 0; j < results[i].serviceConfigStatisticsCount; j++)
                {
                    stream << " " << results[i].serviceConfigStatistics[j].serviceConfigurationId << ": " << std::endl;
                    for (size_t k = 0; k < results[i].serviceConfigStatistics[j].statisticsCount; k++)
                    {
                        stream << " " << results[i].serviceConfigStatistics[j].statistics[k].statisticName << "=" << results[i].serviceConfigStatistics[j].statistics[k].value << std::endl;
                    }
                }
            }
        }
    }

};

const char* requestedStatsNames1[2] = {};
requestedStatsNames1[0] = statisticName1.c_str();
requestedStatsNames1[1] = statisticName2.c_str();

XblRequestedStatistics requestedStats[1] = {};
pal::strcpy(requestedStats[0].serviceConfigurationId, sizeof(XblRequestedStatistics::serviceConfigurationId), scid);
requestedStats[0].statistics = requestedStatsNames1;
requestedStats[0].statisticsCount = 2;

uint64_t xuids[2] = {};
xuids[0] = xuid1;
xuids[1] = xuid2;
    
HRESULT hr = XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsAsync(
    xboxLiveContext,
    xuids, 2,
    requestedStats, 1,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*.
    asyncBlock.release();
}
```

Para obter mais informações, veja o seguinte:

* [XAsyncBlock](https://docs.xbox.com/pt-BR/reference/system/xasync/structs/xasyncblock.md)
* [XblRequestedStatistics](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xblrequestedstatistics.md)
* [XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsAsync](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsformultipleserviceconfigurationsasync.md)
* [XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsformultipleserviceconfigurationsresult.md)
* [XblUserStatisticsGetMultipleUserStatisticsForMultipleServiceConfigurationsResultSize](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsgetmultipleuserstatisticsformultipleserviceconfigurationsresultsize.md)
* [XblUserStatisticsResult](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xbluserstatisticsresult.md)

## Veja também

[Enviar um evento](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/events/how-to/live-sending-an-event.md)
[Cabeçalho user\_statistics\_c](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/user_statistics_c_members.md)

[Voltar ao início deste tópico.](#top)


## Related topics

- [Código de exemplo de estatísticas e leaderboards baseados em eventos (conteúdo)](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [Estatísticas baseadas em eventos vs. estatísticas gerenciadas pelo título](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [Tratar uma alteração de estatística baseada em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-handling-eb-stat-change.md)
- [Configuração no portal de estatísticas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-stats-eb-portal.md)
- [Visão geral das estatísticas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/live-stats-eb-overview.md)
