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

# Início rápido do SDK do Lobby

> Configure o SDK C/C++ do PlayFab Multiplayer e crie seu primeiro PlayFab Lobby com este início rápido que aborda pré-requisitos, integração e as chamadas de API iniciais.

Este artigo descreve como configurar o ambiente de desenvolvimento para o PlayFab Lobby e criar seu primeiro lobby usando o SDK C/C++ do PlayFab Multiplayer.

<Note>
  O PlayFab Multiplayer SDK também fornece APIs para o PlayFab Matchmaking. \* Para obter mais informações sobre as APIs de C++, consulte o [Início rápido do SDK de Matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/quickstart-client-sdk). \* Para obter mais informações sobre as APIs do Unity, consulte o [Início rápido para Unity](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started) \* Para obter mais informações sobre as APIs do Unreal, consulte o [Início rápido para Unreal](/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart)
</Note>

## Pré-requisitos

Você precisa de uma [conta do PlayFab](https://developer.playfab.com) para usar os PlayFab Lobbies. Para obter instruções sobre como criar uma conta, consulte [Início rápido: Game Manager](/pt-BR/services/playfab/live-service-management/gamemanager/quickstart).

## Baixar e configurar o PlayFab Multiplayer SDK

Baixe o [SDK de C/C++](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks) para sua plataforma e integre os arquivos de cabeçalho do provedor e de biblioteca ao seu build.

<Note>
  Este início rápido se concentra no uso do SDK de C/C++. Para as interfaces do Unity e do Unreal, consulte os seguintes artigos: \* [Início rápido para Unity](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-sdk-getting-started) \* [Início rápido para Unreal](/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart)
</Note>

## Fazer login de uma entidade do PlayFab

Para usar o SDK do PlayFab Lobby, você precisa autenticar seu cliente usando chaves de entidade e tokens de entidade do PlayFab. Obtenha um par de chave e token de entidade do PlayFab fazendo login com a API REST [LoginWithCustomId](https://learn.microsoft.com/en-us/rest/api/playfab/client/authentication/login-with-custom-id). Essa API também está disponível como uma projeção de C/C++ por meio do [PlayFab Services SDK](/pt-BR/services/playfab/sdks/playfab-sdk-intro).

<Note>
  LoginWithCustomId é uma forma rápida de começar a usar os recursos do PlayFab, mas não se destina a ser o mecanismo de login com o qual você lança o jogo. Para obter orientações sobre login, consulte [Noções básicas e práticas recomendadas de login](/pt-BR/services/playfab/identity/player-identity/login/login-basics-best-practices).
</Note>

## Inicializar o PlayFab Multiplayer SDK

Inicialize o PlayFab Multiplayer SDK seguindo estas etapas básicas:

1. Inicialize o SDK chamando [PFMultiplayerInitialize](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayerinitialize)
2. Defina a chave e o token de entidade usados pela biblioteca em nome dos seus jogadores chamando [PFMultiplayerSetEntityToken](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/functions/pfmultiplayersetentitytoken).

```cpp theme={null}
static PFMultiplayerHandle g_pfmHandle = nullptr;
...
...
HRESULT hr = S_OK;

// Initialize the PFMultiplayer library.
hr = PFMultiplayerInitialize(titleId, &g_pfmHandle);
if (FAILED(hr))
{
    // handle initialize failure
    printf("PFMultiplayerInitialize failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// Set an entity token for a local user. The token is used to authenticate PlayFab operations on behalf of this user. 
// Tokens can expire, and this API token should be called again when this token is refreshed.
hr = PFMultiplayerSetEntityToken(g_pfmHandle, localUserEntity, entityToken);
if (FAILED(hr))
{
    // handle set entity token failure
    printf("PFMultiplayerSetEntityToken failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}
```

## Criar um lobby

Por fim, criaremos um lobby seguindo estas etapas básicas:

1. Chame [PFMultiplayerCreateAndJoinLobby](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayercreateandjoinlobby)
2. Verifique a conclusão assíncrona sondando periodicamente [PFMultiplayerStartProcessingLobbyStateChanges](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges) em busca de uma [PFLobbyCreateAndJoinLobbyCompletedStateChange](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/functions/pfmultiplayerstartprocessinglobbystatechanges).

```cpp theme={null}
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Public;

PFLobbyJoinConfiguration memberConfiguration{};

PFLobbyHandle lobby;
HRESULT hr = PFMultiplayerCreateAndJoinLobby(g_pfmHandle, localUserEntity, &lobbyConfiguration, &memberConfiguration, nullptr, &lobby);
if (FAILED(hr))
{
    // handle immediate create failure
    printf("PFMultiplayerCreateAndJoinLobby failed! %s\n", PFMultiplayerGetErrorMessage(hr));
    return hr;
}

// NOTE: to simplify this quickstart, we'll synchronously block waiting for the CreateAndJoinLobby operation
// to finish. In a real implementation, this polling would be done asynchronously on a background thread/worker.
bool createAndJoinLobbyFinished = false;
while (!createAndJoinLobbyFinished)
{
    uint32_t lobbyStateChangeCount;
    const PFLobbyStateChange * const * lobbyStateChanges;
    HRESULT hr = PFMultiplayerStartProcessingLobbyStateChanges(m_pfmHandle, &lobbyStateChangeCount, &lobbyStateChanges);
    if (FAILED(hr))
    {
        // handle the failure
        printf("PFMultiplayerStartProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }

    for (uint32_t i = 0; i < lobbyStateChangeCount; ++i)
    {
        const PFLobbyStateChange* stateChange = lobbyStateChanges[i];
        switch (stateChange->stateChangeType)
        {
            case PFLobbyStateChangeType::CreateAndJoinLobbyCompleted:
            {
                auto createAndJoinStateChange = 
                    static_cast<const PFLobbyCreateAndJoinLobbyCompletedStateChange*>(stateChange);

                if (SUCCEEDED(createAndJoinStateChange->result))
                {
                    // lobby successfully created!
                    printf("Lobby 0x%p successfully created!\n", createAndJoinStateChange->lobby);
                }
                else
                {
                    // report asynchronous failure
                    printf("Failed to create lobby 0x%p! %s\n",
                        createAndJoinStateChange->lobby,
                        PFMultiplayerGetErrorMessage(createAndJoinStateChange->result));
                }
                createAndJoinLobbyFinished = true;
                break;
            }
        }
    }

    hr = PFMultiplayerFinishProcessingLobbyStateChanges(m_pfmHandle, lobbyStateChangeCount, lobbyStateChanges);
    if (FAILED(hr))
    {
        printf("PFMultiplayerFinishProcessingLobbyStateChanges failed! %s\n", PFMultiplayerGetErrorMessage(hr));
        return hr;
    }
}
```

Para obter mais informações sobre como criar lobbies, consulte [Criar um lobby](/pt-BR/services/playfab/multiplayer/lobby/create-a-lobby).

Para obter mais informações sobre como processar operações assíncronas, consulte [Operações e notificações assíncronas](/pt-BR/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async).

## Próximas etapas

* [Localizar um lobby e ingressar nele](/pt-BR/services/playfab/multiplayer/lobby/join-lobbies)
* [Convidar outro jogador para um lobby](/pt-BR/services/playfab/multiplayer/lobby/lobby-invites)
* [Usar as propriedades do lobby para coordenar uma sessão de jogo](/pt-BR/services/playfab/multiplayer/lobby/lobby-properties)

## Confira também

* [Criar um lobby](/pt-BR/services/playfab/multiplayer/lobby/create-a-lobby)
* [Operações e notificações assíncronas](/pt-BR/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-async)
* [Criar lobbies pesquisáveis](/pt-BR/services/playfab/multiplayer/lobby/define-search-keywords)
* [Propriedades do lobby](/pt-BR/services/playfab/multiplayer/lobby/lobby-properties)
* [Referência do SDK do Lobby](/pt-BR/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pflobby/pflobby_members)
* [SDKs do Lobby](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks)
* [Início rápido do SDK de Matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)


## Related topics

- [SDKs de Lobby e Matchmaking do PlayFab](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks.md)
- [Início rápido do Party](/pt-BR/services/playfab/multiplayer/networking/quickstart.md)
- [Início rápido do SDK de Matchmaking](/pt-BR/services/playfab/multiplayer/matchmaking/quickstart-client-sdk.md)
- [Início rápido do PlayFab Online Subsystem (OSS)](/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart.md)
- [Início rápido do plug-in Multiplayer para Unity](/pt-BR/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/multiplayer-unity-plugin-quickstart.md)
