diff --git a/docs/script-api.md b/docs/script-api.md new file mode 100644 index 0000000..08a8e79 --- /dev/null +++ b/docs/script-api.md @@ -0,0 +1,82 @@ +## API для написания скриптов +- Скрипт должен быть написан на php +- Скрипт может находиться где угодно, при добавлении скрипта можно указать директорию где его нужно искать. +- Скрипт сам должен обеспечитьвать подключение дополнительных файлов, если это необходимо. +- Скрипт свободен в своей реализации +- Скрипты подключаться сразу все, а потом уже запускаются по очереди. Порядок запуска - как-нибудь :) +- Взаимодействия между скриптами желательно вести через ивенты. + +### Основные положения. INIT +- Файл скрипта должен содержать как минимум одну функцию, название которой должно формироваться по следующему принципу: `script_[filename]_init`, именно эта функция и будет точкой входа скрипта. **Её основная задача - зарегистрировать всё, что нужно, подписаться на ивенты и передать управление дальше** +- Основная фукция должна принимать 2 параметра: `$server` - ссылка на само приложение сервера, `$params` - произвольный набор параметров. +- Система ожидает, что функция вернёт результат выполнения. + +#### Пример +```php + true, // result of executing + "response" => [ + // ... + ] + ]; + } + ``` + +### Основные положения. EVENTS +- Скрипт может работать с ивентами. Он может подписаться на ивент, или стригерить существующий ивент, или зарегистрировать свой, на который потом смогут подписаться другие скрипты. +- Регистрацию ивентов нужно проводить при инициализации скрипта. +- Подписываться на ивенты нужно при инициализации скрипта. +- Запуск обработчика ивента не произойдёт в момент вызова тригера ивента. Вместо этого нужно передать колбек функцию тригера, которая будет вызвана как только ивент станет доступным в системе, ведь на момент тригера он ещё может быть не зарегистрированным. + +#### Пример регистрации ивента + +```php + events -> add("name_of_event"); + return true; + } + ``` + +#### Пример тригера ивента + +```php + events -> trigger("name_of_event", $data); + return true; + } + ``` + +#### Пример подписки обработчика события + +```php + events -> new_handler("name_of_event", function($event) { + var_dump($event -> data); + }); + return true; + } + ``` \ No newline at end of file