Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Integrar un cliente de juego para Amazon GameLift ServersRealtime
En este tema se describe cómo preparar su cliente de juego para poder unirse y participar en sesiones de juego alojadas en Amazon GameLift Servers.
Hay dos conjuntos de tareas necesarias para preparar su cliente de juego:
-
Configure su cliente de juego para adquirir información sobre juegos existentes, solicitar emparejamientos, iniciar sesiones de juego nuevas y reservar ranuras de sesiones de juego para un jugador.
-
Habilite su cliente de juego para unirse a una sesión de juego alojada en un servidor Realtime e intercambiar mensajes.
Búsqueda o creación de sesiones de juego y sesiones de jugador
Configure su cliente de juego para encontrar o iniciar sesiones de juego, solicitar emparejamientos de FlexMatch y reservar espacio para los jugadores en un juego mediante la creación de sesiones de jugador. Como práctica recomendada, crea un servicio de back-end y utilízalo para realizar las solicitudes directas al Amazon GameLift Servers servicio cuando las active una acción del cliente del juego. El servicio de backend transmite a continuación respuestas relevantes de vuelta al cliente de juegos.
-
Añade el AWS SDK a tu cliente de juego, inicializa un Amazon GameLift Servers cliente y configúralo para que utilice los recursos de alojamiento de tus flotas y colas. El AWS SDK está disponible en varios idiomas; consulta la. Amazon GameLift Servers SDKs Para los servicios del cliente de juego
-
Añada Amazon GameLift Servers funcionalidad a su servicio de back-end. Para obtener instrucciones más detalladas, consulta Amazon GameLift ServersAñádelo a tu cliente de juego Añadir FlexMatch matchmaking. La práctica recomendada consiste en utilizar las ubicaciones de sesiones de juego para crear nuevas sesiones de juego. Este método te permite aprovechar al máximo la Amazon GameLift Servers posibilidad de organizar nuevas sesiones de juego de forma rápida e inteligente, así como utilizar los datos de latencia de los jugadores para minimizar el retraso en la partida. Como mínimo, el servicio de backend debe ser capaz de solicitar nuevas sesiones de juego y de gestionar los datos de la sesión como respuesta. Es posible que también desee añadir funcionalidades para buscar y obtener información sobre sesiones de juego existentes y solicitar sesiones de jugador, lo que, de hecho, reserva un espacio de jugador en una sesión de juego existente.
-
Devolver la información de conexión al cliente del juego. El servicio de back-end recibe los objetos de la sesión del juego y de la sesión del jugador en respuesta a las solicitudes que recibe el servicio. Amazon GameLift Servers Estos objetos contienen información, especialmente detalles de conexión (dirección IP y puerto) e ID de sesión de jugador, que el cliente de juego tiene que conectar a la sesión de juego que se ejecuta en un servidor Realtime.
Conéctate a los juegos en Amazon GameLift ServersRealtime
Permita que su cliente de juego se conecte directamente a una sesión de juego alojada en un servidor Realtime e intercambie mensajes con el servidor y otros jugadores.
-
Obtén el SDK del cliente Amazon GameLift ServersRealtime, compruébalo y agrégalo a tu proyecto de cliente de juego. Consulte el archivo README para obtener más información sobre los requisitos del SDK e instrucciones sobre cómo crear las bibliotecas de cliente.
-
Llama Client() con una configuración de cliente que especifique el tipo de client/server conexión que se va a utilizar.
nota
Si se conecta a un servidor Realtime que se ejecuta en una flota protegida con un certificado TLS, debe especificar un tipo de conexión segura.
-
Añada la siguiente funcionalidad a su cliente de juego. Consulte Amazon GameLift ServersRealtimereferencia de la API del cliente (C#) para obtener más información.
-
Conectarse a y desconectarse de un juego
-
Enviar mensajes a los destinatarios
-
Recibir y procesar mensajes
-
Unirse a grupos y abandonar grupos de jugadores
-
-
Configurar controladores de eventos para devoluciones de llamadas del cliente según sea necesario. Consulte Amazon GameLift ServersRealtimeReferencia de la API del cliente (C#): devoluciones de llamada asíncronas.
Cuando se trabaja con flotas de Realtime que tienen habilitada la generación de certificados TLS, el servidor se autentica automáticamente con el certificado TLS. El tráfico TCP y UDP se cifra en tránsito para proporcionar seguridad en la capa de transporte. El tráfico TCP se cifra con TLS 1.2 y el tráfico UDP se cifra con DTLS 1.2.
Ejemplos de cliente de juegos
Cliente básico de Realtime (C#)
En este ejemplo, se ilustra la integración básica de un cliente de juego con el SDK (C#) del cliente. Amazon GameLift Servers Realtime Tal y como se muestra, el ejemplo inicializa un objeto de cliente de Realtime, configura controladores de eventos e implementan las devoluciones de llamada del lado del cliente, se conecta a un servidor Realtime, envía un mensaje y se desconecta.
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); } } }