LSL HTTP server/examples/fr

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Hello World!

Exemple classique, le plus petit script à base de http_request possible. <lsl> default {

   state_entry()
   {
       llRequestURL();
   }
   http_request(key id, string methode, string corps)
   {
       if (methode == URL_REQUEST_GRANTED)
           llSay(0, "URL : " + corps);
       else if (methode == "GET")
           llHTTPResponse(id, 200, "Bonjour à tous !");
   }

} </lsl>

Une version légèrement plus robuste : <lsl> default {

   state_entry()
   {
       llRequestURL();
   }
   http_request(key id, string methode, string corps)
   {
       if (methode == URL_REQUEST_GRANTED)
           llSay(0, "URL : " + corps);
       else if (methode == URL_REQUEST_DENIED)
           llSay(0, "Quelque chose s'est mal passé, pas d'URL. " + corps);
       else if (methode == "GET")
           llHTTPResponse(id, 200, "Bonjour à tous !");
       else
           llHTTPResponse(id, 405, "Méthode pas encore prise en charge.");
   }

} </lsl>

Liste de visiteurs

Une liste des visiteurs à portée de détection du serveur.
Notes :

  • Comporte une méthode pour gérer des requêtes multiples alors que l'on attend le retour de requêtes asynchrones.

<lsl>integer detection = FALSE;

list requetes;

envoie_reponse(string corps) {

   integer l = llGetListLength(requetes);
   integer j;
   for (j = 0; j < l; ++j)
       llHTTPResponse(llList2Key(requetes, j), 200, corps);
   requetes = [];

}

default {

   state_entry()
   {
       llRequestURL();
   }

   http_request(key id, string methode, string corps)
   {
       if (methode == URL_REQUEST_GRANTED)
           llSay(0, "URL: " + corps);
       else if (methode == URL_REQUEST_DENIED)
           llSay(0, "Et flûte. " + corps);
       else if (methode == "GET")
       {
           if (!detection)
           {
               llSensor("", NULL_KEY,AGENT, 96, PI);
               detection = TRUE;
           }
           requetes += [ id ];
       }
       else
           llHTTPResponse(id, 405, "Hein ?");
   }

   no_sensor()
   {
       envoie_reponse("C'est désert ici.");
       detection = FALSE;
   }

   sensor(integer n)
   {
       string rapport;
       integer i;
       if (n < 16) rapport = "Il y a " + (string) n + " avatars dans le coin:";
       else rapport = "C'est la folie ici, il y a au moins 16 avatars dans le coin.";
       for (i = 0; i < n; ++i)
           rapport += "\n\t" + llDetectedName(i);
       
       envoie_reponse(rapport);
       detection = FALSE;
   }

} </lsl>

Presistance de l'URL - compteur de visiteurs

Un "hello world" plus complet, a une URL en permanence et tient à jour un compteur de visiteurs. <lsl> string url; integer visites;

initialisation() {

   llSetObjectName("Serveur HTTP");
   url = "";
   llRequestURL();
   visites = (integer)llGetObjectDesc();
   llSetText((string) visites + " visiteurs.", <1,1,0>, 1);

}

default {

   state_entry() { initialisation(); }
   on_rez(integer n) { initialisation(); }
   
   changed(integer c)
   {
       if (c & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT) )
           initialisation();
   }
   
   touch_start(integer n)
   {
       llSay(0, "Mon URL est : " + url);
   }

   http_request(key id, string methode, string corps)
   {
       if (methode == URL_REQUEST_GRANTED)
           url = corps;
       else if (methode == URL_REQUEST_DENIED)
           llSay(0, "Souci, pas d'URL. " + corps);
       else if (methode == "GET")
       {
           ++visites;
           llSetObjectDesc((string) visites);
           llSetText((string) visites + " visiteurs.", <1,1,0>, 1);
           llHTTPResponse(id, 200, "Bonjour !  Vous êtes le visiteur numéro " + (string) visites + ".");
       }
       else
           llHTTPResponse(id, 405, "Méthode inconnue.");
   }

} </lsl>