OSSL Script Library/JsonStore/de
From OpenSimulator
Languages: |
English Deutsch |
Contents |
Einführung
Diese Seite beschreibt zwei Skripte, einen Generator und einen Verbraucher, die demonstrieren, wie man die JsonStore-Methoden JsonStoreRead und JsonStoreTake verwendet, um ein Master/Worker-Skriptpaar zu erstellen. Platzieren Sie das Generatorskript in einem Objekt und das Verbraucherskript in einem anderen Objekt. Berühren Sie den Generator, um den Prozess zu starten.
Um den Wert des Master/Worker-Musters zu sehen, versuchen Sie, mehrere Kopien des Verbraucherobjekts zu erstellen. Jedes wird Aufgaben lesen, die vom Generator erstellt wurden.
Diese Funktionalität existiert derzeit nur im Entwicklungscode von OpenSimulator (0.7.4-dev). Bitte beachten Sie, dass sie sich derzeit im experimentellen Stadium befindet und Änderungen unterliegen kann, die dazu führen können, dass ältere Skripte nicht mehr funktionieren oder leicht anders funktionieren. Sie können eine Dokumentation aller verfügbaren Funktionen und Beispiele für deren Verwendung auf der Seite JsonStore Module finden.
Aktivieren des JsonStore-Moduls
Das erste, was zu tun ist, um das JsonStore-Modul in OpenSim.ini zu aktivieren. Fügen Sie Folgendes hinzu, um das Modul zu aktivieren:
[JsonStore] Enabled = True
Das Generatorskript
Das Generatorskript schreibt Werte in ein freigegebenes Array, aus dem Verbraucher diese Werte ziehen können. Das Skript verwendet den globalen Speicher (öffentlicher Zwischenspeicherraum), um die Identität des erstellten Json-Speichers zu teilen.
string sStoreName = "JsonStoreTest"; key kGlobalStore = (key)NULL_KEY; integer iCounter = 0; key kStoreID; default { state_entry() { llOwnerSay("running..."); } touch_start(integer i) { state running; } } state running { state_entry() { // Erstellen eines JsonStore, der mit einem leeren Array initialisiert wird, das dem Schlüssel 'Event' zugeordnet ist kStoreID = JsonCreateStore("{'Event' : []}"); // Speichern des gerade erstellten Stores im globalen Speicher, dies erleichtert es anderen Skripten, ihn zu finden; // eine Alternative wäre, die Store-ID in einem privaten Kanal zu sagen JsonSetValue(kGlobalStore, sStoreName, (string)kStoreID); // Starten eines Timers, der periodisch Zähler generiert llSetTimerEvent(1.0); } timer() { // Generieren eines neuen Zählers und Hinzufügen zum Ende des Event-Arrays iCounter += 1; JsonSetValue(kStoreID, "Event[+]", (string)iCounter); } touch_start(integer i) { // Wenn der Test abgeschlossen ist, entfernen Sie die Identität des Stores und zerstören Sie ihn JsonRemoveValue(kGlobalStore, sStoreName); JsonDestroyStore(kStoreID); llResetScript(); } }
Das Verbraucherskript
Das Verbraucherskript wartet darauf, dass der Generator den Store erstellt und seine Identität in den globalen Store einfügt. An diesem Punkt beginnt es, Werte aus dem Store des Generators zu lesen.
string sStoreName = "JsonStoreTest"; key kGlobalStore = (key)NULL_KEY; key kStoreID; key kReqID; default { state_entry() { // Einrichten einer Anforderung für die Identität des Stores des Generators // Dies postet eine Anfrage, wenn der Wert verfügbar ist, wird ein Link-Nachricht-Ereignis ausgelöst kReqID = JsonReadValue(kGlobalStore, sStoreName); } link_message(integer sender, integer result, string msg, key id) { if (sender != -1) return; llOwnerSay("shared store id: " + msg); kStoreID = (key)msg; state running; } } state running { state_entry() { // Einrichten einer Anforderung, die einen Wert nimmt (aus dem Store entfernt), wenn er verfügbar ist // Ein Link-Nachricht-Ereignis wird ausgelöst, wenn der Wert verfügbar ist kReqID = JsonTakeValue(kStoreID, "Event[0]"); } link_message(integer sender, integer result, string msg, key id) { if (sender != -1) return; llOwnerSay("read " + msg); kReqID = JsonTakeValue(kStoreID, "Event[0]"); } touch_start(integer i) { llResetScript(); } }