DE/Resource Web Access

From Multi Theft Auto: Wiki
Jump to navigation Jump to search

Der Multi Theft Auto Server bietet eine Weboberfläche, die Ressourcen auf verschiedene Weise nutzen können. Dieses Dokument soll erklären, was diese Möglichkeiten sind und wie man sie nutzt. {{Hinweis: Wenn Sie nach einer Anleitung suchen, wie Sie den Webbrowser im Spiel benutzen und Webseiten mit CEF erstellen können, besuchen Sie bitte stattdessen CEF Tutorial.}}


Overview

Dieses System besteht aus zwei Hauptbestandteilen. Der erste ist ein Standard-Webserver, der es Webbrowsern ermöglicht, Seiten und Dateien anzufordern, die Sie in einer Ressource haben. Der zweite ist ein System, das es Webbrowsern ermöglicht, Funktionen aufzurufen, die Sie aus Ihrer Ressource exportiert haben.

Pages

Specifying a file in the meta

Sie können in der Metadatei Ihrer Ressource angeben, dass bestimmte Dateien über den Webserver zugänglich sind. Zu diesem Zweck fügen Sie eine Zeile hinzu:

<html src="filename.ext" />

Sie können diese Datei dann über Ihren Webbrowser aufrufen: http://host:port/resourcename/filename.ext
Zum Beispiel auf einem lokal gehosteten Server, der den Standard-HTTP-Port verwendet und die Webmap gestartet hat: http://127.0.0.1:22005/webmap/map.htm


Binary files

Trotz des irreführenden Namens können Dateien, die mit dem html-Knoten angegeben werden, von beliebigem Typ sein. Handelt es sich um Binärdateien (z. B. Bilder, Zip-Dateien), müssen Sie dies in der Metadatei angeben, indem Sie dem Knoten "html" den Zusatz "raw="true" hinzufügen. Dies bedeutet, dass die Dateien nicht vorverarbeitet werden, bevor sie an den Webbrowser gesendet werden.

For example:

<html src="image.gif" raw="true" />

Parsed files

Wenn eine Datei in der Metadatei nicht als "raw" angegeben ist, wird sie durch einen Präprozessor geleitet, bevor sie an den Client zurückgegeben wird. Dieser Präprozessor funktioniert ähnlich wie PHP oder ASP, verwendet aber Lua. Sie können Standard-MTA-Skripte in HTML-Seiten einbetten und so die Ausgabe steuern. Es funktionieren fast alle Standard-MTA-Funktionen sowie eine Reihe spezieller HTTP Functions, wie z. B. httpWrite, eine Funktion, die Text in den Puffer ausgibt.

For example:

<html>
    <body>
        This resource is called <* httpWrite( getResourceName(getThisResource()) ) *>
    </body>
<html>

Es gibt eine Abkürzung (wie bei PHP und ASP) für diesen Code, d.h. Sie können den obigen Code auch so schreiben:

<html>
    <body>
        This resource is called <* = getResourceName(getThisResource()) *>
    </body>
<html>

Abgesehen von den HTTP-Funktionen hat eingebettetes Lua Zugriff auf die folgenden Umgebungsvariablen, die Informationen darüber enthalten, wie die Seite angefordert wurde:

  • table requestHeaders: Dies ist eine Tabelle mit allen Kopfzeilen, die mit der Seite angefordert wurden. Sie können die zurückgegebenen Kopfzeilen mit httpSetResponseHeader einstellen.
  • table form: Dies ist eine Tabelle, die alle Formulardaten enthält, die per HTTP POST an die Seite übermittelt wurden, kombiniert mit allen Variablen, die im Querystring mit HTTP GET übergeben wurden.
  • table cookies: Dies ist eine Tabelle mit allen Cookies. Sie können Cookies mit httpSetResponseCookie ändern.
  • string hostname: Dies ist eine Zeichenkette, die die IP-Adresse oder den Hostnamen enthält, der die Seite angefordert hat.
  • string url: Dies ist die URL der Seite.
  • account user: Dies ist das Konto des aktuellen Benutzers.
  • string requestBody: Dies ist der Text der Anfrage.
  • string method: Dies ist die Anfragemethode.

Es ist wichtig zu beachten, dass geparste Dateien in einer vom restlichen Code Ihrer Ressource getrennten virtuellen Maschine ausgeführt werden. Wenn Sie also eine Funktion im Hauptcode Ihrer Ressource aufrufen möchten, müssen Sie die Funktion exportieren und die call-Funktion aus Ihrer geparsten Datei verwenden.

Sie können festlegen, dass bestimmte exportierte Funktionen in Ihrer Ressource über die HTTP-Schnittstelle aufgerufen werden können. Alle SDKs (siehe unten) ermöglichen es Ihnen, diese Funktionen von einem entfernten Standort aus aufzurufen.

Um eine exportierte http-zugängliche Funktion anzugeben, fügen Sie Ihrer meta.xml-Datei Folgendes hinzu:

<export function='functionName' http='true' />

Sie können Ihre Funktion wie jede andere Funktion kodieren und so viele Werte zurückgeben, wie Sie wollen, einschließlich Tabellen und Ressourcen und der wichtigsten Elemente. Sie cannot jedoch keine anderen 'userdata'-Werte wie xmlnodes oder Funktionen zurückgeben.

Protocol

{{Hinweis: Sie müssen das nicht wissen, es sei denn, Sie schreiben Ihren eigenen HTTP-Anfragecode. Sie können einfach eine der SDKs listed below.}}

Aufrufe erfolgen durch die Anfrage http://<your IP>:<your port>/<resource_name>/call/<exported_function_name> per HTTP POST. Der Körper der Anfrage sollte ein JSON-Array mit den Argumenten für die Funktion sein.

Die Anfrage gibt als HTTP-Antwort ein JSON-Array mit den Werten zurück, die von der Funktion zurückgegeben wurden.

Der Server unterstützt die HTTP-Basic-Authentifizierung und Sie können den Zugriff über die ACL und das integrierte Kontensystem konfigurieren.

Calls from the HTTP web interface

Die Verwendung von Anrufen ist wahrscheinlich am einfachsten über die Webschnittstelle und kann fast nahtlos erfolgen.

Fügen Sie dies zunächst in Ihre meta.xml-Datei ein:

<include resource="ajax" />

Zweitens, fügen Sie folgendes zu der <head> Abschnitt der Seite, von der aus Sie aufrufen möchten:

<* = exports.ajax:start(getResourceName(getThisResource())) *>

Schließlich können Sie einen Javascript-Block auf Ihrer Seite erstellen und Ihre Funktionen so aufrufen, als ob sie lokal wären. Der einzige Unterschied ist, dass die Aufrufe asynchron sind - Sie sollten eine Callback-Funktion als letztes Argument für Ihren Aufruf angeben. Diese wird aufgerufen, wenn die Funktion zurückkehrt.

Hier ist ein einfaches Beispiel.

meta.xml

<meta>
   <include resource="ajax" />
   <script src='code.lua' />
   <html src='page.htm' default='true' />
   <export function='showChatMessage' http='true' />
</meta>

code.lua

function showChatMessage ( message )
    outputChatBox ( message )
    return 5;
end

page.htm

<html>
    <head>
        <* = exports.ajax:start(getResourceName(getThisResource())) *>
        <script type='text/javascript'>
            function say() {
                var message = document.getElementById('message')
                showChatMessage ( message.value, 
                    function ( number ) {
                        // the function has been called and returned something
                        message.value = "The function returned " + number;
                    }
                );
            }
        </script>
    </head>
    <body>
        <input type='text' id='message' /><input type='button' value='say' onclick='say();' />
    </body>
</html>

In den Ressourcen resourcebrowser, resourcecemanager und webadmin können Sie (fairly complex) Beispiele dafür sehen, wie dies gemacht werden kann.

Securing the web interface

Die ACL hat eine Reihe von Rechten, die beeinflussen können, auf welche Dateien zugegriffen werden kann.

Dies funktioniert wie bei anderen ACL-Rechten - Sie können es nur für Admin-Benutzer oder für jede andere Benutzergruppe aktivieren, die Sie wünschen.

SDK

Es gibt eine Reihe so genannter "SDKs", die es Ihnen ermöglichen, den Server über andere Programmiersprachen anzusprechen. Mit diesen können Sie (theoretisch) ganze Spielmodi schreiben. In der Praxis ist das wahrscheinlich keine gute Idee, aber es ist nützlich für Statistiken und die Verwaltung. Das PHP SDK ist die am weitesten entwickelte Version. Es steht Ihnen frei, Ihre eigenen SDKs zu modifizieren oder zu erstellen - wenn Sie das tun, schicken Sie uns bitte eine Kopie.

See Also

callRemote - Ermöglicht es Spielservern, Funktionen auf PHP-Seiten (mit dem PHP SDK) und auf anderen Spielservern aufzurufen.