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

# Rechercher des lobbies

> Recherchez des PlayFab Lobbies publics à l'aide de chaînes de filtre et de tri sur les propriétés consultables, le nombre de membres et un classement par distance pour découvrir des lobbies.

Il est souvent utile que les titres permettent aux joueurs de trouver des lobbies répondant à un ensemble de critères particuliers, comme la carte et le niveau de difficulté, entre autres caractéristiques du jeu. Cette fonctionnalité de recherche permet aux joueurs de trouver les sessions de jeu qu'ils souhaitent avec les personnes de leur choix.

Cet article explique comment utiliser **FindLobbies** pour permettre aux joueurs de trouver des lobbies. Pour voir comment la recherche de lobbies peut être utilisée dans les titres, consultez [Scénarios courants](#common-scenarios).

<Note>
  Il est déconseillé d'utiliser **FindLobbies** pour implémenter un matchmaking en arrière-plan. Dans ce scénario, nous vous recommandons vivement d'utiliser la [fonctionnalité de matchmaking](/fr/services/playfab/multiplayer/matchmaking). Sinon, vous devrez gérer les collisions de joueurs essayant tous de rejoindre les mêmes lobbies au moyen du filtrage, du tri et d'autres techniques, comme l'utilisation de valeurs aléatoires dans vos champs de données de recherche.
</Note>

## Comprendre la relation entre les propriétés de recherche des lobbies et la recherche de lobbies

Les joueurs rendent leurs lobbies découvrables en définissant des propriétés de recherche. Les joueurs trouvent ces lobbies découvrables en appelant **FindLobbies** avec des chaînes de requête permettant de filtrer et de trier leurs résultats de recherche en fonction des propriétés de recherche définies sur les lobbies actuellement actifs. Les lobbies correspondant à ces requêtes sont renvoyés au joueur appelant.

Pour plus d'informations sur la définition des propriétés de recherche, consultez [Créer des lobbies consultables](/fr/services/playfab/multiplayer/lobby/define-search-keywords)

## Utilisation de FindLobbies

Lorsque vous appelez **FindLobbies**, vous pouvez utiliser le paramètre de filtre pour limiter votre requête aux résultats de recherche correspondant à un ensemble de critères basés sur les propriétés de recherche personnalisées du lobby.

En outre, vous pouvez utiliser le paramètre de tri pour trier les résultats renvoyés par le service en fonction des propriétés de recherche. C'est utile, car le service ne renvoie qu'un nombre limité de résultats de recherche. Le tri vous garantit de voir les résultats les plus pertinents.

<a id="common-scenarios" />

### Scénarios courants

Voici quelques façons courantes d'utiliser la fonctionnalité **FindLobbies** dans les titres.

* Rechercher des lobbies de sessions de jeu pour un mode de jeu spécifique de votre titre
* Rechercher des lobbies de sessions de jeu hébergées par vos amis
* Rechercher des lobbies de sessions de jeu disposant d'assez de places pour tous les joueurs locaux
* Rechercher les lobbies dont vous faites déjà partie afin de rétablir une connexion après un plantage inattendu du client ou du serveur de jeu.

### Clés de recherche prises en charge

Seul un ensemble restreint de clés peut être utilisé lors de la définition de propriétés de recherche personnalisées.

* Pour les propriétés de type chaîne, les clés suivantes sont prises en charge : string\_key1, string\_key2, \[...] string\_key30
* Pour les propriétés numériques, les clés suivantes sont prises en charge : number\_key1, number\_key2, \[...] number\_key30

### Construction des chaînes de requête pour FindLobbies

Les chaînes de requête des API **FindLobbies** sont structurées selon une syntaxe de type OData. La taille maximale de la chaîne de filtre est de 600 caractères.

Les opérateurs OData suivants peuvent être utilisés pour composer des chaînes de requête. Les opérateurs respectent la casse.

| Opérateurs | Signification | Exemple |
| - | - | - |
| eq | égal à | string\_key1 eq 'CaptureTheFlag' |
| lt | inférieur à | number\_key2 lt 10 |
| le | inférieur ou égal à | number\_key2 le 10 |
| gt | supérieur à | number\_key3 gt 100 |
| ge | supérieur ou égal à | number\_key3 ge 100 |
| ne | différent de | string\_key1 ne 'CaptureTheFlag' |
| and | et | string\_key1 eq 'CaptureTheFlag' and number\_key2 lt 10 |

<Note>
  Lors de la comparaison de propriétés de type chaîne, veillez à placer la valeur comparée entre apostrophes. Par exemple, "string\_key1 eq **'SOME STRING VALUE'**". Les propriétés numériques n'ont pas besoin d'être entourées.
</Note>

Des opérateurs prédéfinis sont également disponibles. Ils doivent être précédés de « lobby/ ».

| Opérateurs | Signification | Exemple |
| - | - | - |
| memberCount | nombre de joueurs dans un lobby | lobby/memberCount eq 5 |
| maxMemberCount | nombre maximal de joueurs autorisés dans un lobby | lobby/maxMemberCount gt 10 |
| memberCountRemaining | nombre restant de joueurs pouvant rejoindre le lobby | lobby/memberCountRemaining gt 0 |
| membershipLock | état de verrouillage des lobbies ; doit être égal à 'Unlocked' ou 'Locked' | lobby/membershipLock eq 'Unlocked' |
| amOwner | lobbies dont vous êtes le propriétaire ; doit être égal à 'true' | lobby/amOwner eq 'true' |
| amMember | lobbies dont vous êtes membre ; doit être égal à 'true' | lobby/amMember eq 'true' |
| amServer | lobbies détenus par un client que le serveur a rejoints ; doit être égal à 'true' | lobby/amServer eq 'true' |

La définition de ces constantes dans le SDK est documentée [ici](/fr/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/constants/pflobbysearchkeys).

### Tri

Chaîne de style OData contenant le tri de cette requête dans l'ordre croissant ("asc") ou décroissant ("desc"). Les clauses OrderBy peuvent être utilisées pour n'importe quelle clé de recherche numérique ou clé de recherche prédéfinie numérique. Pour trier par proximité avec un nombre, le mot-clé distance peut être utilisé afin de trier en fonction de la distance par rapport à la clé de recherche numérique donnée. Vous ne pouvez pas utiliser l'ordre croissant ou décroissant avec le tri par distance. Ce champ ne prend en charge qu'une seule clause de tri ou une seule clause de distance. Si aucun tri n'est fourni ou si un départage est nécessaire pour le tri donné, le tri par défaut est décroissant selon l'heure de création.

| Exemple | Signification |
| - | - |
| number\_key1 asc | tri croissant par clé de recherche numérique |
| lobby/memberCount desc | tri décroissant par clé de recherche numérique |
| distance\{number\_key1 = 5} | tri par distance par rapport au nombre donné |
| *par défaut* | tri décroissant par heure de création |

## Exemple de recherche de lobbies à l'aide du SDK Lobby et Matchmaking

Dans cet exemple, le joueur souhaite trouver tous les lobbies répondant aux exigences suivantes :

* Le mode de jeu est "DeathMatch"
* Le style de compétition est "Ranked"
* Le niveau de compétence du joueur se situe entre les limites de compétence minimale et maximale du lobby.

En outre, le joueur souhaite que les résultats soient triés selon les règles suivantes :

* Les lobbies dont le niveau de compétence optimal est le plus proche de celui du joueur doivent apparaître en premier

```cpp theme={null}
static PFMultiplayerHandle g_pfmHandle = nullptr;

#define SUPPORT_XBL_CROSSPLAY

#define PFLOBBY_SEARCH_KEY_GAME_MODE "string_key1"
#define PFLOBBY_SEARCH_KEY_COMPETITION_STYLE "string_key2"
#define PFLOBBY_SEARCH_KEY_SKILL "number_key1"

#define GAME_MODE_DEATH_MATCH "DeathMatch"
#define COMPETITION_STYLE_RANKED "Ranked"

// Find lobbies based on player's search criteria.
void FindGamesWithRuntimeQuery(
    uint32_t minimumSkill,
    uint32_t maximumSkill,
    uint32_t optimalSkill)
{
    PFLobbySearchFriendsFilter friendsFilter;
    friendsFilter.includeSteamFriends = true;
#ifdef SUPPORT_XBL_CROSSPLAY
    friendsFilter.includeXboxFriendsToken = MyGame::GetLocalUserXboxToken();
#endif // SUPPORT_XBL_CROSSPLAY

    // Limit results based on friend's filter.
    PFLobbySearchConfiguration searchConfiguration = { 0 };
    searchConfiguration.friendsFilter = &friendsFilter;

    // Create filter string based on player's search parameters.
    std::string filterString;
    filterString += PFLOBBY_SEARCH_KEY_GAME_MODE + std::string(" eq ") + "'" + GAME_MODE_DEATH_MATCH + "'";
    filterString += " and ";
    filterString += PFLOBBY_SEARCH_KEY_COMPETITION_STYLE + std::string(" eq ") + "'" + COMPETITION_STYLE_RANKED + "'";
    filterString += " and ";
    filterString += PFLOBBY_SEARCH_KEY_SKILL + std::string(" ge ") + std::to_string(minimumSkill);
    filterString += " and ";
    filterString += PFLOBBY_SEARCH_KEY_SKILL + std::string(" le ") + std::to_string(maximumSkill);

    // Create sort string based on player's sort preference.
    std::string sortString;
    sortString += std::string("distance{") + PFLOBBY_SEARCH_KEY_SKILL + "=" + std::to_string(optimalSkill) + "}";

    searchConfiguration.filterString = filterString.c_str();
    searchConfiguration.sortString = sortString.c_str();

    HRESULT hr = PFMultiplayerFindLobbies(g_pfmHandle, &m_localUser, &searchConfiguration, nullptr);
}

void ProcessStateChanges()
{
    while (true)
    {
        uint32_t stateChangeCount;
        const PFLobbyStateChange* const* stateChanges;
        RETURN_VOID_IF_FAILED(PFMultiplayerStartProcessingLobbyStateChanges(
            g_pfmHandle,
            &stateChangeCount,
            &stateChanges));

        for (uint32_t i = 0; i < stateChangeCount; ++i)
        {
            const PFLobbyStateChange* stateChange = stateChanges[i];
            switch (stateChange->stateChangeType)
            {
                case PFLobbyStateChangeType::FindLobbiesCompleted:
                {
                    GuiPostCurrentLobbySearchResults(
                        static_cast<const PFLobbyFindLobbiesCompletedStateChange&>(*stateChange));
                    break;
                }
                default:
                {
                    break;
                }
            }
        }

        RETURN_VOID_IF_FAILED(PFMultiplayerFinishProcessingLobbyStateChanges(
            g_pfmHandle,
            stateChangeCount,
            stateChanges));
    }
}

// Update game UI to display search results when a list of matching lobbies is returned.
void GuiPostCurrentLobbySearchResults(
    const PFLobbyFindLobbiesCompletedStateChange& stateChange)
{
    if (FAILED(stateChange.result))
    {
        GuiToastErrorAndExitScreen();
        return;
    }

    for (uint32_t i = 0; i < stateChange.searchResultCount; ++i)
    {
        const PFLobbySearchResult& searchResult = stateChange.searchResults[i];
        GuiPostLobbySearchResultRow(searchResult); // defined elsewhere
    }
}
```

## Voir aussi

* [Créer des lobbies consultables](/fr/services/playfab/multiplayer/lobby/define-search-keywords)
* [Rejoindre des lobbies](/fr/services/playfab/multiplayer/lobby/join-lobbies)
* [Lobby et matchmaking](/fr/services/playfab/multiplayer/lobby/lobby-and-matchmaking)
* [Propriétés du lobby](/fr/services/playfab/multiplayer/lobby/lobby-properties)
* [Créer un lobby](/fr/services/playfab/multiplayer/lobby/create-a-lobby)


## Related topics

- [Rechercher des lobbies](/fr/services/playfab/api-references/rest/multiplayer/lobby/find-lobbies.md)
- [Intégrer Party à Lobby à l'aide du SDK Multiplayer](/fr/services/playfab/multiplayer/networking/party-lobby-integration.md)
- [Démarrage rapide du plug-in Multiplayer pour Unity](/fr/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-plugin-quickstart.md)
- [Passer de MPSD à PlayFab Multiplayer et MPA](/fr/services/xbox-services/multiplayer/mpsd/concepts/live-mpsd-to-mlp.md)
- [Rejoindre des lobbies](/fr/services/playfab/multiplayer/lobby/join-lobbies.md)
