Opérations et notifications asynchrones
Pour les opérations susceptibles d’être lentes ou coûteuses en calcul, le SDK PlayFab Lobby et Matchmaking expose des API asynchrones. Les API asynchrones vous permettent de démarrer des opérations coûteuses ou lentes depuis vos threads principaux et d’interroger l’achèvement de ces opérations sur le thread de votre choix. Ce même mécanisme d’interrogation sert également à transmettre à votre code de titre des notifications asynchrones de mises à jour du SDK. Cette page présente les modèles d’API asynchrones du SDK PlayFab Lobby et Matchmaking ainsi que les bonnes pratiques de programmation associées.Modèles d’API de base
Il existe deux types de modèles d’API asynchrones à connaître dans le SDK PlayFab Lobby et Matchmaking :Opérations asynchrones
Les API asynchrones du SDK sont simples à utiliser. Le modèle général de démarrage et d’achèvement des opérations asynchrones est le suivant :- Effectuez un appel de méthode normal à l’API asynchrone appropriée de votre choix. Parmi les opérations asynchrones courantes que vous utiliserez probablement, citons :
- Vérifiez la valeur de retour HRESULT de l’API à l’aide des macros SUCCEEDED() ou FAILED(). Cette valeur renvoyée de manière synchrone vous indique si l’opération a bien démarré.
- Interrogez l’achèvement de l’opération asynchrone en attendant que le « changement d’état d’achèvement » de l’opération associée soit fourni par PFMultiplayerStartProcessingLobbyStateChanges() or PFMultiplayerStartProcessingMatchmakingStateChanges. Un exemple de « changement d’état d’achèvement » associé à PFMultiplayerCreateAndJoinLobby() est PFLobbyCreateAndJoinLobbyCompletedStateChange. Des informations plus détaillées sur ce que sont les « changements d’état » et sur leur fonctionnement sont disponibles dans la section Changements d’état.
- Vérifiez la valeur result du changement d’état d’achèvement pour déterminer si l’opération a réussi ou échoué. Des informations plus détaillées sur ces valeurs d’erreur sont disponibles dans la documentation sur la gestion des erreurs du SDK.
Notifications asynchrones
Certaines fonctionnalités génèrent des notifications asynchrones de modifications dans le SDK Lobby et Matchmaking. Les notifications courantes sont notamment :- Notifications de mise à jour du lobby.
- Notifications de déconnexion du lobby.
- Notifications de changement d’état des tickets de matchmaking.
Changements d’état
Le modèle d’API asynchrone du SDK Lobby et Matchmaking repose sur les structs PFLobbyStateChange and PFMatchmakingStateChange . Les PFLobbyStateChanges vous informent des modifications du sous-système de lobby et les PFMatchmakingStateChanges vous informent des modifications du sous-système de matchmaking. Ces « changements d’état » sont des notifications asynchrones d’événements provenant du SDK. Ces notifications sont mises en file d’attente en interne, et vous les traitez en appelant PFMultiplayerStartProcessingLobbyStateChanges() and PFMultiplayerStartProcessingMatchmakingStateChanges. Ces fonctions renvoient tous les changements d’état en file d’attente (pour leur sous-système d’API respectif) sous forme de listes que vous pouvez parcourir et traiter individuellement. Chaque changement d’état possède un champ stateChangeType correspondant, que vous pouvez examiner pour déterminer le changement d’état spécifique dont vous êtes informé. Une fois que vous savez quel changement d’état vous a été fourni, vous pouvez convertir le struct générique PFLobbyStateChange ou PFMatchmakingStateChange en un type de struct de changement d’état plus spécifique afin d’examiner les données propres à cet événement. En général, le traitement des changements d’état est implémenté sous la forme d’une simple instruction switch qui délègue chaque changement d’état à un gestionnaire. Une fois traitée, la liste des changements d’état obtenue de PFMultiplayerStartProcessingLobbyStateChanges ou de PFMultiplayerStartProcessingMatchmakingStateChanges doit être renvoyée à PFMultiplayerFinishProcessingMatchmakingStateChanges() or PFMultiplayerFinishProcessingMatchmakingStateChanges(), respectivement.Contextes des opérations asynchrones
Chaque API asynchrone comprend un paramètrevoid* asyncContext. Cette valeur est un paramètre transmis tel quel, qui sera défini
dans le changement d’état d’achèvement associé à cet appel d’API lorsqu’il sera fourni par PFMultiplayerStartProcessingLobbyStateChanges()
ou PFMultiplayerStartProcessingMatchmakingStateChanges().
Cette valeur vous offre un mécanisme permettant d’attacher des contextes arbitraires de la taille d’un pointeur à vos appels d’API asynchrones. Ces
contextes peuvent être utilisés dans de nombreux scénarios, notamment :
- associer des données propres au titre à un appel du SDK
- relier plusieurs opérations asynchrones à l’aide d’un identifiant partagé
Mise en file d’attente des opérations
Souvent, lors de l’utilisation d’API asynchrones, plusieurs opérations asynchrones doivent s’exécuter séquentiellement dans le cadre d’un flux asynchrone plus large. Dans le SDK Lobby et Matchmaking, un exemple serait la création d’un lobby et l’envoi d’invitations à vos amis pour ce lobby. De manière séquentielle, ce flux se présenterait ainsi :- Appeler PFMultiplayerCreateAndJoinLobby() pour créer et rejoindre un lobby PlayFab.
- Attendre que PFLobbyCreateAndJoinLobbyCompletedStateChange indique que le lobby a bien été créé et rejoint.
- Appeler PFLobbySendInvite() pour chaque ami invité.
- Attendre que PFLobbySendInviteCompletedStateChange indique que l’invitation a bien été envoyée.
