Lumberyard
Guía del usuario (Version 1.18)

Gema GameLift

Amazon GameLift es un servicio de AWS para implementar, utilizar y escalar juegos de multijugador basados en sesiones. Amazon GameLift le permite 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 facilita el uso de Amazon GameLift en Lumberyard. Para utilizar el servicio Amazon GameLift, basta con habilitar la gema GameLift en sus proyectos de Lumberyard.

La gema GameLift ofrece dos servicios: en el servidor, proporciona GameLiftServerService. En el cliente, proporciona GameLiftClientService. Cuando utilice la gema GameLift en su proyecto de juego, se producirá la siguiente secuencia de eventos:

  • El servidor inicia GameLiftServerService y permanece a la escucha de eventos que haya entregado GameLiftServerService.

  • El cliente inicia GameLiftClientService, envía GameLiftSessionRequest, busca GameLiftSession, se une a GameLiftSession y permanece a la escucha de eventos que haya enviado GameLiftClientService.

Estos eventos se ilustran en el siguiente diagrama.


        Flujo de trabajo de una sesión de GameLift

Código de muestra

El código de 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 de 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

carrierDesc.m_port = s_gameLiftSettings.m_serverPort; carrierDesc.m_driverIsFullPackets = false; carrierDesc.m_driverIsCrossPlatform = true; EBUS_EVENT_ID_RESULT(session, m_gridMate, GridMate::GameLiftServerServiceBus, HostSession, sp, carrierDesc);

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_fleetId = settings.m_fleetId; serviceDesc.m_endpoint = settings.m_endpoint; serviceDesc.m_region = settings.m_region; m_service = GridMate::StartGridMateService<GridMate::GameLiftClientService>(m_gridMate, serviceDesc);

Enviar GameLiftSessionRequest

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; m_sessionRequest = m_service->RequestSession(reqParams);

Buscar sesiones activas

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);

En esta página: