RestConsole/de

Über
Die REST-Konsole macht eine Fernsteuerung über Rest-Console der verschiedenen Open Dienste möglich.

Die Schnittstelle ermöglicht Befehle an den Server und Abrufen von Befehlsausgabe zu senden. Senden und Empfangen von Daten über RESTful HTTP-Aufrufe erfolgen.

Während das Senden sehr einfach ist, wird nicht mit. Empfangen verwendet HTTP-Reverse, eine lange Umfrage zu einer CAPS URI durchführen.

Um das Protokoll effizienter zu gestalten, die Hilfefunktion zu machen wurde auf der Client-Seite geschoben. Anstatt jeden Tastendruck an den Server senden, werden nur validierte Befehlszeilen gesendet. Um dies möglich zu machen, sendet der Server eine Burst-on-Connect von Daten, die der Baum der erlaubten Befehle und deren Hilfeinformationen. Dies kann durch den Kunden verwendet werden, um die "Hilfe" Befehlsausgabe sowohl lokal als auch zu schaffen als Kommandozeilen-Hilfe interaktiv zur Verfügung stellen.

Die Probe Konsolen-Client, OpenSim.ConsoleClient.exe, zeigt, wie das gemacht wird.

Verwendung
Um die Remote - Konsole zu verwenden, starten Sie Open Dienste mit dem Parameter -console rest.

Beispiel für Robust-Server im Grid-Modus: mono Robust.exe -console rest

Beispiel für Simulatoren (sowohl im Grid und Standalone-Modus): mono OpenSim.exe -console rest

Syntax
Wir nehmen die Opensimulator Dienstleistungsadresse http://MeinServer.de:8002 als Beispiel.

Zunächst eine neue Sitzung starten, indem Sie eine HTTP-POST-Anforderung senden.

Benutzername und Passwort sollten die gleichen Einstellungen sein,

wie für ConsoleUser und ConsolePass im Abschnitt [Network] der OpenSim.ini.

Parameter: USER, PASS http://MeinServer.de:8002/StartSession/ Rückgabe: (XML) 

Jetzt haben wir die SessionID, die wir verwenden können um einen Befehl zu senden und zu empfangen.

Zuerst wird der Puffer Rückholung Konsole abrufen.

Parameter: keine http://MeinServer.de:8002/ReadResponses// Rückgabe: (XML) <Line Number=x></Line></ConsoleSession>

Die Antwort enthält alle lines die derzeit im Puffer sind.

Nachfolgende Abrufe werden nur neue Zeilen abzurufen.

Der Abruf wird für bis zu 30 Sekunden lang gehalten, wenn es keine Daten gibt, dann kommt ein Fehler zurück.

Der Client wird voraussichtlich wieder ein Polling versuchen.

Verwenden Sie die Sitzungs-ID als Parameter, und senden Sie erneut eine POST-Anfrage.

Parameter: ID, COMMAND http://MeinServer.de:8002/SessionCommand/ Rückgabe: (XML) <Result></Result></ConsoleSession>

Wenn alles gut gegangen ist, sollte der Befehl ausgeführt worden sind. Versuchen Sie einen anderen Befehl.

Wenn Sie die Verbindung zu schließen möchten, senden Sie erneut eine POST-Anfrage. Parameter: ID http://MeinServer.de:8002/CloseSession/ Rückgabe: (XML) <Result></Result></ConsoleSession>

Die Sitzung ist geschlossen, und Sie müssen sich erneut anmelden, wenn Sie wollen, erneut einen Befehl zu senden. = Clients =

C#
Ein C# Client ist in der Opensimulator Distribution enthalten. Es ist rudimentär und nicht auf die neuesten Protokollversionen aktualisiert.

Qt
Der OpenSimConsoleClient Qt 5 basierte Client gibt es bei https://github.com/MelanieT/OpenSimConsoleClient

Qt 5 basierte Programme/Binaries
Windows: http://opensimulator.org/downloads/ConsoleClient.zip Mac: http://opensimulator.org/downloads/ConsoleClient.dmg Linux: TBD

= Beispiele =

HINWEIS
Einige der folgenden Beispiele beziehen sich auf eine ältere Version der Schnittstelle. Sie können zu einem gewissen Grad arbeiten, müssen aber überarbeitet werden.

JavaScript/HTML
<script type="text/javascript">

var sessionId; var hostUrl;

function StartSession(url, user, password) { hostUrl = url; var response = SendRequest("/StartSession/", "USER=" + user + "&PASS=" + password); sessionId = response.getElementsByTagName("SessionID")[0].firstChild.nodeValue; };

function ReadResponses { var response = this.SendRequest("/ReadResponses/" + sessionId + "/", ''); var lines = response.getElementsByTagName("Line"); for (var i = 0; i < lines.length; ++i) { var element = document.createElement("div"); element.appendChild(document.createTextNode(lines[i].firstChild.nodeValue)); document.getElementById("output").appendChild(element); };       document.getElementById("output").scrollTop = document.getElementById("output").scrollHeight; };

function Command(cmd) { void SendRequest("/SessionCommand/", "ID=" + sessionId + "&COMMAND=" + cmd); };

function CloseSession { void SendRequest("/CloseSession/", "ID=" + sessionId); };

function SendRequest(path, data) { var request = new XMLHttpRequest; request.open("POST", hostUrl + path, false); request.send(data); return request.responseXML; };

window.onunload = CloseSession;

<form action="#" onsubmit="       StartSession(this.address.value, this.user.value, this.password.value);        ReadResponses;        return false"> <input name="address" type="text" value="http://localhost:9000" /> <input name="user" type="text" value="ConsoleUser" /> <input name="password" type="text" value="ConsolePass" /> <input type="submit" value="Login" />

<form action="#" onsubmit="       Command(this.command.value);        ReadResponses;        return false"> <input type="text" name="command" value="Enter command here" size="40"/> <input type="submit" value="Send Command" />