http_get


La description

Avec cette fonction, vous vous connectez à l'URL spécifiée afin de récupérer des informations. Comme il s'agit d'une fonction asynchrone, GameMaker Studio 2 ne bloquera pas en attendant une réponse, mais continuera à fonctionner à moins qu'il ne reçoive des informations de rappel. Cette information sera sous la forme d'une chaîne et déclenchera un événement asynchrone dans n'importe quelle instance qui a un défini dans leurs propriétés d'objet. Vous devez également noter que les paramètres de requête HTTP (les bits parfois "collés" à la fin d'une URL lorsque vous soumettez un formulaire sur une page Web) sont parfaitement acceptables lors de l'utilisation de cette fonction, par exemple:

http_get("http://www.YoYoGames.com/logon?username="+name);

transmettra la chaîne contenue dans la variable "nom" au serveur et récupérera les données de cette URL. Donc, essentiellement, chaque fois qu'un simple élément de données doit être transmis du client au serveur, ce serait un choix raisonnable en tant que fonction à utiliser.

Cette fonction générera plusieurs "rappels" qui sont récupérés par n'importe quel événement HTTP. Ceux-ci vont générer un ds_map (plus communément appelé "dictionnaire") qui est exclusif à cet événement et est stocké dans la variable spéciale async_load. Cette ds_map contiendra des valeurs différentes selon que des données sont renvoyées ou non. Par exemple, si vous avez demandé un fichier, l'événement se déclenchera plusieurs fois à la réception de chaque paquet de données afin que vous puissiez afficher une barre de progression, par exemple. La structure générale de la ds_map sera la suivante:

  1. id: L'ID qui a été renvoyé par la commande. Si vous déclenchez une série de http_ demandes, vous devez alors savoir à laquelle vous obtenez la réponse, et ainsi vous utiliseriez cette valeur pour comparer à la valeur que vous avez stockée lorsque vous avez envoyé la demande pour trouver la bonne.

  2. status: Renvoie une valeur inférieure à 0 pour une erreur, 0 pour complete et 1 pour la réception de paquets (voir ci-dessous pour plus de détails).

  3. résultat: Les données reçues (chaîne uniquement).

  4. url: l' URL complète que vous avez demandée

  5. http_status: le code d'état brut http (si disponible). Cela renvoie le code d'état Web standard pour la plupart des navigateurs, par exemple: 304 pour "Non modifié" ou 204 pour "Aucun contenu", etc...

Si plusieurs paquets sont retournés à votre jeu, la clé de rappel "status" retournera 1, auquel cas le fichier ds_map aura les clés supplémentaires suivantes:

  1. "contentLength": C'est la taille du fichier que le serveur web a dit que vous devriez recevoir (peut-être -1 si le serveur ne retourne pas ces données).

  2. "sizeDownloaded": La taille des données qui ont déjà été téléchargées.
REMARQUE: vous devez être conscient qu'en raison de la protection XSS dans les navigateurs, les demandes et les tentatives de chargement de ressources à partir de plusieurs domaines sont bloquées et peuvent renvoyer des résultats vierges. Veuillez consulter la section sur les problèmes inter-domaines pour plus de détails.


Syntaxe:

http_get(url);

Argument La description
url L'adresse Web du serveur à partir duquel vous souhaitez obtenir des informations


Résultats:

Real


Exemple étendu:

le http_get La fonction peut être appelée à partir de n'importe quel événement, et comme elle est asynchrone, le rappel peut être presque instantané ou prendre plusieurs secondes. Appeler la fonction est simple et ressemblerait à ceci:

get = http_get("http://www.MacSweeneyGames.com/logon?username=" + name);

Le code ci-dessus passera la chaîne contenue dans la variable "nom" au serveur donné ainsi que récupérer les données de cette URL, déclenchant un événement Async qui contiendra async_load ds_map (l'index de carte async_load sera stocké dans la variable " obtenir "afin que vous puissiez vérifier le rappel correct). L'événement Async déclenché serait le sous-événement HTTP, et dans ce cas vous auriez ce qui suit:

if ds_map_find_value(async_load, "id") == get
   {
   if ds_map_find_value(async_load, "status") == 0
      {
      r_str = ds_map_find_value(async_load, "result");
      }
   else
      {
      r_str = "null";
      }
   }

Le code ci-dessus va d'abord vérifier l'identifiant de la carte ds_map qui a été créée, puis vérifier l'état du rappel. Si la valeur est égale à 0 (succès de la signalisation), le résultat du rappel sera alors stocké dans une variable pour une utilisation future, sinon la variable sera mise à une valeur par défaut (dans ce cas "null").