Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/Alterator/backend2 ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Система нативных бакендов в Alterator


Напомню что основной транспортной магистралью alterator является шина Woobus, по которой перемещаются команды Woo в стандартном формате

Проходя по шине команды преобразуются и в конце-концов попадают в модуль – Ensign, который передаёт их на обработку самым низкоуровневым модулям – бакендам.


Note: ознакомьтесь ограничениями на имена бакендов и передаваемые атрибуты


Бакенды бывают двух видов – внешние и нативные. Первые создаются на произвольном языке программирования, вторые пишутся на Scheme, но зато получают все бонусы от существования в родной среде. Внешние бакенды описываются в отдельной статье, здесь речь пойдёт о нативных бакендах.


Нативные бакенды располагаются в каталоге /usr/lib/alterator/backend2. Имя бакенда должно совпадать с именем корневого объекта (до первого '/') в передаваемой woo-команде. Так, например, для обработки команды (foo/bar/baz action “read”) будет вызван бакенд с именем foo.


Каждый бакент есть объект. При поступлении очередной команды, обрабатывается её аттрибут action и вызывается одноименный метод объекта.
В случае отсуствия данного метода производится попытка вызова самого объекта, и, если тот не вернул ничего осмысленного, то считается, что бакенд не обслуживает данный вид операций.


При вызове метода или самого объекта передаются следующие параметры:


Например, для команды (/foo/bar/baz action “read” arg1 “value1” arg2 “value2”), objects полагается равным (bar baz), а ассоциативный список параметров выглядит как
( (action . “read”) (arg1 . “value1”) (arg2 . “value2”) ) .

Возвращаемые значения


Каждый вызов бакенда должен вернуть одно из следующих возможных значений:


Все остальные значения считаются ошибочными о чём и будет сообщено в обратной woo-командe.


Возможно такие правила покажутся несколько странными, но так было когда-то сделано из наилучших пожеланий – избавить автора нативного бакенда от детального составления woo-ответов.

Примеры бакендов


Самый простой бакенд состоит из одной единственной функции, самостоятельно разбирающейся с тем какое именно действие стоит выполнить.



При вызове он всегда будет возращать ошибку.


Другая крайность – бакенд, который обрабатывает только определённые виды action.


Этот бакенд при вызове '(/foo action “read”) вернёт '(/foo arg1 “value1” arg2 “value2”), а при вызове '(/foo action “list”), вернёт команды (/foo/obj1), (/foo/obj2) и (/foo/obj3 arg3 “value3”) .


Золотая середина – бакенд, который обрабатывает несколько конкретных действий, и кроме того способен делать дополнительную обработку оставшихся действий.


Этот бакенд при вызове '(/foo action “read”) вернёт '(/foo arg1 “value1” arg2 “value2”), а при вызове '(/foo action “other”) вернёт ошибку '(/error/foo reason “I don't know”).


 
Файлов нет. [Показать файлы/форму]
Много комментариев (2). [Показать комментарии/форму]