# Passer de Gamelift

Si vous souhaitez passer d'AWS Gamelift à Edgegap, les étapes simples suivantes vous permettront de démarrer en un rien de temps. Avant de commencer, nous supposons que :

* Vous utilisez actuellement AWS Gamelift
* Vous disposez actuellement d'une build de serveur de jeu fonctionnelle sur Gamelift
* Vous avez déjà [créé](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md) et [déployé](/docs.edgegap.com-fr/learn/orchestration.md) une application sur Edgegap

{% hint style="info" %}
Vous bénéficierez de bien plus d'emplacements avec la solution Edgegap.
{% endhint %}

### Supprimer le SDK AWS Gamelift

La première étape pour passer à Edgegap est de supprimer le code qui initialise AWS Gamelift dans votre serveur de jeu. Cela permet de réduire la charge et d'éviter les erreurs. Le code que vous cherchez à supprimer ressemble probablement à ce qui suit :

#### Unity (C#)

```cs
using UnityEngine;
using Aws.GameLift.Server;
using System.Collections.Generic;

public class GameLiftServerExampleBehavior : MonoBehaviour
{
    //Ceci est un exemple d'intégration simple avec le SDK serveur GameLift qui rendra les processus du serveur de jeu actifs sur GameLift !
    public void Start()
    {
        //Identifier le numéro de port (codé en dur ici pour simplifier) sur lequel le serveur de jeu écoute les connexions des joueurs
        var listeningPort = 7777;

        //InitSDK établira une connexion locale avec l'agent de GameLift pour permettre une communication ultérieure.
        var initSDKOutcome = GameLiftServerAPI.InitSDK();
        if (initSDKOutcome.Success)
        {
            ProcessParameters processParameters = new ProcessParameters(
                (gameSession) => {
                    //Lorsqu'une session de jeu est créée, GameLift envoie une demande d'activation au serveur de jeu et transmet l'objet session de jeu contenant les propriétés et autres paramètres.
                    //C'est ici qu'un serveur de jeu doit agir en fonction de l'objet session de jeu.
                    //Une fois que le serveur de jeu est prêt à recevoir des connexions de joueurs entrantes, il doit invoquer GameLiftServerAPI.ActivateGameSession()
                    GameLiftServerAPI.ActivateGameSession();
                },
                (updateGameSession) => {
                    //Lorsqu'une session de jeu est mise à jour (par exemple par un backfill FlexMatch), GameLift envoie une demande au serveur
                    //contenant l'objet session de jeu mis à jour. Le serveur de jeu peut alors examiner les
                    //matchmakerData fournis et gérer correctement les nouveaux joueurs entrants.
                    //updateReason est la raison pour laquelle cette mise à jour est fournie.
                },
                () => {
                    //Callback OnProcessTerminate. GameLift invoquera ce callback avant d'arrêter une instance hébergeant ce serveur de jeu.
                    //Cela donne à ce serveur de jeu la possibilité de sauvegarder son état, de communiquer avec des services, etc., avant d'être arrêté.
                    //Dans ce cas, nous disons simplement à GameLift que nous allons effectivement nous arrêter.
                    GameLiftServerAPI.ProcessEnding();
                },
                () => {
                    //Ceci est le callback HealthCheck.
                    //GameLift invoquera ce callback toutes les ~60 secondes.
                    //Ici, un serveur de jeu pourrait vouloir vérifier la santé des dépendances, etc.
                    //Retourner simplement true si sain, false sinon.
                    //Le serveur de jeu dispose de 60 secondes pour répondre avec son état de santé. GameLift par défaut prendra 'false' si le serveur de jeu ne répond pas à temps.
                    //Dans ce cas, nous sommes toujours en bonne santé !
                    return true;
                },
                listeningPort, //Ce serveur de jeu indique à GameLift qu'il écoutera sur le port 7777 pour les connexions des joueurs entrants.
                new LogParameters(new List<string>()
                {
                    //Ici, le serveur de jeu indique à GameLift quels fichiers télécharger lorsque la session de jeu se termine.
                    //GameLift téléchargera tout ce qui est spécifié ici pour que les développeurs puissent les récupérer plus tard.
                    "/local/game/logs/myserver.log"
                }));

            //Appeler ProcessReady indique à GameLift que ce serveur de jeu est prêt à recevoir des sessions de jeu entrantes !
            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()
    {
        //Assurez-vous d'appeler GameLiftServerAPI.Destroy() lorsque l'application se ferme. Cela réinitialise la connexion locale avec l'agent de GameLift.
        GameLiftServerAPI.Destroy();
    }
}
```

#### Unreal Engine (C++)

```cpp
using UnrealBuildTool;

public class MyAwesomeGame : ModuleRules
{
	public MyAwesomeGame(TargetInfo Target)
	{
		PublicDependencyModuleNames.AddRange(
            // Supprimer GameLiftServerSDK
            new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }
        );
        bEnableExceptions = true;
	}
}
```

```cpp
#include "GameLiftFPS.h"
#include "Engine.h"
#include "EngineGlobals.h"
#include "GameLiftFPSGameMode.h"
#include "GameLiftFPSHUD.h"
#include "GameLiftFPSCharacter.h"
#include "GameLiftServerSDK.h"

AGameLiftFPSGameMode::AGameLiftFPSGameMode()
	: Super()
{

//Exécutons ce code uniquement si GAMELIFT est activé. Uniquement pour les cibles Serveur !
#if WITH_GAMELIFT

	//Récupération du module en premier.
	FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

	//InitSDK établira une connexion locale avec l'agent de GameLift pour permettre une communication ultérieure.
	gameLiftSdkModule->InitSDK();

	//Lorsqu'une session de jeu est créée, GameLift envoie une demande d'activation au serveur de jeu et transmet l'objet session de jeu contenant les propriétés et autres paramètres.
	//C'est ici qu'un serveur de jeu doit agir en fonction de l'objet session de jeu.
	//Une fois que le serveur de jeu est prêt à recevoir des connexions de joueurs entrantes, il doit invoquer GameLiftServerAPI.ActivateGameSession()
	auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
	{
		gameLiftSdkModule->ActivateGameSession();
	};

	FProcessParameters* params = new FProcessParameters();
	params->OnStartGameSession.BindLambda(onGameSession);

	//Callback OnProcessTerminate. GameLift invoquera ce callback avant d'arrêter une instance hébergeant ce serveur de jeu.
	//Cela donne à ce serveur de jeu la possibilité de sauvegarder son état, de communiquer avec des services, etc., avant d'être arrêté.
	//Dans ce cas, nous disons simplement à GameLift que nous allons effectivement nous arrêter.
	params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});

	//Ceci est le callback HealthCheck.
	//GameLift invoquera ce callback toutes les ~60 secondes.
	//Ici, un serveur de jeu pourrait vouloir vérifier la santé des dépendances, etc.
	//Retourner simplement true si sain, false sinon.
	//Le serveur de jeu dispose de 60 secondes pour répondre avec son état de santé. GameLift par défaut prendra 'false' si le serveur de jeu ne répond pas à temps.
	//Dans ce cas, nous sommes toujours en bonne santé !
	params->OnHealthCheck.BindLambda([](){return true; });

	//Ce serveur de jeu indique à GameLift qu'il écoutera sur le port 7777 pour les connexions des joueurs entrants.
	params->port = 7777;

	//Ici, le serveur de jeu indique à GameLift quels fichiers télécharger lorsque la session de jeu se termine.
	//GameLift téléchargera tout ce qui est spécifié ici pour que les développeurs puissent les récupérer plus tard.
	TArray<FString> logfiles;
	logfiles.Add(TEXT("aLogFile.txt"));
	params->logParameters = logfiles;

	//Appeler ProcessReady indique à GameLift que ce serveur de jeu est prêt à recevoir des sessions de jeu entrantes !
	gameLiftSdkModule->ProcessReady(*params);
#endif
}
```

### Conteneurisez votre serveur de jeu

### Publiez votre conteneur dans un repository

Vous devrez pousser votre conteneur dans un repository. Vous pouvez utiliser le [repository privé](/docs.edgegap.com-fr/learn/advanced-features/edgegap-container-registry.md) d'Edgegap ou toute autre option.

### Créer une application sur Edgegap

Maintenant que votre conteneur est dans un repository, vous devrez [créer une Application](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md) sur Edgegap. Cette Application représentera votre serveur de jeu. Avec cette application, vous pourrez déployer votre serveur.

Vous pouvez maintenant [déployer](/docs.edgegap.com-fr/learn/orchestration/deployments.md) votre serveur à la demande pour vos joueurs !


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.edgegap.com/docs.edgegap.com-fr/docs/tools-and-integrations/gamelift-to-arbitrium.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
