HU/Resource Web Access: Difference between revisions
(→Calls) |
|||
| Line 63: | Line 63: | ||
===Protokoll=== | ===Protokoll=== | ||
{{note_box_hu| | {{note_box_hu|Nem szükséges tudnia 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 16:42, 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
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.