61 посетитель на сайте. Из них:
Пользователи5
Роботы56
Список пользователей
Sergo MSK Сейчас на сайте
Сейчас на сайте
Медведжончик Сейчас на сайте
Lost Angel Сейчас на сайте
Антон Шенекер Сейчас на сайте
валера лапата Был(a) в сети 3 минуты назад
KarinaNRP77 Был(a) в сети 6 минут назад
Юрий Зырянов Был(a) в сети 8 минут назад
Даниил Попов Был(a) в сети 15 минут назад
Maxim Uvarov Был(a) в сети 24 минуты назад
Hassll U Был(a) в сети 30 минут назад
Aleksander Tkacz Был(a) в сети 35 минут назад
Вова Ютуб Был(a) в сети 51 минуту назад
GUSKA Был(a) в сети 54 минуты назад
WiseBear Был(a) в сети 55 минут назад
Даня Ермолин Был(a) в сети 56 минут назад
Матиматика Был(a) в сети 1 час назад
Макс Уваров Был(a) в сети 1 час назад
bittern Был(a) в сети 1 час назад
Стас Тепляков Был(a) в сети 1 час назад
Роман Коробка Был(a) в сети 1 час назад
Альтаир А7 Был(a) в сети 1 час назад
Карсавин Игорь Был(a) в сети 1 час назад
Влад Был(a) в сети 1 час назад
Равиль Саяпов Был(a) в сети 1 час назад
Савелий Журавлёв Был(a) в сети 1 час назад
Богдан Чередников Был(a) в сети 2 часа назад
Umahan Hajbularv Был(a) в сети 2 часа назад
Волк Был(a) в сети 2 часа назад
Был(a) в сети 2 часа назад
саша мурзак Был(a) в сети 2 часа назад
إلى-الحب الحرية Был(a) в сети 2 часа назад
Roman Ptashnik Был(a) в сети 2 часа назад
Olexandr Lubord Был(a) в сети 2 часа назад
Den 777 Был(a) в сети 2 часа назад
Qusii 111 Был(a) в сети 2 часа назад
Максим Дип Был(a) в сети 2 часа назад
Katl Был(a) в сети 2 часа назад
Был(a) в сети 2 часа назад
Анатолий Бандит Был(a) в сети 2 часа назад
Сема Пашенков Был(a) в сети 2 часа назад
ResidentK1 Был(a) в сети 2 часа назад
Kella Akella Был(a) в сети 2 часа назад
Такси Максим Был(a) в сети 2 часа назад
Ab Antonian Был(a) в сети 3 часа назад
HEX PRODUCTION Был(a) в сети 3 часа назад
Николай Климачев Был(a) в сети 3 часа назад
Дмитрий Был(a) в сети 3 часа назад
-Серебро Был(a) в сети 3 часа назад
Name Surname Был(a) в сети 3 часа назад
FLlXl Был(a) в сети 3 часа назад
desert seva Был(a) в сети 4 часа назад
Князь Был(a) в сети 4 часа назад
destroy Был(a) в сети 4 часа назад
Sasha Datsyshen Был(a) в сети 4 часа назад
В гостях y Foxy Play Game Был(a) в сети 4 часа назад
Максим Мари🖤 Был(a) в сети 4 часа назад
Азамат Азаматов Был(a) в сети 4 часа назад
TONI OWNPONI Был(a) в сети 4 часа назад
FOX ASTRAL Был(a) в сети 4 часа назад
VoronYTB Был(a) в сети 4 часа назад
Oleh Koliada Был(a) в сети 4 часа назад
Владимир Жданов Был(a) в сети 4 часа назад
Jerome Carmen Был(a) в сети 4 часа назад
Мэсель Рэмдарио Был(a) в сети 5 часов назад
makar Был(a) в сети 5 часов назад
saddasda Был(a) в сети 5 часов назад
Ярослав Был(a) в сети 5 часов назад
Miki Kubovych Был(a) в сети 5 часов назад
tactical Был(a) в сети 5 часов назад
Vadik Nikitin Был(a) в сети 5 часов назад
Platon Seven Был(a) в сети 5 часов назад
Максим Станевич Был(a) в сети 5 часов назад
Conor Box Был(a) в сети 5 часов назад
vlastimir14 Был(a) в сети 5 часов назад
Dima papp Был(a) в сети 6 часов назад
Itachi Был(a) в сети 6 часов назад
Дмитрий Лордецкий Был(a) в сети 6 часов назад
Flesex Был(a) в сети 6 часов назад
Kirayamy Был(a) в сети 6 часов назад
анатолий глебов Был(a) в сети 6 часов назад
Khann Был(a) в сети 6 часов назад
イリヤ ナウモフ Был(a) в сети 7 часов назад
RUDYX Был(a) в сети 7 часов назад
Hitman Bmwf11 Был(a) в сети 7 часов назад
Михаил Tankist Был(a) в сети 7 часов назад
Uzarbek Kurmanbekov Был(a) в сети 7 часов назад
Віктор А прошу Был(a) в сети 7 часов назад
Resedent Был(a) в сети 7 часов назад
Гордей Липин Был(a) в сети 7 часов назад
Ярослав Дрыжов Был(a) в сети 7 часов назад
Даниил Быков Был(a) в сети 8 часов назад
0987654321 Был(a) в сети 8 часов назад
Ян Бочан Был(a) в сети 8 часов назад
Матвейка Тягур Был(a) в сети 8 часов назад
Зайцев Александр Был(a) в сети 8 часов назад
kDa Был(a) в сети 8 часов назад
TOKSYCHNIE Был(a) в сети 9 часов назад
Александр Куджма Был(a) в сети 9 часов назад
Даниил Девелоп Был(a) в сети 10 часов назад
magasha drive Был(a) в сети 11 часов назад
Gabriel Gonzalez Был(a) в сети 11 часов назад
Fade C-OPS Был(a) в сети 11 часов назад
Lexaxaker5ogy Был(a) в сети 11 часов назад
natan nasper Был(a) в сети 11 часов назад
Epic Minigames Был(a) в сети 11 часов назад
maksim Был(a) в сети 11 часов назад
dsdsada Был(a) в сети 11 часов назад
Ярослав Волков Был(a) в сети 12 часов назад
AGGRESS1VEX Был(a) в сети 12 часов назад
Gang Gang6677 Был(a) в сети 12 часов назад
Rolepoy Был(a) в сети 12 часов назад
Nikolai Bander Был(a) в сети 12 часов назад
Seko XHusnu Был(a) в сети 13 часов назад
Рашад Был(a) в сети 13 часов назад
zwxxtt Был(a) в сети 15 часов назад
Павел Почекуев Был(a) в сети 15 часов назад
Accidentally Был(a) в сети 15 часов назад
Артем Бахия Был(a) в сети 15 часов назад
Пидорас Пидорасович Был(a) в сети 15 часов назад
Grin Был(a) в сети 15 часов назад
Miminho Play Был(a) в сети 16 часов назад
mka Был(a) в сети 16 часов назад
Был(a) в сети 16 часов назад
Nilll Был(a) в сети 16 часов назад
Ислам Болатов Был(a) в сети 16 часов назад
Артем Шелест Был(a) в сети 16 часов назад
Sasha Sasha Был(a) в сети 17 часов назад
Список ботов
rambler (56)

Следите за нами!

Веб-доступ к ресурсам - как можно связать сайт и ресурсы

Описание

Сервер Multi Theft Auto предоставляет веб-интерфейс, который может различными способами использоваться ресурсами. Цель данной статьи - объяснить, что это за способы и как их можно использовать.


Обзор

У данной системы две ключевые составные части. Первая - стандартный веб-сервер, разрешающий веб-браузерам запрашивать страницы и файлы, которые входят в ресурсы. Вторая - система, разрешающая браузерам вызывать функции, которые вы экспортировали из своих ресурсов.

Страницы

Указание файла в meta

В meta-файле вашего ресурса вы можете указать доступность определенных файлов через веб-браузер. Чтобы это сделать, добавьте строку:

<html src="имяфайла.расширение" />

Затем вы сможете получить доступ к этому файлу через веб-браузер по адресу: http://адрес:порт/имяресурса/имяфайла.расширение

Например, на локальном сервере, использующем http-порт по умолчанию с запущенным webmap это: http://127.0.0.1:22005/webmap/map.htm


Бинарные файлы

Несмотря на обманчивое название, файлы, указанные с использованием узла html, могут быть любого типа. Если они являются бинарными (двоичными) файлами (типа картинок, zip-архивов), вам понадобится указать это в meta-файле, добавив raw="true" к узлу (строке с) html. Это значит, что файлы не будут предварительно обрабатываться перед отправкой веб-браузеру.

Например:

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

Анализируемые файлы

Если файл не имеет в meta-файле пометки "raw", тогда перед тем, как быть возвращенным клиенту, он проходит через процессор предварительной обработки. Этот препроцессор в целом работает как в PHP или ASP, но использует LUA. Вы можете встраивать стандартные MTA-скрипты вовнутрь HTML-страниц, имея контроль над выводом. Работают почти все стандартные функции MTA, плюс к ним добавляются еще некоторые специальные HTTP функции, такие как httpWrite - функция, выводящая текст в буфер.

Например:

<html>
    <body>
        Этот ресурс называется <* httpWrite( getResourceName(getThisResource()) ) *>
    </body>
<html>

Имеется краткая альтернатива (совместно с PHP и ASP) этого кода, а это значит, что код выше можно также записать как:

<html>
    <body>
        Этот ресурс называется <* = getResourceName(getThisResource()) *>
    </body>
<html>

Отдельно от HTTP функций, встроенный Lua имеет доступ к следующим переменным среды, содержащим информацию про то, как была запрошена страница:

  • table requestHeaders: Эта таблица содержит все заголовки, которые были запрошены со страницей. Вы можете установить возвращаемые заголовки через использование httpSetResponseHeader.
  • table form: Эта таблица содержит все данные формы, переданные странице с использованием HTTP POST совмщенно с любыми переменными, переданными в строке запроса с HTTP GET.
  • table cookies: Это таблица со всеми cookies. Вы можете редактировать cookies с использованием httpSetResponseCookie.
  • string hostname: Это строка, содержащая IP адрес или имя хоста, запросившего страницу.
  • string url: Это URL страницы.
  • account user: Это аккаунт текущего пользователя.

Важно заметить, что анализируемые файлы запущены в отдельной от остального кода вашего ресурса виртуальной машине. Следовательно, если вы хотите вызвать функцию из основного кода вашего ресурса, вам понадобится ее экспортировать и воспользоваться функцией call из анализируемого файла.

Вызовы

Вы можете указать, чтобы определенные экспортированные функции вашего ресурса могли быть вызваны через HTTP-интерфейс. Все SDK (указанные ниже) позволяют вам вызывать эти функции удаленно.

Для указания экспортированной функции, доступной по http, добавьте в файл meta.xml следующее:

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

Вы можете писать свою функцию как и любую другую обычную, возвращать сколько вам угодно много значений, включия таблицы, ресурсы и, что более важно, элементы. Тем не менее вы не можете возвращать другие значения 'userdata' типа xmlnodes или функций.

Протокол

Note: Вам не нужно этого знать за исключением случаев, если вы пишете свой собственный код HTTP-запроса. Можно просто воспользоваться одним из SDK, указанных ниже.

Вызовы выполняются через запрос http://<ваш IP>:<ваш порт>/<имя_ресурса>/call/<имя_экспортированной_функции> с использованием HTTP POST. Тело запроса должно быть JSON массивом из аргументов для функции.

Запрос возвратит JSON-массив значений, возвращенных функцией как HTTP-ответ.

Сервер поддерживает HTTP Basic идентификацию, вы можете конфигурировать доступ через ACL и встроенную систему аккаунтов.

Вызовы из HTTP веб-интерфейса

Вызовы, вероятно, наиболее легки из веб-интерфейса и могут выполняться практически без усилий.

Во-первых, добавьте в файл meta.xml следующее:

<include resource="ajax" />

Во-вторых, в секцию <head> страницы, из который вы хотите производить вызов, добавьте следующее:

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

Наконец, вы можете создать на своей странице jаvascript-блок и вызывать свои функции практически так же, как если бы они были локальными. Единственное различие в том, что вызовы асинхронны - вам следует указывать callback-функцию последним аргументом для своего вызова. Она будет использоваться для возврата каких-либо значений основной функцией.

Вот простой пример.

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/jаvascript'>
            function say() {
                var message = document.getElementById('message')
                showChatMessage ( message.value, 
                    function ( number ) {
                        // функция была вызвана и что-то вернула
                        message.value = "Функция вернула " + number;
                    }
                );
            }
        </script>
    </head>
    <body>
        <input type='text' id='message' /><input type='button' value='say' onclick='say();' />
    </body>
</html>

Вы можете видеть (довольно сложные) образцы того, как это можно сделать, в ресурсах resourcebrowserresourcemanager и webadmin.

Обезопашивание веб-интерфейса

ACL предоставляет некоторое количество прав, которые могут влиять на то, какие файлы смогут быть доступны.

  • general.http: Если выключен, никакие из http файлов не будут доступны (за исключением игровых клиентов)
  • resource.ResourceName: Если выключен, никакие из файлов ресурса не будут доступны
  • resource.ResourceName.file.FileName: Если выключен, файл с данным названием не будет доступен
  • resource.ResourceName.function.FunctionName: Если выключен, функцию невозможно будет вызвать

Они работают как и другие ACL права - вы можете их отключить для обычных пользователей и просто включить для группы Admin, или любой другой, которой вы пожелаете.

SDK

Доступно некоторое количество так называемых 'SDK', которые позволяют вам сообщаться с сервером через другие языки программирования. С их помощью вы (теоретически) можете писать целые игровые режимы. На практике, возможно, не очень хорошая идея, но это тем не менее является очень полезным для статистики и администрирования. PHP SDK - наиболее развитая версия. Не стесняйтесь модифицировать или создавать собственные SDK - если решитесь, пожалуйста, пришлите нам копию.





Автор публикации:

WiseBear WiseBear

Скачать:

Скачать

Дата:
Автор ресурса:

Автор не указан

Введение в скриптинг
Введение в скриптинг
12.02.2021, Статьи
Введение в скриптинг 2
Введение в скриптинг 2
24.12.2020, Клиенты MTA
Обучение LUA
Обучение LUA
24.12.2020, Статьи
Руководство по отладке - как найти ошибки в ваших скриптах
Руководство по отладке - как найти ошибки в ваших
24.12.2020, Статьи

Нет комментариев.Оставишь комментарий?