LSL HTTP server/examples/fr - Second Life Wiki

DOWNTIME ANNOUNCEMENT - Maintenance will be performed from 1AM-3AM Pacific Time on 2010-03-20 (tonight). Please do not edit any pages during this time.

Looking for Viewer 2 Beta help? Right this way!

LSL HTTP server/examples/fr

From Second Life Wiki

Page Principale > LSL HTTP server > examples > LSL HTTP server/examples/fr (Redirected from LSL http server/examples/fr)
Jump to: navigation, search

Hello World!

Exemple classique, le plus petit script à base de http_request possible.

 
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 !");
    }
}
 

Une version légèrement plus robuste :

 
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.");
    }
}
 

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.

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;
    }
}
 

Presistance de l'URL - compteur de visiteurs

Un "hello world" plus complet, a une URL en permanence et tient à jour un compteur de visiteurs.

 
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.");
    }
}