Первый шаг к переходу на Edgegap — удалить код, который инициализирует AWS GameLift внутри вашего игрового сервера. Это нужно, чтобы снизить накладные расходы и предотвратить ошибки. Код, который вам нужно удалить, вероятно, выглядит так:
Начать работу с Edgegap
Попробуйте одно из наших руководств быстрого старта, поддерживаемых плагинами для игровых движков:
using UnityEngine;
using Aws.GameLift.Server;
using System.Collections.Generic;
public class GameLiftServerExampleBehavior : MonoBehaviour
{
//Это пример простой интеграции с серверным SDK GameLift, которая позволит процессам игрового сервера переходить в активное состояние в GameLift!
public void Start()
{
//Укажите номер порта (здесь он задан жёстко для простоты), на котором игровой сервер слушает подключения игроков
var listeningPort = 7777;
//InitSDK установит локальное соединение с агентом GameLift для последующей связи.
var initSDKOutcome = GameLiftServerAPI.InitSDK();
if (initSDKOutcome.Success)
{
ProcessParameters processParameters = new ProcessParameters(
(gameSession) => {
//Когда игровая сессия создаётся, GameLift отправляет запрос на активацию игровому серверу и передаёт объект игровой сессии, содержащий игровые свойства и другие настройки.
//Здесь игровой сервер должен выполнить действия на основе объекта игровой сессии.
//Как только игровой сервер будет готов принимать входящие подключения игроков, он должен вызвать GameLiftServerAPI.ActivateGameSession()
GameLiftServerAPI.ActivateGameSession();
},
(updateGameSession) => {
//Когда игровая сессия обновляется (например, при backfill в FlexMatch), GameLift отправляет запрос на игровой
//сервер, содержащий обновлённый объект игровой сессии. Затем игровой сервер может изучить предоставленные
//matchmakerData и соответствующим образом обработать новых входящих игроков.
//updateReason — это причина, по которой предоставляется это обновление.
},
() => {
//Колбэк OnProcessTerminate. GameLift вызовет этот колбэк перед завершением работы экземпляра, на котором размещён этот игровой сервер.
//Это даёт игровому серверу возможность сохранить своё состояние, обменяться данными с сервисами и т. д. перед завершением работы.
//В данном случае мы просто сообщаем GameLift, что действительно собираемся завершиться.
GameLiftServerAPI.ProcessEnding();
},
() => {
//Это колбэк HealthCheck.
//GameLift будет вызывать этот колбэк примерно каждые 60 секунд.
//Здесь игровой сервер может проверить состояние зависимостей и т. п.
//Просто верните true, если всё в порядке, и false в противном случае.
//У игрового сервера есть 60 секунд, чтобы ответить своим статусом здоровья. GameLift по умолчанию примет значение 'false', если игровой сервер не ответит вовремя.
//В данном случае мы всегда в порядке!
return true;
},
listeningPort, //Этот игровой сервер сообщает GameLift, что будет слушать порт 7777 для входящих подключений игроков.
new LogParameters(new List<string>()
{
//Здесь игровой сервер сообщает GameLift, какой набор файлов нужно загрузить после завершения игровой сессии.
//GameLift загрузит всё, что указано здесь, чтобы разработчики могли затем это получить.
"/local/game/logs/myserver.log"
}));
//Вызов ProcessReady сообщает GameLift, что этот игровой сервер готов принимать входящие игровые сессии!
var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters);
if (processReadyOutcome.Success)
{
print("ProcessReady выполнен успешно.");
}
else
{
print("Сбой ProcessReady: " + processReadyOutcome.Error.ToString());
}
}
else
{
print("Сбой InitSDK: " + initSDKOutcome.Error.ToString());
}
}
void OnApplicationQuit()
{
//Обязательно вызывайте GameLiftServerAPI.Destroy() при выходе из приложения. Это сбрасывает локальное соединение с агентом GameLift.
GameLiftServerAPI.Destroy();
}
}
using UnrealBuildTool;
public class MyAwesomeGame : ModuleRules
{
public MyAwesomeGame(TargetInfo Target)
{
PublicDependencyModuleNames.AddRange(
// Удалите GameLiftServerSDK
new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }
);
bEnableExceptions = true;
}
}
#include "GameLiftFPS.h"
#include "Engine.h"
#include "EngineGlobals.h"
#include "GameLiftFPSGameMode.h"
#include "GameLiftFPSHUD.h"
#include "GameLiftFPSCharacter.h"
#include "GameLiftServerSDK.h"
AGameLiftFPSGameMode::AGameLiftFPSGameMode()
: Super()
{
//Запустим этот код только если включён GAMELIFT. Только для серверных целей!
#if WITH_GAMELIFT
//Сначала получаем модуль.
FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));
//InitSDK установит локальное соединение с агентом GameLift для последующей связи.
gameLiftSdkModule->InitSDK();
//Когда игровая сессия создаётся, GameLift отправляет запрос на активацию игровому серверу и передаёт объект игровой сессии, содержащий игровые свойства и другие настройки.
//Здесь игровой сервер должен выполнить действия на основе объекта игровой сессии.
//Как только игровой сервер будет готов принимать входящие подключения игроков, он должен вызвать GameLiftServerAPI.ActivateGameSession()
auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
{
gameLiftSdkModule->ActivateGameSession();
};
FProcessParameters* params = new FProcessParameters();
params->OnStartGameSession.BindLambda(onGameSession);
//Колбэк OnProcessTerminate. GameLift вызовет этот колбэк перед завершением работы экземпляра, на котором размещён этот игровой сервер.
//Это даёт игровому серверу возможность сохранить своё состояние, обменяться данными с сервисами и т. д. перед завершением работы.
//В данном случае мы просто сообщаем GameLift, что действительно собираемся завершиться.
params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});
//Это колбэк HealthCheck.
//GameLift будет вызывать этот колбэк примерно каждые 60 секунд.
//Здесь игровой сервер может проверить состояние зависимостей и т. п.
//Просто верните true, если всё в порядке, и false в противном случае.
//У игрового сервера есть 60 секунд, чтобы ответить своим статусом здоровья. GameLift по умолчанию примет значение 'false', если игровой сервер не ответит вовремя.
//В данном случае мы всегда в порядке!
params->OnHealthCheck.BindLambda([](){return true; });
//Этот игровой сервер сообщает GameLift, что будет слушать порт 7777 для входящих подключений игроков.
params->port = 7777;
//Здесь игровой сервер сообщает GameLift, какой набор файлов нужно загрузить после завершения игровой сессии.
//GameLift загрузит всё, что указано здесь, чтобы разработчики могли затем это получить.
TArray<FString> logfiles;
logfiles.Add(TEXT("aLogFile.txt"));
params->logParameters = logfiles;
//Вызов ProcessReady сообщает GameLift, что этот игровой сервер готов принимать входящие игровые сессии!
gameLiftSdkModule->ProcessReady(*params);
#endif
}