HU/Resource Web Access: Difference between revisions
(Created page with "TODO") |
mNo edit summary |
||
(24 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
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: | |||
<syntaxhighlight lang="xml"> | |||
<html src="filename.ext" /> | |||
</syntaxhighlight> | |||
Ezt követően elérheti ezt a fájlt a webböngészőn keresztül: http://host:port/resourcename/filename.ext<br/> | |||
Például, egy localisan 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: | |||
<syntaxhighlight lang="xml"> | |||
<html src="image.gif" raw="true" /> | |||
</syntaxhighlight> | |||
===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 [[Template:HTTP functions|HTTP funkciók]], mint például [[httpWrite]], ez egy olyan function, amely szöveget küld a pufferbe. | |||
Például: | |||
<syntaxhighlight lang="html4strict"> | |||
<html> | |||
<body> | |||
This resource is called <* httpWrite( getResourceName(getThisResource()) ) *> | |||
</body> | |||
<html> | |||
</syntaxhighlight> | |||
Itt egy rövidítés (gyakori a PHP-ban és az ASP-ben) azaz, a fenti kódot írhajta így is: | |||
<syntaxhighlight lang="html4strict"> | |||
<html> | |||
<body> | |||
This resource is called <* = getResourceName(getThisResource()) *> | |||
</body> | |||
<html> | |||
</syntaxhighlight> | |||
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: | |||
<syntaxhighlight lang="xml"> | |||
<export function='functionName' http='true' /> | |||
</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. Nem térhet vissza más userdata értékkel, mint pl az [[xmlnode|xmlnode]], vagy függvények. | |||
===Protokoll=== | |||
{{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. | |||
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: | |||
<syntaxhighlight lang="xml"> | |||
<include resource="ajax" /> | |||
</syntaxhighlight> | |||
Secondly, add the following to the <head> section of the page you want to call from: | |||
<syntaxhighlight lang="lua"> | |||
<* = exports.ajax:start(getResourceName(getThisResource())) *> | |||
</syntaxhighlight> | |||
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''' | |||
<syntaxhighlight lang="xml"> | |||
<meta> | |||
<include resource="ajax" /> | |||
<script src='code.lua' /> | |||
<html src='page.htm' default='true' /> | |||
<export function='showChatMessage' http='true' /> | |||
</meta> | |||
</syntaxhighlight> | |||
'''code.lua''' | |||
<syntaxhighlight lang="lua"> | |||
function showChatMessage ( message ) | |||
outputChatBox ( message ) | |||
return 5; | |||
end | |||
</syntaxhighlight> | |||
'''page.htm''' | |||
<syntaxhighlight lang="html4strict"> | |||
<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> | |||
</syntaxhighlight> | |||
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. | |||
{{Deprecated feature|3.0139|1.3.1| | |||
* general.http: If disabled, none of the http files can be accessed (except by game clients) | |||
** '''Important Note''': ''If 'general.http' is enabled, http access to all resources (for that ACL) is enabled by default. To disable http access you have to explicitly block access to resources that contain exported http functions.'' | |||
** '''Important Note''': ''If 'general.http' is enabled on an ACL which has a user with no password (i.e. user.* or user.guest or user.http_guest), it is essential that you explicitly block access to resources that contain exported http functions.'' | |||
* resource.'''ResourceName''': If disabled, none of the files in the resource can be accessed | |||
* resource.'''ResourceName'''.file.'''FileName''': If disabled, the file named cannot be accessed | |||
* resource.'''ResourceName'''.function.'''FunctionName''': If disabled, the function cannot be called | |||
These work as with other ACL rights - you can disable them for normal users and just enable them for Admin users, or any other group of users you wish. | |||
}} | |||
{{New_feature|3.0139|1.3.1| | |||
* '''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. | |||
* [[JavaSDK|Java SDK]] | |||
* [[Javascript SDK]] | |||
* [[Perl SDK]] | |||
* [[PHP SDK]] | |||
* [[CSharp SDK|C# SDK]] | |||
==See Also== | |||
[[callRemote]] - Allows game servers to call functions on PHP pages (with the PHP SDK) and on other game servers. | |||
[[Category:Translated/Scripting Concepts]] | |||
[[en:Resource Web Access]] | |||
[[fr:Ressource Acces Internet]] | |||
[[hu:Resource Web Access]] | |||
[[pt-br:Acesso_web_via_recursos]] | |||
[[ru:Resource Web Access]] | |||
[[Category:Tutorials]] | |||
==Fordította== | |||
* '''''[https://wiki.multitheftauto.com/wiki/User:Surge Surge]''''' |
Latest revision as of 21:49, 21 February 2021
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 localisan 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. Nem térhet vissza más userdata értékkel, mint pl az xmlnode, vagy függvények.
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.