User:Rob Linden/GeSHI Test
<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 :: seperated // lists in string form. // ////////////////////////////////////////////// // LINK MESSAGE commands ////////////////////////////////////////////// // // link message commands will be recieved 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 posistion 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 posistion 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 posistion 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 );
//initialze 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 paramaters ////////// ////////// 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>