Difference between revisions of "Coordinator TestUnits.lsl"

From Second Life Wiki
Jump to navigation Jump to search
m (lsl code tagging)
m (typos)
Line 23: Line 23:
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//
//
//  All commmands will be :: seperated
//  All commmands will be :: separated
//  lists in string form.
//  lists in string form.
//
//
Line 30: Line 30:
//////////////////////////////////////////////
//////////////////////////////////////////////
//
//
//  link message commands will be recieved and sent on the toAllChannel
//  link message commands will be received and sent on the toAllChannel
//
//
//////// INPUT ///////////
//////// INPUT ///////////
Line 134: Line 134:
         //find first variable name of concern - unitKey
         //find first variable name of concern - unitKey
         integer index = llListFindList( unitParameters, ["unitKey"] );
         integer index = llListFindList( unitParameters, ["unitKey"] );
         //use the posistion of the variable name to update unitKey list  
         //use the position of the variable name to update unitKey list  
         unitKeys += llList2List( unitParameters, index + 1, index + 1);                     
         unitKeys += llList2List( unitParameters, index + 1, index + 1);                     
          
          
         //find variable name of concern - unitName
         //find variable name of concern - unitName
         index = llListFindList( unitParameters, ["unitName"] );
         index = llListFindList( unitParameters, ["unitName"] );
         //use the posistion of the variable name to update unitName list  
         //use the position of the variable name to update unitName list  
         unitNames += llList2List( unitParameters, index + 1, index + 1);                     
         unitNames += llList2List( unitParameters, index + 1, index + 1);                     
          
          
         //find variable name of concern - groupName
         //find variable name of concern - groupName
         index = llListFindList( unitParameters, ["groupName"] );
         index = llListFindList( unitParameters, ["groupName"] );
         //use the posistion of the variable name to update unitName list  
         //use the position of the variable name to update unitName list  
         unitGroups += llList2List( unitParameters, index + 1, index + 1);                   
         unitGroups += llList2List( unitParameters, index + 1, index + 1);                   
          
          
Line 186: Line 186:
         llMessageLinked(LINK_SET, toAllChannel, "SetUnitCount::" + (string)llGetListLength( unitKeys ), NULL_KEY );
         llMessageLinked(LINK_SET, toAllChannel, "SetUnitCount::" + (string)llGetListLength( unitKeys ), NULL_KEY );
          
          
         //initialze counter to zero to use as list index
         //initialize counter to zero to use as list index
         integer increment = 0;
         integer increment = 0;
         //get the size of the lists
         //get the size of the lists
Line 219: Line 219:
//////////      Function:  Initialize
//////////      Function:  Initialize
//////////
//////////
//////////      Input:      no input paramaters
//////////      Input:      no input parameters
//////////                     
//////////                     
//////////      Output:    no return value
//////////      Output:    no return value

Revision as of 07:51, 12 April 2008

<lsl> /////////////////////////////////////////////////////////////////////////////////// /////// /////// /////// /////// Coordinator_TestUnits /////// /////// /////// /////// This is the coordinator script that maintains the record of testUnits. It should be /////// included in the coordinator. /////// /////// //////////////////////////////////////////////////////////////////////////////////////

//Coordinator_TestUnits .1 -> initial framework 6.28.2007 //Coordinator_Coordinator .2 -> bug fixing and testing 7.8.2007

////////////////////////////////////////////////////////////////////////////////////// // // Command Protocol // ////////////////////////////////////////////////////////////////////////////////////// // // All commmands will be :: separated // lists in string form. // ////////////////////////////////////////////// // LINK MESSAGE commands ////////////////////////////////////////////// // // link message commands will be received and sent on the toAllChannel // //////// INPUT /////////// // // Reset - resets this script // format example -> Reset // // ClearAll - empties all lists // format example -> ClearAll // // AddUnitToList - provides unit information of newly registered list // format example -> AddUnitToList::unitKey::00000-0000-0000-00000::unitName::TestUnit1::groupName::Group1 // // UpdateUnitStatus - provides unit status information // format example -> UpdateUnitStatus::unitKey::00000-0000-0000-00000::unitStatus::PASS // // ReportUnitStats - initiates a ReportStats output // format example -> ReportUnitStats // // RequestUnitCount - request for number of units registered // format example -> RequestUnitCount // //////// OUTPUT /////////// // // ReportStats - sends out unit information including status // format example -> ReportStats::unitKey::00000-0000-0000-00000::unitName::TestUnit1::groupName::Group1::status::PASS // // SetUnitCount - provides number of registered units // format example -> SetUnitCount::1 /////////////////////////////////////////////////////////////////////////////////////////////////////////////



// Global Variables

integer toAllChannel = -255; // general channel - linked message

integer debug = 0; // level of debug message integer debugChannel = DEBUG_CHANNEL; // output channel for debug messages


     // The following lists are parameters associated with registered test units.
     // A specific unit will have the same list index on all of the lists. 

list unitKeys = []; // object keys list of registered test units list unitNames = []; // list of registered unit names list unitGroups = []; // list of registered unit group

list statusOfUnits = []; // status of the registered test unit

                                      // PASS - unit completed test process successfully
                                      // FAIL - unit did not complete the process successfully
                                      // REGISTERED - unit is now ready for test
                                      

////////////////////////////////////////////////////////////////////////////////////////////////// ////////// ////////// Function: ParseCommand ////////// ////////// Input: string message - command to be parsed ////////// ////////// Output: no return value ////////// ////////// Purpose: This function calls various other functions or sets globals ////////// depending on message string. Allows external command calls ////////// from chat controlChannel ////////// ////////// Issues: no known issues ////////// ////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ParseCommand(string message) {

   if(debug > 1)llSay(debugChannel, llGetScriptName()+ "->ParseCommand: " + message);
  
   //reset all scripts 
   if(message == "reset")
   {
       //reset this script 
       llResetScript();                   
   }
   
   //ClearAll()
   else if(message == "ClearAll")
   {
       //reset the lists to an empty state
       unitKeys = [];                    
       unitNames = [];                   
       unitGroups = [];                  
       statusOfUnits = [];
   
   }
   // AddUnitToList()
   // format example -> AddUnitToList::unitKey::00000-0000-0000-00000::unitName::TestUnit1::groupName::Group1
   else if(llSubStringIndex(message, "AddUnitToList::") != -1)
   {
       //parse string command into a list of elements
       list unitParameters = llParseString2List( message, ["::"], [""] );
       
       //find first variable name of concern - unitKey
       integer index = llListFindList( unitParameters, ["unitKey"] );
       //use the position of the variable name to update unitKey list 
       unitKeys += llList2List( unitParameters, index + 1, index + 1);                    
       
       //find variable name of concern - unitName
       index = llListFindList( unitParameters, ["unitName"] );
       //use the position of the variable name to update unitName list 
       unitNames += llList2List( unitParameters, index + 1, index + 1);                    
       
       //find variable name of concern - groupName
       index = llListFindList( unitParameters, ["groupName"] );
       //use the position of the variable name to update unitName list 
       unitGroups += llList2List( unitParameters, index + 1, index + 1);                   
       
       //add first status indication for unit
       statusOfUnits += ["REGISTERED"];
   }
   // UpdateUnitStatus()
   // format example -> UpdateUnitStatus::unitKey::00000-0000-0000-00000::unitStatus::PASS
   else if(llSubStringIndex(message, "UpdateUnitStatus::") != -1)
   {
       //parse string command into a parameter list
       list unitStatusParameters = llParseString2List( message, ["::"], [""] );
       
       //use variable name to find first variable of concern - unitKey
       integer commandIndex = llListFindList( unitStatusParameters, ["unitKey"] );
       
       //pull the unitKey value from the parameter list
       list CurrentUnitKey = llList2List( unitStatusParameters, commandIndex + 1, commandIndex + 1 );
       
       //use the unitKey to find the index for all the lists of the test unit
       integer keyIndex = llListFindList( unitKeys, CurrentUnitKey );
       
       //find the index of the unitStatus variable
       commandIndex = llListFindList( unitStatusParameters, ["unitStatus"] );
       
       // if unit met the registration time line
       if( llList2String( statusOfUnits, keyIndex ) != "LATE_REGISTRATION" )
       {
          //update the status list with the unitStatus provided by the command string               
          statusOfUnits = llListReplaceList( statusOfUnits, llList2List( unitStatusParameters, commandIndex + 1, commandIndex + 1) , keyIndex, keyIndex);
       }
   }
   //  ReportUnitStats()
   //  format example -> ReportStats::unitKey::00000-0000-0000-00000::unitName::TestUnit1::groupName::Group1::unitStatus::PASS
   else if(message == "ReportUnitStats")
   {
       
       //send link message on general channel reporting unit stats
       llMessageLinked(LINK_SET, toAllChannel, "SetUnitCount::" + (string)llGetListLength( unitKeys ), NULL_KEY );
       
       //initialize counter to zero to use as list index
       integer increment = 0;
       //get the size of the lists
       integer count = llGetListLength( unitKeys );
       
       //iterate through the lists reporting the unit parameters for them all, one at a time
       while( increment < count )
       {
          //send link message on general channel reporting unit stats
          llMessageLinked(LINK_SET, toAllChannel, "ReportStats::unitKey::" + llList2String( unitKeys, increment)
                                                           + "::unitName::" + llList2String( unitNames, increment)
                                                           + "::groupName::" + llList2String( unitGroups, increment)
                                                           + "::unitStatus::" + llList2String( statusOfUnits, increment)
                                   , NULL_KEY);
         //increment index counter
         increment++;
       } // end while
   }
   
   // RequestUnitCount - request for number of units registered
   // format example -> RequestUnitCount
   else if(message == "RequestUnitCount")
   {
       //send link message on general channel reporting unit stats
       llMessageLinked(LINK_SET, toAllChannel, "SetUnitCount::" + (string)llGetListLength( unitKeys ), NULL_KEY );
   }
   

} //end ParseCommand

////////////////////////////////////////////////////////////////////////////////////////////////// ////////// ////////// Function: Initialize ////////// ////////// Input: no input parameters ////////// ////////// Output: no return value ////////// ////////// Purpose: This function initializes any variables or functions necessary ////////// to get us started ////////// ////////// Issues: no known issues ////////// ////////// ///////////////////////////////////////////////////////////////////////////////////////////////// Initialize() {


}

/////////////////////////////////////////////////////////////////////////////////////// //STATE STATE STATE STATE STATE STATE STATE STATE STATE STATE STATE STATE STATE STATE// /////////////////////////////////////////////////////////////////////////////////////// // // // // // DEFAULT STATE // // // // // /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// default { /////////////////////////////////////////////////////// // State Entry of default state // ///////////////////////////////////////////////////////

  state_entry()
   {
       Initialize();
   }

//////////////////////////////////////////////////////// // On Rez of default state // ////////////////////////////////////////////////////////

   on_rez(integer start_param)
   {
       Initialize();
   }


/////////////////////////////////////////////////////// // Link Message of default state // ///////////////////////////////////////////////////////

   link_message(integer sender_number, integer number, string message, key id)
   {
       //if link message is on the correct channel
       if(number == toAllChannel)
       {
           // 
           ParseCommand( message );
           
       }
       
   } //end of link message
   

} // end default </lsl>