Aller au contenu principal

Unreal HTTP

Dans le cas de communications ponctuelles le protocole HTTP peut suffire. Les modules fournis permettent au serveur d'envoyer des requêtes mais aussi de fonctionner comme serveur web HTTP.

HOWTO

En tant que client

  1. Ajoutez le module HTTP aux dépendances de votre projet/plugin en modifiant son fichier *.Build.cs.
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
"HTTP"
}
  1. Créez la requête. Ici un simple get vers google.com.
auto request = FHttpModule::Get().CreateRequest();
request->SetURL(FString("http://google.com"));
request->SetVerb(FString("GET"));
  1. Définissez la logique à appliquer sur la réponse.
request->OnProcessRequestComplete().BindLambda(
[](FHttpRequestPtr request, FHttpResponsePtr response, bool success) {
if (success) {

UE_LOG(LogTemp, Display, TEXT("Successful request to Google"));

}
}
);
  1. Lancez la requête.
request->ProcessRequest();

En tant que serveur

  1. Ajoutez les modules HTTP et HTTPServer aux dépendances de votre projet/plugin en modifiant son fichier *.Build.cs.
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
"HTTP",
"HTTPServer"
}
  1. Assurez vous que le module est bien chargé avant toute utilisation dans vos classes.
if (!FModuleManager::Get().IsModuleLoaded("HttpServer")) {
FModuleManager::Get().LoadModule("HttpServer");
}
  1. Créez le Router. Ici, on souhaite recevoir les requêtes sur le port local 4000.
TSharedPtr<IHttpRouter> Router = FHttpServerModule::Get().GetHttpRouter(4000);
  1. Liez une Route à votre Router. Tous les verbes habituels du protocole HTTP sont listés parmi EHttpServerRequestVerbs. Le chemin doit être une classe FHttpPath. Ici on établit une route GET au chemin "localhost:4000/". On lui associe un handler, une fonction qu'on défini par la suite.
FHttpPath path;
path.SetPath("/");
FHttpRouteHandle getHandle = Router->BindRoute(path, EHttpServerRequestVerbs::VERB_GET, handlerGET());
  1. Implémentez le handler associé à la route. Il s'agit d'une fonction qui retourne un FHttpRequestHandler, ce dernier est une fonction lambda à laquelle on transmettra la requête et qui générera la réponse via la fonction OnComplete.
FHttpRequestHandler UYourCustomClass::handlerGET()
{
FHttpRequestHandler handler = [](const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete) -> bool {
OnComplete(FHttpServerResponse::Create(TEXT("{\"Titre\":\"Contenu\"})), TEXT("application/json")));
return true;
};
return handler;
}
  1. Enfin, démarrez les listeners.
FHttpServerModule::Get().StartAllListeners();
  1. Compilez, instantiez votre classe dans l'environnement Unreal, lancez le projet. Vous pouvez dès lors communiquer par requêtes HTTP sur les routes que vous avez créé.