Gema GameLift - Guía del usuario de Lumberyard

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.

Gema GameLift

Amazon GameLift es unaAWSServicio para implementar, utilizar y escalar juegos de multijugador basados en sesiones. Con Amazon GameLift, puede escalar según sus necesidades y con toda rapidez servidores de juegos de grandes prestaciones para satisfacer la demanda de los jugadores sin dedicar un esfuerzo adicional a las labores de ingeniería o realizar una inversión por adelantado.

La gema GameLift proporciona un marco para extender la red de Lumberyard (GridMate) para trabajar con recursos de GameLift a través de las API de servidor y cliente de GameLift.

Introducción

Para usar el servicio Amazon GameLift con su proyecto de Lumberyard, basta habilitar la gema GameLift mediante Project Configurator.

Usted querrá familiarizarse con los conceptos de GameLift que se encuentran en elGuía del desarrollador Amazon GameLift. Los recursos de GameLift como flota, cola, regla de emparejamiento y configuración deben implementarse antes de ejecutar el juego en GameLift. Para obtener más detalles, consulte laGameLift CLI.

Implementation

La gema GameLift proporciona código de servidor y cliente. El código del servidor interactúa con el SDK de servidor GameLift, mientras que el código del cliente interactúa con el cliente GameLift desde el SDK nativo de AWS.

El código del servidor GameLift Gem es responsable de inicializar el proceso del servidor inicializando el SDK del servidor de GameLift y, a continuación, alojando sesiones de juego para que los clientes se conecten. Si se ejecuta en la configuración de relleno de emparejamiento personalizada, el servidor también es responsable de iniciar y cancelar las solicitudes de relleno de emparejamiento.

El cliente GameLift Gem de proporciona opciones para crear, buscar, unirse y emparejarse en sesiones de juego de GameLift. El emparejamiento se trata utilizando el sistema de emparejamiento FlexMatch de GameLift. Los clientes pueden crear, buscar y unirse a sesiones de juego directamente en flotas de GameLift o mediante colas de GameLift preconfiguradas. En el caso de emparejamiento, los clientes pueden usar una configuración de emparejamiento preconfigurada para crear o unirse a sesiones de juego.

En el lado del servidor, la gema GameLift proporciona laGameLiftServerService. En el lado del cliente, la gema proporciona laGameLiftClientService. Cuando utilice la gema GameLift en su proyecto de juego, se producirá la siguiente secuencia de eventos:

  • El servidor inicia elGameLiftServerServicey permanece a la escucha de eventos que haya entregado el SDK de GameLift Server.

  • El cliente inicia GameLiftClientService, envía una GameLiftSessionRequest o GameLiftGameSessionPlacementRequest, y busca y se une a las sesiones de juego utilizando el ID de flota o el nombre de la cola. El servicio al cliente también ofrece una opción para crear o unirse a sesiones de juego mediante el emparejamiento FlexMatch.

Estos eventos se ilustran en los siguientes diagramas de flujo de trabajo.

Flujo de trabajo de comunicación cliente-servidor de GameLift utilizando flotas o colas para crear una sesión de juego.


                Flujo de trabajo de comunicación cliente-servidor de GameLift utilizando flotas o colas para crear una sesión de juego.

Flujo de trabajo de comunicación cliente-servidor de GameLift utilizando FlexMatch, con relleno automático o personalizado.


                Flujo de trabajo de comunicación cliente-servidor de GameLift utilizando FlexMatch, con relleno automático o personalizado.

Código de muestra

El código GameLift de esta sección sigue el flujo de trabajo que se ilustra en el diagrama anterior y se divide en código de servidor y código de cliente. El código se habilita solamente cuando se definen BUILD_GAMELIFT_SERVER y BUILD_GAMELIFT_CLIENT.

Código de servidor

Utilice el siguiente código de muestra a modo de orientación cuando inicie y aloje una sesión de servidor GameLift.

Iniciar GameLiftServerService

GridMate::GameLiftServerServiceDesc serviceDesc; serviceDesc.m_port = settings.m_serverPort; if (settings.m_logPath) { serviceDesc.m_logPaths.push_back(settings.m_logPath); } m_service = GridMate::StartGridMateService<GridMate::GameLiftServerService>(m_gridMate, serviceDesc);

Alojar una sesión

GridMate::CarrierDesc carrierDesc; carrierDesc.m_port = s_gameLiftSettings.m_serverPort; carrierDesc.m_driverIsFullPackets = false; carrierDesc.m_driverIsCrossPlatform = true; GridMate::GameLiftSessionParams sp; sp.m_topology = GridMate::ST_CLIENT_SERVER; sp.m_gameSession = &gameSession; EBUS_EVENT_ID_RESULT(session, m_gridMate, GridMate::GameLiftServerServiceBus, HostSession, sp, carrierDesc);

Iniciar/detener el relleno de emparejamiento

EBUS_EVENT_ID(m_gridMate, GridMate::GameLiftServerServiceBus, StartMatchmakingBackfill, m_updateGameSession, m_session, checkForAutoBackfill=true); EBUS_EVENT_ID(gEnv->pNetwork->GetGridMate(), GridMate::GameLiftServerServiceBus, StopMatchmakingBackfill, m_session, m_ticketId);

Código de cliente

Utilice el siguiente código de muestra a modo de orientación cuando utilice el servicio de cliente de GameLift.

Iniciar GameLiftClientService

GridMate::GameLiftClientServiceDesc serviceDesc; serviceDesc.m_accessKey = settings.m_accessKey; serviceDesc.m_secretKey = settings.m_secretKey; serviceDesc.m_endpoint = settings.m_endpoint; serviceDesc.m_region = settings.m_region; m_service = GridMate::StartGridMateService<GridMate::GameLiftClientService>(m_gridMate, serviceDesc);

Enviar GameLiftSessionRequest / GameLiftGameSessionPlacementRequest

GridMate::GameLiftSessionRequestParams reqParams; reqParams.m_instanceName = "TestSession"; reqParams.m_numPublicSlots = 16; reqParams.m_params[0].m_id = "param1"; reqParams.m_params[0].m_value = "value12"; reqParams.m_numParams = 1; // Only need ONE of the below. Queue gets the highest preference, followed by alias and fleet id. reqParams.m_fleetId = "fleet_id"; reqParams.m_aliasId = "alias_id"; reqParams.m_queueName = "queue_name"; m_sessionRequest = m_service->RequestSession(reqParams); EBUS_EVENT_ID_RESULT(m_session, m_gridMate, GridMate::GameLiftClientServiceBus, RequestSession, reqParams);

Buscar sesiones activas

GridMate::GameLiftSearchParams searchParams; // Only need ONE of the below. Queue gets the highest preference, followed by alias and fleet id. searchParams.m_fleetId = "fleet_id"; searchParams.m_aliasId = "alias_id"; searchParams.m_queueName = "queue_name"; EBUS_EVENT_ID_RESULT(m_search, m_gridMate, GridMate::GameLiftClientServiceBus, StartSearch, GridMate::GameLiftSearchParams());

Unirse a una sesión

GridMate::CarrierDesc carrierDesc; carrierDesc.m_port = 33435; carrierDesc.m_enableDisconnectDetection = true; carrierDesc.m_connectionTimeoutMS = 10000; carrierDesc.m_threadUpdateTimeMS = 30; const GridMate::GameLiftSearchInfo& gameLiftSearchInfo = static_cast<const GridMate::GameLiftSearchInfo&>(*gridSearch->GetResult(0)); EBUS_EVENT_ID_RESULT(m_session, m_gridMate, GridMate::GameLiftClientServiceBus, JoinSessionBySearchInfo, gameLiftSearchInfo, carrierDesc);

Unirse utilizando FlexMatch Matchmaking

m_matchmakingConfigName = "MatchmakingConfig"; EBUS_EVENT_ID_RESULT(m_search, m_gridMate, GridMate::GameLiftClientServiceBus, StartMatchmaking, m_matchmakingConfigName);