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

# Jouer en multijoueur avec des amis à l'aide de Multiplayer Manager

> Guide pas à pas d'utilisation de Multiplayer Manager pour initialiser une session de salon, envoyer des invitations XBOX Live et permettre à des amis de rejoindre une partie en cours.

<a id="top" />

Dans un scénario multijoueur simple, un joueur de votre jeu peut y jouer en ligne avec des amis. Cette rubrique décrit les étapes de base que vous devez implémenter pour prendre en charge ce scénario à l'aide de Multiplayer Manager.

## Étapes pour envoyer et accepter une invitation

Les étapes suivantes utilisent Multiplayer Manager pour envoyer une invitation à un ami d'un utilisateur afin que cet ami puisse rejoindre une partie en cours.

1. [Initialiser Multiplayer Manager](#initialize-multiplayer-manager)
2. [Créer la session de salon en ajoutant des utilisateurs locaux](#create-lobby)
3. [Envoyer des invitations à des amis](#send-invites)
4. [Accepter des invitations](#accept-invites)
5. [Rejoindre une session de jeu depuis le salon](#join-game)

Les étapes 1, 2, 3 et 5 sont effectuées sur l'appareil qui envoie l'invitation.
L'étape 4 est généralement déclenchée sur l'appareil de l'invité, après le lancement de l'application par activation de protocole.

Pour plus d'informations, consultez [Jouer à une partie avec des amis (organigramme)](/fr-CA/services/xbox-services/multiplayer/mpm/concepts/flowcharts/live-mpm-play-with-friends).

## Initialiser Multiplayer Manager <a id="initialize-multiplayer-manager" />

L'objet de session de salon est créé automatiquement lorsque Multiplayer Manager est initialisé avec un nom de modèle de session valide. Les modèles de session sont définis dans la configuration du service.

<Note>L'instance de session de salon n'est créée sur le service qu'une fois qu'un utilisateur a été ajouté.</Note>

#### API C plat

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerInitialize(lobbySessionTemplateName, queueUsedByMultiplayerManager);
```

Pour plus d'informations, consultez [XblMultiplayerManagerInitialize](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerinitialize).

[Revenir au début de cette rubrique.](#top)

## Créer la session de salon en ajoutant des utilisateurs locaux <a id="create-lobby" />

Ajoutez à la session de salon les utilisateurs des services XBOX connectés localement. Un nouveau salon est hébergé lorsque le premier utilisateur est ajouté. Tous les autres utilisateurs sont ajoutés au salon existant en tant qu'utilisateurs secondaires.

Multiplayer Manager publie le salon dans l'interpréteur de commandes pour que des amis puissent le rejoindre.
Vous ne pouvez envoyer des invitations, définir des propriétés de salon et accéder aux membres du salon via `lobby()` qu'après avoir ajouté l'utilisateur local.

Lorsqu'un utilisateur local rejoint le salon, nous vous recommandons de définir son adresse de connexion et ses propriétés personnalisées.

Vous devez répéter ce processus pour tous les utilisateurs connectés localement.

[Revenir au début de cette rubrique.](#top)

### Ajouter un seul utilisateur local

#### API C plat

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerLobbySessionAddLocalUser(xblUserHandle);

if (!SUCCEEDED(hr))
{
    // Handle failure.
}

// Set member connection address.
const char* connectionAddress = "1.1.1.1";
hr = XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress(
    xblUserHandle, connectionAddress, context);

if (!SUCCEEDED(hr))
{
    // Handle failure.
}

// Set custom member properties.
const char* propName = "Name";
const char* propValueJson = "{}";
hr = XblMultiplayerManagerLobbySessionSetProperties(propName, propValueJson, context);

if (!SUCCEEDED(hr))
{
    // Handle failure.
}
...
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XblMultiplayerManagerLobbySessionAddLocalUser](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionaddlocaluser)
* [XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetlocalmemberconnectionaddress)
* [XblMultiplayerManagerLobbySessionSetProperties](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetproperties)

[Revenir au début de cette rubrique.](#top)

### Ajouter plusieurs utilisateurs locaux

#### API C plat

```cpp theme={null}
std::vector<XblUserHandle> xblUsers;
for (XblUserHandle xblUserHandle : xblUsers)
{
    HRESULT hr = XblMultiplayerManagerLobbySessionAddLocalUser(xblUserHandle);

    if (!SUCCEEDED(hr))
    {
        // Handle failure.
    }

    // Set member connection address.
    const char* connectionAddress = "1.1.1.1";
    hr = XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress(
        xblUserHandle, connectionAddress, context);

    if (!SUCCEEDED(hr))
    {
        // Handle failure.
    }

    // Set custom member properties.
    const char* propName = "Name";
    const char* propValueJson = "{}";
    hr = XblMultiplayerManagerLobbySessionSetProperties(propName, propValueJson, context);
    ...
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XblMultiplayerManagerLobbySessionAddLocalUser](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionaddlocaluser)
* [XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetlocalmemberconnectionaddress)
* [XblMultiplayerManagerLobbySessionSetProperties](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetproperties)

Les modifications sont regroupées lors de l'appel suivant à [XblMultiplayerManagerDoWork](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork).
Multiplayer Manager déclenche un événement [XblMultiplayerEventType](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/enums/xblmultiplayereventtype)::UserAdded chaque fois qu'un utilisateur est ajouté à la session de salon.

Nous vous recommandons de vérifier le code d'erreur de l'événement pour savoir si l'utilisateur a bien été ajouté.
En cas d'échec, un message d'erreur fournit des détails sur les raisons de l'échec.

Multiplayer Manager effectue les opérations suivantes pour créer la session de salon en ajoutant des utilisateurs locaux.

* Inscription aux abonnements Real-Time Activity et multijoueurs auprès du service multijoueur des services XBOX.
* Création de la session de salon.
* Intégration de tous les joueurs locaux en tant que joueurs actifs.
* Chargement de l'adresse d'appareil sécurisée (SDA).
* Définition des propriétés des membres.
* Inscription aux événements de modification de session.
* Définition de la session de salon comme session active.

[Revenir au début de cette rubrique.](#top)

## Envoyer des invitations à des amis <a id="send-invites" />

Affichez l'interface utilisateur XBOX standard dans laquelle le joueur peut sélectionner des amis ou des joueurs récents à inviter dans la partie.
Lorsque le joueur confirme sa sélection, Multiplayer Manager envoie les invitations aux joueurs sélectionnés.

Les jeux peuvent également utiliser la méthode [XblMultiplayerManagerLobbySessionInviteUsers](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessioninviteusers) pour envoyer des invitations à un ensemble de personnes définies par leur ID d'utilisateur des services XBOX.
Cette méthode est utile si vous utilisez votre propre interface utilisateur dans le jeu plutôt que l'interface utilisateur XBOX standard.

#### API C plat

```cpp theme={null}
size_t xuidsCount = 1;
uint64_t xuids[1] = {};
xuids[0] = 1234567891234567;
HRESULT hr = XblMultiplayerManagerLobbySessionInviteUsers(
    xblUserHandle, 
    xuids, 
    xuidsCount, 
    nullptr,    // ContextStringId 
    nullptr     // CustomActivationContext
);
```

Pour plus d'informations, consultez [XblMultiplayerManagerLobbySessionInviteUsers](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessioninviteusers).

Multiplayer Manager effectue les opérations suivantes pour envoyer des invitations à des amis.

* Affichage de la title-callable UI (TCUI) standard XBOX
* Envoi d'une invitation directement aux joueurs sélectionnés

[Revenir au début de cette rubrique.](#top)

## Accepter des invitations <a id="accept-invites" />

Lorsqu'un joueur invité accepte une invitation de jeu ou rejoint la partie d'un ami au moyen d'une interface utilisateur de l'interpréteur de commandes, le jeu est lancé sur son appareil.

Pour les jeux basés sur le Microsoft Game Development Kit (GDK), une fois le jeu démarré, écoutez les événements d'invitation en appelant [XGameActivationRegisterForEvent](/fr-CA/reference/system/xgameactivation/functions/xgameactivationregisterforevent).

Pour les jeux basés sur le XBOX One Software Development Kit et la plateforme Windows universelle (UWP), une fois le jeu démarré, Multiplayer Manager peut utiliser les arguments de l'événement d'activation de protocole pour rejoindre le salon.

Si l'utilisateur invité n'est pas ajouté au moyen de [XblMultiplayerManagerLobbySessionAddLocalUser](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionaddlocaluser), [XblMultiplayerManagerJoinLobby](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby) échoue et fournit le xuid auquel l'invitation a été envoyée lorsque vous appelez [XblMultiplayerEventArgsXuid](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsxuid) avec l'événement `JoinLobbyCompleted`.

Après avoir rejoint le salon, nous vous recommandons de définir l'adresse de connexion du membre local ainsi que les propriétés personnalisées du membre.
Vous pouvez également définir l'hôte au moyen de [XblMultiplayerManagerLobbySessionSetSynchronizedHost](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetsynchronizedhost) s'il n'en existe pas.

Enfin, Multiplayer Manager intègre automatiquement l'utilisateur à la session de jeu si une partie est déjà en cours et qu'il reste de la place pour l'invité.
Le titre en est informé par l'événement `JoinGameCompleted`, qui fournit un code d'erreur et un message appropriés.

Les résultats d'erreur ou de réussite sont gérés au moyen de l'événement `JoinLobbyCompleted`.

#### API C plat

```cpp theme={null}

void CALLBACK MyXGameInviteEventCallback(
    _In_opt_ void* context,
    _In_ const XGameActivationInfo* activationInfo)
{
    UNREFERENCED_PARAMETER(context);
    if (activationInfo->type == XGameActivationType::AcceptedGameInvite)
    {
        if (activationInfo->inviteUri != nullptr)
        {
            std::string inviteString(activationInfo->inviteUri);
            auto pos = inviteString.find("handle=");
            auto inviteHandleId = inviteString.substr(pos + 7, 36);

            // Now use inviteHandleId when calling XblMultiplayerManagerJoinLobby().  
            // See the example call as follows.
        }
    }
}

XTaskQueueRegistrationToken token = { 0 };
HRESULT hr = XGameActivationRegisterForEvent(
    queue,
    nullptr,
    MyXGameInviteEventCallback,
    &token);

```

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerJoinLobby(inviteHandleId, xblUserHandle);
if (!SUCCEEDED(hr))
{
    // Handle failure.
}

// Set member connection address.
const char* connectionAddress = "1.1.1.1";
hr = XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress(
    xblUserHandle, connectionAddress, context);
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XblMultiplayerManagerJoinLobby](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby)
* [XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetlocalmemberconnectionaddress)

Multiplayer Manager effectue les opérations suivantes pour accepter des invitations.

* Inscription aux abonnements Real-Time Activity et multijoueurs.
* Accès à la session de salon.
* Nettoyage de l'état du salon existant.
* Intégration de tous les joueurs locaux en tant que joueurs actifs.
* Chargement de la SDA.
* Définition des propriétés des membres.
* Inscription aux événements de modification de session.
* Définition de la session de salon comme session active.
* Accès à la session de jeu (si elle existe).
* Utilisation d'un handle de transfert.

[Revenir au début de cette rubrique.](#top)

## Rejoindre une session de jeu depuis le salon <a id="join-game" />

Une fois les invitations acceptées et l'hôte prêt à commencer la partie, vous pouvez démarrer une nouvelle partie incluant les membres de la session de salon en appelant [XblMultiplayerManagerJoinGameFromLobby](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoingamefromlobby).

Les résultats d'erreur ou de réussite sont gérés au moyen de l'événement `JoinGameCompleted`.

#### API C plat

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerJoinGameFromLobby(gameSessionTemplateName);
if (!SUCCEEDED(hr))
{
    // Handle error.
}
```

Pour plus d'informations, consultez [XblMultiplayerManagerJoinGameFromLobby](/fr-CA/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoingamefromlobby).

Multiplayer Manager effectue les opérations suivantes pour rejoindre une session de jeu depuis le salon.

* Création de la session de jeu.
* Intégration de tous les joueurs locaux en tant que joueurs actifs.
* Chargement de la SDA.
* Définition des propriétés des membres.
* Inscription aux événements de modification de session.
* Publication de la partie au moyen de la session de salon.

[Revenir au début de cette rubrique.](#top)


## Related topics

- [Jouer à une partie avec des amis (organigramme)](/fr-CA/services/xbox-services/multiplayer/mpm/concepts/flowcharts/live-mpm-play-with-friends.md)
- [Jouer à une partie à l'aide du matchmaking SmartMatch (organigramme)](/fr-CA/services/xbox-services/multiplayer/mpm/concepts/flowcharts/live-mpm-play-with-smartmatch-matchmaking.md)
- [Envoi d'invitations de jeu à l'aide de Multiplayer Manager](/fr-CA/services/xbox-services/multiplayer/mpm/how-to/live-send-game-invites.md)
- [Exemples de code Multiplayer Manager](/fr-CA/services/xbox-services/multiplayer/mpm/how-to/live-mm-howto-nav.md)
- [Procédures](/fr-CA/services/xbox-services/multiplayer/mpm/how-to/index.md)
