Alterator/module/backend: различия между версиями
(Import from freesource.info) |
Ilis (обсуждение | вклад) Нет описания правки |
||
(не показано 8 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
<onlyinclude> | |||
=== Бэкенд === | |||
Существует два вида бэкендов: нативные и внешние. Размещаются эти бэкенды в каталогах ''/usr/lib/alterator/backend2'' и ''/usr/lib/alterator/backend3'' соответственно. | |||
Нативные бэкенды пишутся только на языке scheme и работают внутри процесса alterator. Написание нативных бэкендов требует достаточно большого опыта программирования и большой аккуратности. | |||
Внешний бэкенд может быть написан на произвольном языке программирования, при этом '''настоятельно рекомендуется''' использовать готовые библиотеки, предоставляющие API для взаимодействия с alterator. Все библиотеки построены по одному и тому же принципу - есть главный цикл взаимодействующий с alterator и есть функция-обработчик пришедших сообщений. | |||
Внешний | |||
В функции обработчике: | В функции обработчике: | ||
* анализируется вид запроса (параметр action) | * анализируется вид запроса (параметр action) | ||
Строка 13: | Строка 11: | ||
* вычисляются и выводятся значения выходных параметров. | * вычисляются и выводятся значения выходных параметров. | ||
==== Простейший | ==== Простейший бэкенд на shell ==== | ||
Пример простейшего | Пример простейшего бэкенда на shell: | ||
< | <source lang="bash"> | ||
#!/bin/sh -f | |||
po_domain="alterator-foo" | po_domain="alterator-foo" | ||
Строка 43: | Строка 42: | ||
} | } | ||
message_loop | message_loop | ||
</source> | |||
В данном примере: | |||
*'''message_loop''' — запуск цикла обработки событий | |||
*'''on_message''' — обработчик входящих сообщний. Входные переменные выглядят как переменные ''$in_<имя>''. Выходные печатаются при помощи функций ''write_*'' . | |||
*'''alterator_api_version''' — текущая версия API для взаимодействия с alterator. | |||
Если к к бэкенду <name> обращались из интерфейса по адресу ''/<name>/foo/bar'', то переменная ''$in__objects'' будет равна "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/<name>'', то ''$in__objects'' будет равна "/". | |||
< | |||
Более подробная информация по написанию бэкендов на shell находится [[Alterator/shell|здесь]]. | |||
==== Простейший бэкенд на perl ==== | |||
Пример аналогичного бэкенда на perl: | |||
<source lang="perl"> | |||
#!/usr/bin/perl -w | |||
use strict; | use strict; | ||
use Alterator::Backend3; | use Alterator::Backend3; | ||
Строка 72: | Строка 81: | ||
} | } | ||
message_loop(\&on_message);</ | message_loop(\&on_message); | ||
</source> | |||
Здесь, как и в shell-бэкенде: | |||
*'''message_loop''' — запуск цикла обработки событий | |||
*'''on_message''' — обработчик входящих сообщений. | |||
Обработчику передаётся ссылка на хэш с входными переменными. Выходные печатаются при помощи функций ''write_*'' . | |||
При обращении из интерфейса по адресу ''/<name>/foo/bar'', то в бэкенде <name> в этом хэше будет присутствовать //_objects// равный "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/<name>'', то //_objects// равно "/". | |||
Более подробная информация по написанию бэкендов на perl находится [[Alterator/perl|здесь]]. | |||
</onlyinclude> | |||
{{Alterator modules-nav}} |
Текущая версия от 12:57, 2 декабря 2008
Бэкенд
Существует два вида бэкендов: нативные и внешние. Размещаются эти бэкенды в каталогах /usr/lib/alterator/backend2 и /usr/lib/alterator/backend3 соответственно.
Нативные бэкенды пишутся только на языке scheme и работают внутри процесса alterator. Написание нативных бэкендов требует достаточно большого опыта программирования и большой аккуратности.
Внешний бэкенд может быть написан на произвольном языке программирования, при этом настоятельно рекомендуется использовать готовые библиотеки, предоставляющие API для взаимодействия с alterator. Все библиотеки построены по одному и тому же принципу - есть главный цикл взаимодействующий с alterator и есть функция-обработчик пришедших сообщений. В функции обработчике:
- анализируется вид запроса (параметр action)
- анализируется url запроса, а также значения входных параметров
- вычисляются и выводятся значения выходных параметров.
Простейший бэкенд на shell
Пример простейшего бэкенда на shell:
#!/bin/sh -f
po_domain="alterator-foo"
api_version=1
. alterator-sh-functions
on_message()
{
case "$in_action" in
list)
write_enum_item "item1" "label1"
write_enum_item "item2" "label2"
;;
read)
case "$in__objects" in
url1) write_string_param param1 "value1";;
url2) write_bool_param param2 "yes";;
esac
;;
write)
[ -n "$in_param1" ] && echo "$in_param1" >/tmp/file1
test_bool "$in_param2" && echo "yes">/tmp/file2
;;
esac
}
message_loop
В данном примере:
- message_loop — запуск цикла обработки событий
- on_message — обработчик входящих сообщний. Входные переменные выглядят как переменные $in_<имя>. Выходные печатаются при помощи функций write_* .
- alterator_api_version — текущая версия API для взаимодействия с alterator.
Если к к бэкенду <name> обращались из интерфейса по адресу /<name>/foo/bar, то переменная $in__objects будет равна "foo/bar" (то есть "хвост" адреса), если обращались по адресу /<name>, то $in__objects будет равна "/".
Более подробная информация по написанию бэкендов на shell находится здесь.
Простейший бэкенд на perl
Пример аналогичного бэкенда на perl:
#!/usr/bin/perl -w
use strict;
use Alterator::Backend3;
$TEXTDOMAIN='alterator-foo';
$DEBUG = 1;
sub on_message{
my message=shift;
if ($message->{action} eq 'list'){
write_named_auto_list('item1', 'label', 'label1');
write_named_auto_list('item2', 'label', 'label2');
}
elsif ($message->{action} eq 'read'){
write_string_param('param1', 'value1');
write_bool_param('param2', 'yes');
}
elsif ($message->{action} eq 'write'){
print F1 $message->{param1} if (exists($message->{param1}));
print F2 ($message->{param2} eq '#t')? 'yes':'no' if (exists($message->{param2}));
}
}
message_loop(\&on_message);
Здесь, как и в shell-бэкенде:
- message_loop — запуск цикла обработки событий
- on_message — обработчик входящих сообщений.
Обработчику передаётся ссылка на хэш с входными переменными. Выходные печатаются при помощи функций write_* .
При обращении из интерфейса по адресу /<name>/foo/bar, то в бэкенде <name> в этом хэше будет присутствовать //_objects// равный "foo/bar" (то есть "хвост" адреса), если обращались по адресу /<name>, то //_objects// равно "/".
Более подробная информация по написанию бэкендов на perl находится здесь.