HU/Resource Web Access: Difference between revisions
(→Calls) |
|||
Line 53: | Line 53: | ||
==Calls== | ==Calls== | ||
Megadhatja, hogy a resourceban lévő exportált függvények meghívhatóak legyenek a HTTP felületről. Az összes SDKs (lentebb listázva) lehetővé teszi, hogy ezeket a függvényeket meghívja egy távolabbi helyről. | |||
Ahhoz, hogy egy http-n keresztül elérhető függvényt létrehozzon, adja hozzá a következő sort a meta.xml fájlba: | |||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
<export function='functionName' http='true' /> | <export function='functionName' http='true' /> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Írhatja úgy is a függvényét, mint bármilyen normális függvényt, visszakapva annyi értéket, amennyit csak szeretne, beleértve a táblákat, resource-okat, és a legfontosabb elemeket. You ''cannot'' however return other 'userdata' values such as [[xmlnode|xmlnodes]] or functions. | |||
=== | ===Protokoll=== | ||
{{note_box| | {{note_box|Nincs szüksége ahhoz, hogy tudja ezeket, hacsak nem a saját HTTP kódját írja. Csak az alábbiakban [[#SDK|felsorolt SDK-k]] egyikét használhatja.}} | ||
Calls are done by requesting ''<nowiki>http://<your IP>:<your port>/<resource_name>/call/<exported_function_name></nowiki>'' using HTTP POST. The body of the request should be a JSON array of the arguments for the function. | Calls are done by requesting ''<nowiki>http://<your IP>:<your port>/<resource_name>/call/<exported_function_name></nowiki>'' using HTTP POST. The body of the request should be a JSON array of the arguments for the function. |
Revision as of 11:18, 9 November 2018
A Multi Theft Auto Server egy olyan webes felületet biztosít, melyet a resource-ok sokféle módon tudnak használni. Ennek a dokumentumnak az a célja, hogy elmagyarázza mik ezek a módszerek, és hogy hogyan kell őket használni.
Összefoglalás
Két fontos rész alkotja ezt a rendszert. Az első az egy szabványos webszerver, amely lehetővé teszi a webböngészők számára, hogy oldalakat, és fájlokat kérjenek a resource-ból. A második egy olyan rendszer, amely lehetővé teszi a webböngészők számára, hogy a resource-ból exportált function-öket meghívja.
Oldalak
A fájl megadása a meta-ban
Megadhatja a resource meta fájljában, hogy bizonyos fájlok hozzáférhetőek legyenek a webszerveren keresztül. Ehhez adja hozzá ezt a sort:
<html src="filename.ext" />
Ezt követően elérheti ezt a fájlt a webböngészőn keresztül: http://host:port/resourcename/filename.ext
Például, egy helyileg futattott szerveren az alapéretelmezett http port-ot használja a webmap indításakor: http://127.0.0.1:22005/webmap/map.htm
Bináris fájlok
A félrevezető név ellenére a html segítségével megadott fájlok bármilyen típusúak lehetnek. Ha ezek bináris fájlok (például képek, zip fájlok), akkor meg kell adnia ezt a meta fájlban a raw="true" hozzáadásával a html-hez. Ez azt jelenti, hogy a fájlok nem kerülnek előfeldolgozásra mielőtt a webböngészőnek küldenénk.
Például:
<html src="image.gif" raw="true" />
Parsed files
Ha egy fájlt nem adjuk meg a meta-ban, mint "raw", akkor az végig megy egy előfeldolgozáson mielőtt a klienshez visszatérne. Ez az előfeldolgosás hasonlóképp műkodik, mint a PHP-nál vagy ASP-nél, csak LUA-t használ. A szabványos MTA szkripteket beágyazhatja a HTML oldalakba, ellenőrizve a kimenetet. Szinte az összes szabványos MTA funkciók működnek, plusz néhány speciális HTTP funkciók, mint például httpWrite, ez egy olyan function, amely szöveget küld a pufferbe.
Például:
<html> <body> This resource is called <* httpWrite( getResourceName(getThisResource()) ) *> </body> <html>
Itt egy rövidítés (gyakori a PHP-ban és az ASP-ben) azaz, a fenti kódot írhajta így is:
<html> <body> This resource is called <* = getResourceName(getThisResource()) *> </body> <html>
A HTTP funkcióktól eltekintve a beágyazott Lua a következő környezeti változókhoz fér hozzá, amelyek információkat tartalmaznak az oldalak kérésével kapcsolatban:
- requestHeaders tábla: Ez a tábla tartalmazza az összes fejlécet, melyek az oldal által lettek lekérdezve. A visszaadott fejléceket beállíthatja a httpSetResponseHeader segítségével.
- form tábla: Ez egy tábla, ami tartalmazza a HTTP GET query string és HTTP POST form paramétereket.
- cookies tábla: Ez egy táblázat az összes cookie-ről. A httpSetResponseCookie használatával modosíthatja a cookie-ket.
- hostname string : Ez egy string, mely tartalmazza az oldal által kért IP címet, vagy hostname-t.
- url string : Ez az oldal URL-je.
- user account : Ez a jelenlegi felhasználó accountja.
Fontos megjegyezni, hogy az elemzett fájlok külön virtuális gépen futnak a resource kódjának többi részétől. Ha egy function-t szeretne meghívni a resource fő kódjában, akkor exportálnia kell a function-t az elemzett fájlból a call function használatával.
Calls
Megadhatja, hogy a resourceban lévő exportált függvények meghívhatóak legyenek a HTTP felületről. Az összes SDKs (lentebb listázva) lehetővé teszi, hogy ezeket a függvényeket meghívja egy távolabbi helyről.
Ahhoz, hogy egy http-n keresztül elérhető függvényt létrehozzon, adja hozzá a következő sort a meta.xml fájlba:
<export function='functionName' http='true' />
Írhatja úgy is a függvényét, mint bármilyen normális függvényt, visszakapva annyi értéket, amennyit csak szeretne, beleértve a táblákat, resource-okat, és a legfontosabb elemeket. You cannot however return other 'userdata' values such as xmlnodes or functions.
Protokoll
This template is no longer in use as it results in poor readability.
Calls are done by requesting http://<your IP>:<your port>/<resource_name>/call/<exported_function_name> using HTTP POST. The body of the request should be a JSON array of the arguments for the function.
The request will return a JSON array of the value(s) returned from the function as the HTTP response.
The server supports HTTP Basic authentication and you can configure access via the ACL and the built-in accounts system.
Calls from the HTTP web interface
Using calls is probably easiest from the web interface and can be done almost seamlessly.
First, add this to your meta.xml file:
<include resource="ajax" />
Secondly, add the following to the <head> section of the page you want to call from:
<* = exports.ajax:start(getResourceName(getThisResource())) *>
Finally, you can create a javascript block in your page and call your functions almost as if they were local. The only difference is that the calls are aysnchronous - you should specify a callback function as the last argument for your call. This is called when the function returns.
Here's a simple example.
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>
You can see (fairly complex) examples of how this can be done in the resources resourcebrowser, resourcemanager and webadmin.
Securing the web interface
The ACL has a number of rights that can affect what files can be accessed.
- resource.ResourceName.http: If enabled, the resource will be accessible from http://server_ip:22005/ResourceName/
This works as with other ACL rights - You can enable it just for Admin users, or any other group of users you wish.
SDK
There are a number of so-called 'SDKs' available that allow you to interface with the server from other programming languages. With these you could (in theory) write whole gamemodes. In practice this is probably a bad idea, but it is useful for statistics and administration. The PHP SDK is the most developed version. Feel free to modify or create your own SDKs - if you do please send us a copy.
See Also
callRemote - Allows game servers to call functions on PHP pages (with the PHP SDK) and on other game servers.