Intégration d'un client de jeu pour Amazon GameLift ServersRealtime - Amazon GameLift Servers

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Intégration d'un client de jeu pour Amazon GameLift ServersRealtime

Cette rubrique décrit comment préparer votre client de jeu à rejoindre et participer à des sessions de jeu hébergées par Amazon GameLift Servers.

Il existe deux ensembles de tâches nécessaires pour préparer votre client de jeu :

  • Configurer votre client de jeu pour obtenir plus d'informations sur des jeux existants, demander la mise en relation, démarrer de nouvelles sessions de jeu et réserver des emplacements de session de jeu pour un joueur.

  • Permettez à votre client de jeu de rejoindre une session de jeu hébergée sur un serveur Realtime et d'échanger des messages.

Trouvez ou créez des sessions de jeu et des sessions de joueurs

Configurez votre client de jeu pour trouver ou démarrer des sessions de jeu, demander des mises en relation FlexMatch et réserver de l'espace pour les joueurs dans un jeu en créant des sessions de joueur. Il est recommandé de créer un service principal et de l'utiliser pour envoyer les demandes directes au Amazon GameLift Servers service lorsqu'une action du client du jeu est déclenchée par une action du client du jeu. Le service principal transmet ensuite les réponses pertinentes au client du jeu.

  1. Ajoutez le AWS SDK à votre client de jeu, initialisez un Amazon GameLift Servers client et configurez-le pour utiliser les ressources d'hébergement de vos flottes et de vos files d'attente. Le AWS SDK est disponible en plusieurs langues ; consultez le Amazon GameLift Servers SDKs Pour les services clients liés aux jeux.

  2. Ajoutez des Amazon GameLift Servers fonctionnalités à votre service principal. Pour des instructions plus détaillées, voir Ajoutez Amazon GameLift Servers à votre client de jeu et Ajouter le FlexMatch matchmaking. Une bonne pratique consiste à utiliser des placements de session de jeu pour créer de nouvelles sessions de jeu. Cette méthode vous permet de tirer pleinement parti de la Amazon GameLift Servers possibilité de placer rapidement et intelligemment de nouvelles sessions de jeu, ainsi que d'utiliser les données de latence des joueurs pour minimiser le décalage de jeu. Au minimum, votre service principal doit être en mesure de demander de nouvelles sessions de jeu et de gérer les données des sessions de jeu en réponse. Vous pouvez également ajouter des fonctionnalités pour rechercher et obtenir des informations sur les sessions de jeu existantes, et demander des sessions de joueur qui réservent de façon efficace un emplacement de joueur dans une session de jeu existante.

  3. Renvoyer des informations de connexion vers le client de jeu. Le service principal reçoit les objets de session de jeu et de session de joueur en réponse aux demandes adressées au Amazon GameLift Servers service. Ces objets contiennent des informations, notamment les détails de connexion (adresse IP et port) et l'ID de session du joueur, dont le client de jeu a besoin pour se connecter à la session de jeu en cours sur un serveur en temps réel.

Connectez-vous aux jeux sur Amazon GameLift ServersRealtime

Autorisez votre client de jeu à se connecter directement à une session de jeu hébergée sur un serveur Realtime et d'échanger des messagers avec le serveur et d'autres joueurs.

  1. Procurez-vous le SDK client pour Amazon GameLift ServersRealtime, créez-le et ajoutez-le à votre projet client de jeu. Consultez le fichier README pour plus d'informations sur les exigences du kit SDK et des instructions sur la façon de créer les bibliothèques client.

  2. Appelez Cliente () avec une configuration client qui spécifie le type de client/server connexion à utiliser.

    Note

    Si vous vous connectez à un serveur en temps réel qui s'exécute sur une flotte sécurisée avec un certificat TLS, vous devez spécifier un type de connexion sécurisé.

  3. Ajoutez les fonctionnalités suivantes à votre client de jeu. Consultez la Amazon GameLift ServersRealtimeréférence de l'API client (C#) pour plus d'informations.

  4. Configuration des gestionnaires d'événements pour les rappels de client en fonction de vos besoins. Consultez Amazon GameLift ServersRealtimeréférence de l'API client (C#) : rappels asynchrones.

Lorsque vous travaillez avec des flottes en temps réel pour lesquelles la génération de certificats TLS est activée, le serveur est automatiquement authentifié à l'aide du certificat TLS. Le trafic TCP et UDP est chiffré en transit pour assurer la sécurité de la couche de transport. Le trafic TCP est chiffré avec TLS 1.2 et le trafic UDP avec DTLS 1.2.

Exemples de clients de jeu

Client en temps réel de base (C#)

Cet exemple illustre une intégration de base d'un client de jeu avec le SDK client (C#) pour. Amazon GameLift Servers Realtime Comme cela est illustré, l'exemple initialise un objet de client Realtime, configure des gestionnaires d'événements et met en œuvre les rappels côté client, se connecte à un serveur Realtime, envoie un message et se déconnecte.

using System; using System.Text; using Aws.GameLift.Realtime; using Aws.GameLift.Realtime.Event; using Aws.GameLift.Realtime.Types; namespace Example { /** * An example client that wraps the client SDK for Amazon GameLift Servers Realtime * * You can redirect logging from the SDK by setting up the LogHandler as such: * ClientLogger.LogHandler = (x) => Console.WriteLine(x); * */ class RealTimeClient { public Aws.GameLift.Realtime.Client Client { get; private set; } // An opcode defined by client and your server script that represents a custom message type private const int MY_TEST_OP_CODE = 10; /// Initialize a client for Amazon GameLift Servers Realtime and connect to a player session. /// <param name="endpoint">The DNS name that is assigned to Realtime server</param> /// <param name="remoteTcpPort">A TCP port for the Realtime server</param> /// <param name="listeningUdpPort">A local port for listening to UDP traffic</param> /// <param name="connectionType">Type of connection to establish between client and the Realtime server</param> /// <param name="playerSessionId">The player session ID that is assigned to the game client for a game session </param> /// <param name="connectionPayload">Developer-defined data to be used during client connection, such as for player authentication</param> public RealTimeClient(string endpoint, int remoteTcpPort, int listeningUdpPort, ConnectionType connectionType, string playerSessionId, byte[] connectionPayload) { // Create a client configuration to specify a secure or unsecure connection type // Best practice is to set up a secure connection using the connection type RT_OVER_WSS_DTLS_TLS12. ClientConfiguration clientConfiguration = new ClientConfiguration() { // C# notation to set the field ConnectionType in the new instance of ClientConfiguration ConnectionType = connectionType }; // Create a Realtime client with the client configuration Client = new Client(clientConfiguration); // Initialize event handlers for the Realtime client Client.ConnectionOpen += OnOpenEvent; Client.ConnectionClose += OnCloseEvent; Client.GroupMembershipUpdated += OnGroupMembershipUpdate; Client.DataReceived += OnDataReceived; // Create a connection token to authenticate the client with the Realtime server // Player session IDs can be retrieved using AWS SDK for Amazon GameLift Servers ConnectionToken connectionToken = new ConnectionToken(playerSessionId, connectionPayload); // Initiate a connection with the Realtime server with the given connection information Client.Connect(endpoint, remoteTcpPort, listeningUdpPort, connectionToken); } public void Disconnect() { if (Client.Connected) { Client.Disconnect(); } } public bool IsConnected() { return Client.Connected; } /// <summary> /// Example of sending to a custom message to the server. /// /// Server could be replaced by known peer Id etc. /// </summary> /// <param name="intent">Choice of delivery intent i.e. Reliable, Fast etc. </param> /// <param name="payload">Custom payload to send with message</param> public void SendMessage(DeliveryIntent intent, string payload) { Client.SendMessage(Client.NewMessage(MY_TEST_OP_CODE) .WithDeliveryIntent(intent) .WithTargetPlayer(Constants.PLAYER_ID_SERVER) .WithPayload(StringToBytes(payload))); } /** * Handle connection open events */ public void OnOpenEvent(object sender, EventArgs e) { } /** * Handle connection close events */ public void OnCloseEvent(object sender, EventArgs e) { } /** * Handle Group membership update events */ public void OnGroupMembershipUpdate(object sender, GroupMembershipEventArgs e) { } /** * Handle data received from the Realtime server */ public virtual void OnDataReceived(object sender, DataReceivedEventArgs e) { switch (e.OpCode) { // handle message based on OpCode default: break; } } /** * Helper method to simplify task of sending/receiving payloads. */ public static byte[] StringToBytes(string str) { return Encoding.UTF8.GetBytes(str); } /** * Helper method to simplify task of sending/receiving payloads. */ public static string BytesToString(byte[] bytes) { return Encoding.UTF8.GetString(bytes); } } }