-
Notifications
You must be signed in to change notification settings - Fork 0
ru_Events
Модулям m0ssion доступно два вида событий: событие новой команды с сервера и событие отправки команды на сервер клиентом. Это основные события, с которыми можно (и нужно) работать, остальные возможные — лишь их производные. Минимализм m0ssion заключается именно в этом: не перегружать систему лишними перехватами, ведь, перехватив команду клиенту и от него, можно сделать всё что угодно. В том числе и не дать команде дойти, но об этом позже.
Если модуль желает получать события от системы, он регистрирует обработчик с помощью метода m0s.addEvent(). В параметрах он указывает желаемый тип события (receive или send) и функцию, с помощью которой будет обрабатывать событие. Функция принимает на вход один единственный параметр — строку command, содержащую в себе команду клиента или сервера. После работы функция должна вернуть результат работы: (не)изменённую команду или false, если дальнейшая обработка не должна проводиться. Каждому последующему обработчику передаётся уже видоизменённая команда, если же платформа получает от какого-то обработчика false, она завершает цепочку и "теряет" команду. Возврат результата обязателен, отсутствие return приведёт к зависанию клиента!
Без проблем. Ниже представлен пример обработчика, регистрирующегося на событие получения команды от сервера, ищущего там строку "OBJ_" и блокирующего её распространение: так будем блокировать объекты на планетах.
function disable_objects (command)
{
if (command.indexOf('OBJ_') > -1)
return false; // объекты #нинужны
else
return command; // ok, пропускаем
}
m0s.addEvent ('receive', disable_objects); // receive - получение команды с сервераНе дадим себе забивать другим мозг о своей возлюбленной, например, Алисе:
function lock_me (command)
{
var name = 'алиса';
if (command.toLowerCase().indexOf(name) > -1)
return false; // не в этой жизни
else
return command; // ok, пропускаем
}
m0s.addEvent ('send', lock_me); // send - отправка команды клиентом Одну и ту же функцию можно использовать в обоих направлениях. Например, не дадим себе и другим использовать много скобочек, потому что это идиотизм:
function parentheses_are_cancer (command)
{
var rx = /[а-яА-Яa-zA-Z](?:\)|\(|9|0){4,}/;
if (rx.test(command))
return false; // нет, спасибо
else
return command; // ok, пропускаем
}
m0s.addEvent ('send', parentheses_are_cancer); // send - отправка команды клиентом
m0s.addEvent ('receive', parentheses_are_cancer); // receive - получение команды с сервераРабота модулей не ограничивается блокировкой команд, их ещё можно изменять. Давайте заменим всех "кошек" на "няяш" в тексте других пользователей:
function cats (command)
{
command = command.replace('кошк', 'няяш');
return command; // вернём видоизменённую команду
}
m0s.addEvent ('receive', cats); // receive - получение команды с сервераВ примерах выше использовались явно заданные функции, однако, никто не запрещает использовать и анонимные:
m0s.addEvent ('receive', function (command) {
command = command.replace('кошк', 'няяш');
return command;
});Теперь, когда стало хоть немного стало понятно, как работают события, настало время изучить устройство самой Galaxy.
m0ssion framework by IDENT Software