If you are looking to switch from using AWS Gamelift to Edgegap, the following simple steps will get you running in no time. Before getting started, we expect that:
You currently use AWS Gamelift
You currently have a working game server build on Gamelift
You will benefit from way more locations with the Edgegap solution.
Remove AWS Gamelift SDK
The first step to switch to Edgegap is to remove the code that initilaizes AWS Gamelift within your game server. This is to reduce overhead and prevent errors. The code you are looking to remove probably looks like the following:
Unity (C#)
using UnityEngine;
using Aws.GameLift.Server;
using System.Collections.Generic;
public class GameLiftServerExampleBehavior : MonoBehaviour
{
//This is an example of a simple integration with GameLift server SDK that will make game server processes go active on GameLift!
public void Start()
{
//Identify port number (hard coded here for simplicity) the game server is listening on for player connections
var listeningPort = 7777;
//InitSDK will establish a local connection with GameLift's agent to enable further communication.
var initSDKOutcome = GameLiftServerAPI.InitSDK();
if (initSDKOutcome.Success)
{
ProcessParameters processParameters = new ProcessParameters(
(gameSession) => {
//When a game session is created, GameLift sends an activation request to the game server and passes along the game session object containing game properties and other settings.
//Here is where a game server should take action based on the game session object.
//Once the game server is ready to receive incoming player connections, it should invoke GameLiftServerAPI.ActivateGameSession()
GameLiftServerAPI.ActivateGameSession();
},
(updateGameSession) => {
//When a game session is updated (e.g. by FlexMatch backfill), GameLiftsends a request to the game
//server containing the updated game session object. The game server can then examine the provided
//matchmakerData and handle new incoming players appropriately.
//updateReason is the reason this update is being supplied.
},
() => {
//OnProcessTerminate callback. GameLift will invoke this callback before shutting down an instance hosting this game server.
//It gives this game server a chance to save its state, communicate with services, etc., before being shut down.
//In this case, we simply tell GameLift we are indeed going to shutdown.
GameLiftServerAPI.ProcessEnding();
},
() => {
//This is the HealthCheck callback.
//GameLift will invoke this callback every 60 seconds or so.
//Here, a game server might want to check the health of dependencies and such.
//Simply return true if healthy, false otherwise.
//The game server has 60 seconds to respond with its health status. GameLift will default to 'false' if the game server doesn't respond in time.
//In this case, we're always healthy!
return true;
},
listeningPort, //This game server tells GameLift that it will listen on port 7777 for incoming player connections.
new LogParameters(new List<string>()
{
//Here, the game server tells GameLift what set of files to upload when the game session ends.
//GameLift will upload everything specified here for the developers to fetch later.
"/local/game/logs/myserver.log"
}));
//Calling ProcessReady tells GameLift this game server is ready to receive incoming game sessions!
var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters);
if (processReadyOutcome.Success)
{
print("ProcessReady success.");
}
else
{
print("ProcessReady failure : " + processReadyOutcome.Error.ToString());
}
}
else
{
print("InitSDK failure : " + initSDKOutcome.Error.ToString());
}
}
void OnApplicationQuit()
{
//Make sure to call GameLiftServerAPI.Destroy() when the application quits. This resets the local connection with GameLift's agent.
GameLiftServerAPI.Destroy();
}
}
Unreal Engine (C++)
using UnrealBuildTool;
public class MyAwesomeGame : ModuleRules
{
public MyAwesomeGame(TargetInfo Target)
{
PublicDependencyModuleNames.AddRange(
// Remove 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()
{
//Let's run this code only if GAMELIFT is enabled. Only with Server targets!
#if WITH_GAMELIFT
//Getting the module first.
FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));
//InitSDK will establish a local connection with GameLift's agent to enable further communication.
gameLiftSdkModule->InitSDK();
//When a game session is created, GameLift sends an activation request to the game server and passes along the game session object containing game properties and other settings.
//Here is where a game server should take action based on the game session object.
//Once the game server is ready to receive incoming player connections, it should invoke GameLiftServerAPI.ActivateGameSession()
auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
{
gameLiftSdkModule->ActivateGameSession();
};
FProcessParameters* params = new FProcessParameters();
params->OnStartGameSession.BindLambda(onGameSession);
//OnProcessTerminate callback. GameLift will invoke this callback before shutting down an instance hosting this game server.
//It gives this game server a chance to save its state, communicate with services, etc., before being shut down.
//In this case, we simply tell GameLift we are indeed going to shutdown.
params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});
//This is the HealthCheck callback.
//GameLift will invoke this callback every 60 seconds or so.
//Here, a game server might want to check the health of dependencies and such.
//Simply return true if healthy, false otherwise.
//The game server has 60 seconds to respond with its health status. GameLift will default to 'false' if the game server doesn't respond in time.
//In this case, we're always healthy!
params->OnHealthCheck.BindLambda([](){return true; });
//This game server tells GameLift that it will listen on port 7777 for incoming player connections.
params->port = 7777;
//Here, the game server tells GameLift what set of files to upload when the game session ends.
//GameLift will upload everything specified here for the developers to fetch later.
TArray<FString> logfiles;
logfiles.Add(TEXT("aLogFile.txt"));
params->logParameters = logfiles;
//Calling ProcessReady tells GameLift this game server is ready to receive incoming game sessions!
gameLiftSdkModule->ProcessReady(*params);
#endif
}
Containerize your game server
The second step towards switching to Edgegap is to containerize your game server. You can follow the following guides:
You will have to push your container on a repository. You can use Edgegap's private repository or any other option.
Create an Application on Edgegap
Now that your container is on a repository, you will have to create an Application on Edgegap. This Application will represent your game sever. With this application, you will be able to deploy your server.
You can now deploy your server on demand for your players!