Difference between revisions of "LSL HTTP server/examples"

From Second Life Wiki
Jump to navigation Jump to search
Line 33: Line 33:
<lsl>
<lsl>
key request_id = NULL_KEY;
key request_id = NULL_KEY;
 
default
default
{
{
Line 40: Line 40:
         llRequestPublicURL();
         llRequestPublicURL();
     }
     }
 
     http_request(key id, string method, string body)
     http_request(key id, string method, string body)
     {
     {
        llSay(0,method);
        integer handled = FALSE;
         if (method == URL_REQUEST_GRANTED)
         if (method == URL_REQUEST_GRANTED)
         {
         {
             llSay(0,"URL: " + body);
             llSay(0,"URL: " + body);
            handled = TRUE;
         }
         }
         else if (method == URL_REQUEST_DENIED)
         else if (method == URL_REQUEST_DENIED)
         {
         {
             llSay(0, "Something went wrong, no url. " + body);
             llSay(0, "Something went wrong, no url. " + body);
            handled = TRUE;
         }
         }
         else if (method == "GET")
         else if (method == "GET")
Line 68: Line 64:
                 llSensor("",NULL_KEY,AGENT,96,PI);
                 llSensor("",NULL_KEY,AGENT,96,PI);
             }
             }
            handled = TRUE;
         }
         }
          
         else
        if (!handled)
         {
         {
             llHTTPResponse(id,500,"Unsupported method.");
             llHTTPResponse(id,500,"Unsupported method.");
         }
         }
     }
     }
   
     no_sensor()
     no_sensor()
     {
     {
Line 82: Line 76:
         request_id = NULL_KEY;
         request_id = NULL_KEY;
     }
     }
   
     sensor(integer n)
     sensor(integer n)
     {
     {
Line 96: Line 90:
}
}
</lsl>
</lsl>
=== Url Persistence ===
=== Url Persistence ===

Revision as of 16:10, 18 July 2008

Hello World!

Classic example. <lsl> default {

   state_entry()
   {
       llRequestPublicURL();
   }
   http_request(key id, string method, string body)
   {
       if (method == URL_REQUEST_GRANTED)
       {
           llSay(0,"URL: " + body);
       }
       else if (method == URL_REQUEST_DENIED)
       {
           llSay(0, "Something went wrong, no url. " + body);
       }
       else if (method == "GET")
       {
           llHTTPResponse(id,200,"Hello World!");
       }
   }

} </lsl>

Visitor List

A list of residents within sensor range of the server.
Notes:

  • It is cheesy and only handles one request at a time. This was just so the script didn't fill out with list management.
  • Unlike the hello world above, this one will give a response for methods it doesn't handle.

<lsl> key request_id = NULL_KEY;

default {

   state_entry()
   {
       llRequestPublicURL();
   }

   http_request(key id, string method, string body)
   {
       if (method == URL_REQUEST_GRANTED)
       {
           llSay(0,"URL: " + body);
       }
       else if (method == URL_REQUEST_DENIED)
       {
           llSay(0, "Something went wrong, no url. " + body);
       }
       else if (method == "GET")
       {
           if (request_id != NULL_KEY)
           {
               // This is cheesy.
               // Handling multiple requests means list management though.
               llHTTPResponse(id,200,"Sorry, busy right now.\n\tTry again soon.");
           }
           else
           {
               request_id = id;
               llSensor("",NULL_KEY,AGENT,96,PI);
           }
       }
       else
       {
           llHTTPResponse(id,500,"Unsupported method.");
       }
   }

   no_sensor()
   {
       llHTTPResponse(request_id, 200, "There is no one here.");
       request_id = NULL_KEY;
   }

   sensor(integer n)
   {
       string output = "There are " + (string)n + " avatars nearby:";
       integer i;
       for (i = 0;i<n;++i)
       {
           output += "\n\t" + llDetectedName(i);
       }
       llHTTPResponse(request_id,200,output);
       request_id = NULL_KEY;
   }

} </lsl>

Url Persistence