> ## 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.

# Gérer un changement de statistique basée sur les événements

> Utilisez du code de l'API des services XBOX (XSAPI) pour suivre les changements de statistiques basées sur les événements et nettoyer les gestionnaires à l'aide du service Real-Time Activity (RTA).

Cette rubrique fournit un exemple de code pour gérer un changement de statistique basée sur les événements. Les exemples sont des fragments de code C++ qui utilisent l'API C plate de l'API des services XBOX (XSAPI). XSAPI transmet les mises à jour de statistiques au moyen du service Real-Time Activity (RTA) et gère les abonnements RTA pour vous.

## Avant de commencer

Les fragments de code partagent une même portée et supposent ce qui suit :

* `xboxLiveContext` est un `XblContextHandle` pour l'utilisateur connecté. Pour en créer un, appelez [XblContextCreateHandle](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/xbox_live_context_c/functions/xblcontextcreatehandle.md).
* `xboxUserId` est l'ID utilisateur XBOX (XUID) de type `uint64_t` du joueur dont vous voulez recevoir les mises à jour de statistiques.
* `scid` est un `const char*` qui contient l'ID de configuration de service (SCID) de votre titre.
* `TotalPuzzlesSolved` est un exemple de nom de statistique. Remplacez-le par le nom d'une statistique basée sur les événements configurée pour votre titre.
* `LogToScreen` est une fonction de journalisation de style `printf` de votre application.

**Pour recevoir des notifications sur les changements de statistiques basées sur les événements**

1. [Ajoutez un gestionnaire de changement de statistique.](#add-a-stat-changed-handler)
2. [Suivez les statistiques dont vous voulez recevoir les mises à jour.](#track-the-stats-that-you-want-updates-for)

**Pour nettoyer**

1. [Arrêtez le suivi des statistiques.](#stop-tracking-stats)
2. [Supprimez un gestionnaire de changement de statistique.](#remove-a-stat-changed-handler)

## Ajouter un gestionnaire de changement de statistique

Inscrivez un gestionnaire d'événements pour les notifications de changement de statistique à l'aide de l'exemple de code suivant.
Le gestionnaire d'événements reçoit un objet [XblStatisticChangeEventArgs](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/structs/xblstatisticchangeeventargs.md). Si *xboxLiveContext* ou le gestionnaire est null, `XblUserStatisticsAddStatisticChangedHandler` retourne 0 et n'inscrit pas le gestionnaire.

```cpp theme={null}
void* context{ nullptr };
XblFunctionContext statisticChangedFunctionContext = XblUserStatisticsAddStatisticChangedHandler(
    xboxLiveContext,
    [](XblStatisticChangeEventArgs eventArgs, void* context) 
    {
        // Handle stat change. 
        LogToScreen("Statistic changed callback: stat changed (%s = %s)",
            eventArgs.latestStatistic.statisticName, 
            eventArgs.latestStatistic.value); 
    },
    context
);

if (statisticChangedFunctionContext == 0)
{
    LogToScreen("XblUserStatisticsAddStatisticChangedHandler failed.");
}
```

## Suivre les statistiques dont vous voulez recevoir les mises à jour

Votre gestionnaire reçoit des mises à jour uniquement pour les statistiques que vous suivez. Appelez [XblUserStatisticsTrackStatistics](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticstrackstatistics.md) avec les utilisateurs et les noms de statistiques dont vous voulez recevoir les mises à jour. Vous pouvez modifier l'ensemble des statistiques suivies à tout moment, indépendamment de vos gestionnaires.

```cpp theme={null}
const char* statisticNames[] = { "TotalPuzzlesSolved" };

HRESULT hr = XblUserStatisticsTrackStatistics(
    xboxLiveContext,
    &xboxUserId,
    1,
    scid,
    statisticNames,
    _countof(statisticNames)
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsTrackStatistics failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

> [!NOTE]
>
> `XblUserStatisticsSubscribeToStatisticChange` et `XblUserStatisticsUnsubscribeFromStatisticChange` sont dépréciées. Elles fonctionnent toujours, mais elles seront supprimées dans une version future et, selon les paramètres de votre compilateur, leurs appels peuvent produire des avertissements de dépréciation. Utilisez plutôt `XblUserStatisticsTrackStatistics` et `XblUserStatisticsStopTrackingStatistics`.

## Arrêter le suivi des statistiques

Lorsque vous n'avez plus besoin des mises à jour de certaines statistiques, appelez [XblUserStatisticsStopTrackingStatistics](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingstatistics.md) avec les mêmes utilisateurs, le même SCID et les mêmes noms de statistiques que ceux que vous avez suivis.

```cpp theme={null}
hr = XblUserStatisticsStopTrackingStatistics(
    xboxLiveContext,
    &xboxUserId,
    1,
    scid,
    statisticNames,
    _countof(statisticNames)
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsStopTrackingStatistics failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

Pour arrêter plutôt les mises à jour de toutes les statistiques que vous suivez pour un ensemble d'utilisateurs, appelez [XblUserStatisticsStopTrackingUsers](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingusers.md) au lieu de `XblUserStatisticsStopTrackingStatistics`.

```cpp theme={null}
hr = XblUserStatisticsStopTrackingUsers(
    xboxLiveContext,
    &xboxUserId,
    1
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsStopTrackingUsers failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

XSAPI compte les requêtes de suivi. Si vous suivez la même statistique pour un utilisateur plus d'une fois, appelez une fonction d'arrêt du suivi le même nombre de fois pour arrêter les mises à jour.

## Supprimer un gestionnaire de changement de statistique

Supprimez un gestionnaire d'événements pour les notifications de changement de statistique à l'aide de l'exemple de code suivant.

```cpp theme={null}
XblUserStatisticsRemoveStatisticChangedHandler(
    xboxLiveContext,
    statisticChangedFunctionContext
);
```

## Voir aussi

* [Programmation du service RTA](https://docs.xbox.com/fr-CA/services/xbox-services/fundamentals/rta/how-to/live-programming-rta.md)
* [XblStatisticChangeEventArgs](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/structs/xblstatisticchangeeventargs.md)
* [XblUserStatisticsAddStatisticChangedHandler](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsaddstatisticchangedhandler.md)
* [XblUserStatisticsTrackStatistics](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticstrackstatistics.md)
* [XblUserStatisticsStopTrackingStatistics](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingstatistics.md)
* [XblUserStatisticsStopTrackingUsers](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingusers.md)
* [XblUserStatisticsRemoveStatisticChangedHandler](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsremovestatisticchangedhandler.md)


## Related topics

- [XblUserStatisticsAddStatisticChangedHandler](https://docs.xbox.com/fr-CA/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsaddstatisticchangedhandler.md)
- [Exemple de code pour les statistiques et classements basés sur les événements (contenu)](https://docs.xbox.com/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [Obtenir les statistiques basées sur les événements](https://docs.xbox.com/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-getting-eb-stat.md)
- [Premier aperçu des statistiques basées sur les événements](https://docs.xbox.com/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-stats-first-glance.md)
- [Écrire un événement pour alimenter une statistique basée sur les événements](https://docs.xbox.com/fr-CA/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-sending-eb-stat.md)
