LSL HTTP server/examples/fr

=== 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>