1 — При использовании ПДА (машем рукой), вызывается функция make_request(p_name, data, message, process_updates)
где: p_name — имя игрока — прикрепляется к POST data — data.player_name = p_name,
data — массив POST который отправляется запросом к серверу, message — не используется,
process_updates(response) — функция слушает ответ от сервера.
на основании p_name, внутри функции make_request определяется объект player
player = minetest.get_player_by_name(p_name), и в data прикрепляется уникальный ключ сессии игрока, который берется из его меты, либо пусто.
local p_meta = player:get_meta()
data.player_session = p_meta:get_string(«tutweb:session»)
_________________________________________
в data передаются параметры, какие функции вызываются, на данный момент их несколько:
select_module — загружает формспек из таблицы system_frontend, в аргументе передается module_name.
Пример: data.select_module = «main_header»
, regisrer_user, create_session
validate_session вызывается постоянно при каждом запросе
запросы могут комбинироваться
PHP ($player_name — всегда имя текущего игрока)
function select_module($player_name, $data_find)
function regisrer_user($name, $pass)
function create_session($player_name, $name, $pass)
function validate_session($player_name, $player_session)
function end_cur_session($player_name)
_______________________________________________
Ответ (в клиент игры) возвращается в process_updates(response)
PHP на данный момент может передать несколько ответов, которые будут обрабатываться по разному.
- Если в tbl.message что-то есть, он обрабатывается как сообщение, и выводится на прямую minetest.chat_send_all(tbl.message)
- tbl.data — выводится на выполнение для игрока в песочнице в виде LUA скрипта
- tbl.cur_player_session_key — передается ключ сессии при обновлении, который заносится в мету игрока
Ответы могут комбинироваться.
__________________________________________________________
call_form(data) — рекурсивный вызов make_request из скрипта выполнения. Пример:
data = {}
data.select_module = «main_header»
data.create_session = ""
data.login = fields.login
data.password = fields.password
call_form(data)
call_form — вызовет PHP функцию select_module, которая загрузит формспек
так-же она вызовет функцию create_session, в которую будет передан логин и пароль для проверки и создания сессии
_______________________________________________________________
После проверки сессии — данные о валидности сессии поступают в select_module($player_name, $data_find, $validate_session), в виде строки («true» или «false»). Эта функция автоматически добавляет данные в переменную, которую можно вызвать уже из ЛУА скрипта, и проверить валидность сессии. local validate_session
_______________________________________________________________________________________________________________________________________________
Шапка, середина и низ в форме должны добавляться автоматически, чтобы осуществлялся контроль авторизации например, причем так, чтобы пользователь никаким образом не мог подменить значок на форме, свидетельствующий об авторизации, или значок на форме, который показывает что ворма сделана администрацией.
Составные модули парсер PHP обрабатывает в соответствии с присвоенными типами, только потом полученный текст отправляет на исполнение в песочницу. Ниже перечислены типы модулей и порядок их сборки
- header (СИСТЕМНЫЙ) — заголовок в котором определяется форма
- form (ПОЛЬЗОВАТЕЛЬСКИЙ) — добавляет к форме пользовательские элементы
- body (СИСТЕМНЫЙ) — подключает события, которые вызываются при взаимодействиями с элементами формы добавленными header и fother
- callback (ПОЛЬЗОВАТЕЛЬСКИЙ) — подключает события, которые вызываются при взаимодействиями с элементами формы добавленными пользователем
- foter (СИСТЕМНЫЙ) — добавляет к форме пользовательские элементы, обрабатывает все ранее добавленное и вызывает форму
либо модуль system (админ) — который загружается один, как есть, конструктор ничего к нему не добавляет, используется например для формы ввода пароля