27 посетителей на сайте. Из них:
Пользователи7
Гости1
Роботы19
Список пользователей
Глеб Залевский Сейчас на сайте
Ezekiel Сейчас на сайте
Grom_777 Valeron Сейчас на сайте
андрей чусовитин Сейчас на сайте
Madastick Сейчас на сайте
Евгений Прокофьев Сейчас на сайте
Лолщ Был(a) в сети 4 минуты назад
Сергей Кутковский Был(a) в сети 6 минут назад
Vaflly Mmmna Был(a) в сети 8 минут назад
AGGRESS1VEX Был(a) в сети 11 минут назад
Denys Был(a) в сети 14 минут назад
Tony Был(a) в сети 16 минут назад
email baru10 Был(a) в сети 18 минут назад
Серафим Ефремов Был(a) в сети 23 минуты назад
Qwerty Был(a) в сети 23 минуты назад
Zender Game Был(a) в сети 24 минуты назад
Джек Коригган Был(a) в сети 25 минут назад
Оптима Был(a) в сети 25 минут назад
Alksnis Был(a) в сети 26 минут назад
Александр Куртыгин Был(a) в сети 30 минут назад
Andrew_Harin Был(a) в сети 31 минуту назад
Никита Шереметьев Был(a) в сети 33 минуты назад
Женя Чендаков Был(a) в сети 34 минуты назад
kayo prod Был(a) в сети 37 минут назад
kovalew code Был(a) в сети 39 минут назад
iris Был(a) в сети 39 минут назад
Bunda Legends Был(a) в сети 41 минуту назад
Iks Был(a) в сети 42 минуты назад
Глеб Чумаров Был(a) в сети 47 минут назад
Павлик Счастливый Был(a) в сети 50 минут назад
Кирилл Молчанов Был(a) в сети 50 минут назад
rekl Был(a) в сети 54 минуты назад
sally sssally Был(a) в сети 55 минут назад
Samp Bro Был(a) в сети 58 минут назад
Night Production Был(a) в сети 58 минут назад
Князь Был(a) в сети 1 час назад
Леша Кононов Был(a) в сети 1 час назад
Олексій Колованов Был(a) в сети 1 час назад
Ereke Sharipov Был(a) в сети 1 час назад
Дмитрий Хошенко Был(a) в сети 1 час назад
Амир ничиго Был(a) в сети 1 час назад
Ilia Nadiradze Был(a) в сети 2 часа назад
Denys Koval Был(a) в сети 2 часа назад
Rr Xx Был(a) в сети 2 часа назад
Дауд Был(a) в сети 2 часа назад
Михаил Был(a) в сети 2 часа назад
dierti Dissttd2020 Был(a) в сети 2 часа назад
Pein Master Был(a) в сети 2 часа назад
Владислав Евгеньевич Был(a) в сети 2 часа назад
TOKSYCHNIE Был(a) в сети 2 часа назад
Block Games Был(a) в сети 2 часа назад
Пиздец Нахуй Был(a) в сети 2 часа назад
Тамерлан Мехдиев Был(a) в сети 2 часа назад
fdfdfdsfdd Был(a) в сети 2 часа назад
арсений дпс Был(a) в сети 2 часа назад
metroabsolute Был(a) в сети 2 часа назад
Artem20078 Был(a) в сети 2 часа назад
Rasul Akhmedov Был(a) в сети 2 часа назад
Vasia Semsnuk Был(a) в сети 2 часа назад
GetWet Был(a) в сети 3 часа назад
Matvey Domensky Был(a) в сети 3 часа назад
Русик А Был(a) в сети 3 часа назад
Верховье Был(a) в сети 3 часа назад
zhako Был(a) в сети 3 часа назад
Покет Код Был(a) в сети 3 часа назад
Aurora Online Был(a) в сети 3 часа назад
MTA Был(a) в сети 3 часа назад
Данил Ильин Был(a) в сети 3 часа назад
Был(a) в сети 3 часа назад
Dato Guliazali195 Был(a) в сети 3 часа назад
Дмитрий Кудряшов Был(a) в сети 3 часа назад
denis gold Был(a) в сети 3 часа назад
Был(a) в сети 4 часа назад
Алексей Царев Был(a) в сети 4 часа назад
WiseBear Был(a) в сети 4 часа назад
Миша Был(a) в сети 4 часа назад
Tsuioshi Cortez Был(a) в сети 4 часа назад
Сергей Зырянов Был(a) в сети 4 часа назад
Был(a) в сети 4 часа назад
Антон Лавренюк Был(a) в сети 4 часа назад
Deborf Был(a) в сети 4 часа назад
Бобер Бобров Был(a) в сети 4 часа назад
Павел Почекуев Был(a) в сети 4 часа назад
Vlad Boyko Был(a) в сети 4 часа назад
Серёга Был(a) в сети 4 часа назад
Vahag TV Был(a) в сети 4 часа назад
Pantyworld Data Был(a) в сети 4 часа назад
Karatel Был(a) в сети 5 часов назад
Tomas Shelby Был(a) в сети 5 часов назад
Мисье Бойд Был(a) в сети 5 часов назад
Егор Вершинин Был(a) в сети 5 часов назад
James_ LP Был(a) в сети 5 часов назад
Okoldovany Был(a) в сети 5 часов назад
Ирина Парнева Был(a) в сети 5 часов назад
Hill Hill Был(a) в сети 5 часов назад
Матвей Добровольский Был(a) в сети 5 часов назад
Влад Кравченко Был(a) в сети 6 часов назад
никита жулев никита жулев Был(a) в сети 6 часов назад
leva zubkov Был(a) в сети 6 часов назад
Лёва Зубков Был(a) в сети 6 часов назад
Тимур Филатов Был(a) в сети 6 часов назад
Арсений Пахноцкий Был(a) в сети 6 часов назад
Саид Франко Был(a) в сети 6 часов назад
Алексей Алексеев Был(a) в сети 6 часов назад
Сергей Рудый Был(a) в сети 6 часов назад
Был(a) в сети 6 часов назад
Константин Яковлев Был(a) в сети 6 часов назад
Алиса Кисина Был(a) в сети 7 часов назад
Redmi 14 Pro Был(a) в сети 7 часов назад
Воаоао Алал Был(a) в сети 7 часов назад
OMATILLO Alimovomatillogmailc Был(a) в сети 7 часов назад
1 1 Был(a) в сети 7 часов назад
Islam Aliev Был(a) в сети 8 часов назад
аььп Был(a) в сети 8 часов назад
Улан Борибек Был(a) в сети 8 часов назад
HepBHblu Был(a) в сети 8 часов назад
oskar. Был(a) в сети 8 часов назад
Данил Овчаров Был(a) в сети 8 часов назад
butu111 Был(a) в сети 8 часов назад
artem lets Был(a) в сети 9 часов назад
Никита Был(a) в сети 9 часов назад
Был(a) в сети 9 часов назад
fetisov Был(a) в сети 9 часов назад
Николай Был(a) в сети 10 часов назад
Савелий Пономарёв Был(a) в сети 10 часов назад
Heiks Play Был(a) в сети 10 часов назад
sobesednik Был(a) в сети 11 часов назад
[SON] Был(a) в сети 11 часов назад
AnDrOiD Был(a) в сети 12 часов назад
Fade C-OPS Был(a) в сети 12 часов назад
Роберт Азатян Был(a) в сети 12 часов назад
Andrey Traxtenberg Был(a) в сети 13 часов назад
Жасұлан Естібай Был(a) в сети 13 часов назад
Silvazxs0 Был(a) в сети 13 часов назад
Даниил Девелоп Был(a) в сети 13 часов назад
Moyz Был(a) в сети 13 часов назад
mandS Был(a) в сети 14 часов назад
Mta Top Был(a) в сети 14 часов назад
Duma 𖦏 Был(a) в сети 14 часов назад
Діма Набанов Был(a) в сети 14 часов назад
Дима Романюта Был(a) в сети 15 часов назад
1 1 Был(a) в сети 15 часов назад
Clopo Alex Был(a) в сети 15 часов назад
hayabusa Был(a) в сети 16 часов назад
Никита Балакин Был(a) в сети 16 часов назад
Нет Имени Был(a) в сети 16 часов назад
Fasbig Был(a) в сети 16 часов назад
Denys Kz Был(a) в сети 16 часов назад
Ivan Myasov Был(a) в сети 16 часов назад
Rokki Mayzer Был(a) в сети 17 часов назад
Егор Шишкань Был(a) в сети 17 часов назад
Дмитрий Был(a) в сети 17 часов назад
David Epanov Был(a) в сети 17 часов назад
Ярослав Шумилов Был(a) в сети 17 часов назад
Кирилл Кашкамеловен Был(a) в сети 17 часов назад
q mood Был(a) в сети 17 часов назад
Dan Elmers Был(a) в сети 17 часов назад
Вадим Дубницький Был(a) в сети 17 часов назад
Список ботов
rambler (19)

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

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

Описание

Сервер 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, Статьи

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