Difference between revisions of "Dataserver"

From Second Life Wiki
Jump to navigation Jump to search
Line 31: Line 31:
{{!}}}
{{!}}}
|caveats=
|caveats=
*Dataserver answers do not necessarily come in the order they were requested. So, if there are multiple pending requests, always use the queryid key to determine which answer is being received.
*Dataserver answers do not necessarily come in the order they were requested.
*Dataserver requests will trigger all dataserver() events in all scripts within the same prim where the request was made. dataserver() events will not be triggered in scripts contained in other prims in the same linked object. So, if there are multiple dataserver() events in multiple scripts in the same prim, always use the queryid key to determine which answer is being received.
**If there are multiple pending requests, always use the queryid key to determine which answer is being received.
*Dataserver requests will trigger '''dataserver''' events in all scripts within the same prim where the request was made.
**If there are multiple scripts with '''dataserver''' events in the same prim, always use the queryid key to determine which answer is being received.
**'''dataserver''' events will not be triggered in scripts contained in other prims in the same linked object.
|examples=<lsl>key kQuery;
|examples=<lsl>key kQuery;
integer iLine = 0;
integer iLine = 0;
Line 77: Line 80:
|cat4=Region
|cat4=Region
|cat5=Script
|cat5=Script
|cat6
|cat6=Prim
}}
}}

Revision as of 22:33, 9 March 2008

Description

Event: dataserver( key queryid, string data ){ ; }

Triggered when task receives asynchronous data

• key queryid matches the return of the requesting function
• string data the requested data (cast as a string as necessary).
Function Input Decode Description
llGetNotecardLine string The line in the requested notecard, limited to 255 bytes.
If EOF the line requested is past the end of the notecard.
llGetNumberOfNotecardLines (integer) The number of lines in the notecard requested.
llRequestAgentData DATA_ONLINE 1 (integerboolean If the requested agent is online
DATA_NAME 2 string The requested agent's legacy name
DATA_BORN 3 string The account creation/"born on" date as a string in an ISO 8601 format of YYYY-MM-DD.
DATA_RATING 4 llCSV2List() Deprecated: Returns [0, 0, 0, 0, 0, 0]
Used to return: [pos_behavior, neg_behavior, pos_appearance, neg_appearance, pos_building, neg_building]
DATA_PAYINFO 8 (integermask Flag Description
PAYMENT_INFO_ON_FILE 0x1 If payment info is on file.
PAYMENT_INFO_USED 0x2 If payment info has been used.
llRequestInventoryData Landmark (vector) The vector data received by dataserver is a global position as an offset from the current region's origin (<0,0,0>). To obtain the absolute global position of a landmark, add llGetRegionCorner() to the vector.
llRequestSimulatorData DATA_SIM_POS 5 (vector) The regions global position.
DATA_SIM_STATUS 6 string Value Description
"up" region currently up and running
"down" region currently down
"starting" region currently starting
"stopping" region currently stopping
"crashed" region has crashed
"unknown" region status unknown or unknown region
DATA_SIM_RATING 7 string Value Maturity rating
"PG" Parcel lght G.png General
"MATURE" Parcel lght M.png Moderate
"ADULT" Parcel lght A.png Adult
"UNKNOWN" rating or region unknown

Caveats

  • Dataserver answers do not necessarily come in the order they were requested.
    • If there are multiple pending requests, always use the queryid key to determine which answer is being received.
  • Dataserver requests will trigger dataserver events in all scripts within the same prim where the request was made.
    • If there are multiple scripts with dataserver events in the same prim, always use the queryid key to determine which answer is being received.
    • dataserver events will not be triggered in scripts contained in other prims in the same linked object.


Examples

<lsl>key kQuery; integer iLine = 0; default {

   state_entry() {
       llSay(0, "Reading notecard...");
       kQuery = llGetNotecardLine("My Notecard", iLine);
   }
   dataserver(key query_id, string data) {
       if (query_id == kQuery) {
           // this is a line of our notecard
           if (data == EOF) {    
               llSay(0, "No more lines in notecard, read " + (string)iLine + " lines.");
           } else {
               // increment line count
               llSay(0, "Line " + (string)iLine + ": " + data);
               
               //request next line
               ++iLine;
               kQuery = llGetNotecardLine("My Notecard", iLine);
           }
       }
   }

}</lsl>

Deep Notes

Signature

event void dataserver( key queryid, string data );