// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Correlate two notecard requests arriving asynchronously // Not compiled or tested in-world // Setup: Use a spare owned test object. Add a notecard named testcard; touch once. // Stop / restore: Disable/remove. Tests report privately and do not change visual prim properties. Any temporary timer stops at completion or timeout. // Notes: Responses may arrive in either order. This demonstrates correlation without assuming order; it stops after fifteen seconds. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Runtime verification, not pre-certified behavior. key countRequest; key lineRequest; integer waiting; default { touch_start(integer n) { if(llDetectedKey(0)!=llGetOwner()||waiting)return; if(llGetInventoryType("testcard")!=INVENTORY_NOTECARD) { llOwnerSay("Add testcard notecard."); return; } waiting=2; countRequest=llGetNumberOfNotecardLines("testcard"); lineRequest=llGetNotecardLine("testcard",0); llSetTimerEvent(15.0); } dataserver(key id,string data) { if(waiting==0)return; if(id==countRequest) { countRequest=NULL_KEY; --waiting; llOwnerSay("Count response="+data); } else if(id==lineRequest) { lineRequest=NULL_KEY; --waiting; llOwnerSay("First-line response received; EOF="+(string)(data==EOF)+" characters="+(string)llStringLength(data)); } else return; if(waiting==0) { llSetTimerEvent(0.0); llOwnerSay("Both requests correlated."); } } timer() { llSetTimerEvent(0.0); llOwnerSay("Responses still missing="+(string)waiting); waiting=0; countRequest=NULL_KEY; lineRequest=NULL_KEY; } changed(integer flags) { if(flags&CHANGED_OWNER)llResetScript(); } }