Schnellstart: Lobby SDK
In diesem Artikel wird beschrieben, wie Sie die Entwicklungsumgebung für Azure PlayFab Lobby einrichten und Ihren ersten Wartebereich mithilfe des PlayFab Multiplayer C/C++-SDK erstellen.
Notiz
Das PlayFab Multiplayer SDK bietet auch APIs für PlayFab Matchmaking.
- Weitere Informationen zu C++-APIs finden Sie im Schnellstart zum Matchmaking SDK.
- Weitere Informationen zu Unity-APIs finden Sie im Schnellstart für Unity.
- Weitere Informationen zu Unreal-APIs finden Sie im Schnellstart für Unreal.
Voraussetzungen
Sie benötigen ein PlayFab-Konto , um PlayFab Lobbies verwenden zu können. Anweisungen zum Erstellen eines Kontos finden Sie unter Schnellstart: Game Manager.
Herunterladen und Einrichten des PlayFab Multiplayer SDK
Laden Sie das C/C++-SDK für Ihre Plattform herunter, und integrieren Sie den Anbieterheader und die Bibliotheksdateien in Ihren Build.
Notiz
Dieser Schnellstart konzentriert sich auf die Verwendung des C/C++-SDK. Informationen zu Unity- und Unreal-Schnittstellen finden Sie in den folgenden Artikeln:
Anmelden bei einer PlayFab-Entität
Um das PlayFab Lobby SDK verwenden zu können, müssen Sie Ihren Client mithilfe von PlayFab-Entitätsschlüsseln und Entitätstoken authentifizieren. Rufen Sie einen PlayFab-Entitätsschlüssel und ein Tokenpaar ab, indem Sie sich mit der LoginWithCustomId-REST-API anmelden. Diese API ist auch als C/C++-Projektion über das PlayFab REST SDK verfügbar.
Notiz
LoginWithCustomId ist eine schnelle Möglichkeit für die ersten Schritte mit PlayFab-Features, ist jedoch nicht als Anmeldemechanismus gedacht, mit dem Sie ausgeliefert werden. Anleitungen zur Anmeldung finden Sie unter Grundlagen und bewährte Methoden für die Anmeldung.
Initialisieren des PlayFab Multiplayer SDK
Initialisieren Sie das PlayFab Multiplayer SDK, indem Sie die folgenden grundlegenden Schritte ausführen:
- Initialisieren des SDK durch Aufrufen von PFMultiplayerInitialize
- Legen Sie den Entitätsschlüssel und das Token fest, die von der Bibliothek im Namen Ihrer Spieler verwendet werden, indem Sie PFMultiplayerSetEntityToken aufrufen.
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;
}
Erstellen eines Wartebereichs
Abschließend erstellen wir einen Wartebereich, indem wir die folgenden grundlegenden Schritte ausführen:
- PfMultiplayerCreateAndJoinLobby aufrufen
- Überprüfen Sie die asynchrone Vervollständigung, indem Sie in regelmäßigen Abständen PFMultiplayerStartProcessingLobbyStateChanges für eine PFLobbyCreateAndJoinLobbyCompletedStateChange abfragen.
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 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;
}
}
Weitere Informationen zum Erstellen von Lobbies finden Sie unter Erstellen einer Lobby.
Weitere Informationen zur Verarbeitung asynchroner Vorgänge finden Sie unter Asynchrone Vorgänge und Benachrichtigungen.
Nächste Schritte
- Suchen und Beitreten zu einer Lobby
- Einladen eines anderen Spielers in einen Wartebereich
- Verwenden von Lobbyeigenschaften zum Koordinieren einer Spielsitzung