===== Browser ( WebSocket ) =====
Благодаря технологии WebSocket, браузер может держать постоянное подключение к серверу, что дает нам постоянный двусторонний канал обмена сообщениями.
Сервер websoket_backend реализован асинхронно на AnyEvent.
[[abills:docs:manual:websocket_backend|Установка сервера WebSocket]] \\
** Конфигурация **
**libexec/config.pl**
$conf{WEBSOCKET_ENABLED} = 1;
\\
==== Abills::Sender::Browser API ====
Методы
^is_connected()| Проверяет внутреннее соединение с WebSocket сервером |
^has_connected_admin($aid)| Проверяет, есть ли admin на линии (подключился ли его браузер к серверу) |
^send_message({ AID => 1, MESSAGE => $json_message })| Отправляет $json_message указаному администратору, [[abills:docs:events|формат сообщений]] |
^json_request| Отсылает сообщение демону ''websocket_backend'' (Плагину ''Internal'') |
Пример отправки сообщения администратору:
use Abills::Sender::Browser;
my $Browser = Abills::Sender::Browser->new( $db, $admin, \%conf);
my $test_aid = 1;
my $test_notification = {
TYPE => "MESSAGE",
TITLE => "Test notification",
TEXT => "Just
some
text"
};
# Проверяем, что админ есть на линии
my $test_admin_connected = $Browser->has_connected_admin( $test_aid );
return 0 if ( !$test_admin_connected );
return $Browser->send_message( { AID => $test_aid, MESSAGE => $test_notification } );
==== Запуск внешней команды с уведомлением ====
use Abills::Sender::Browser;
my Abills::Sender::Browser $Browser = Abills::Sender::Browser->new($db, $admin, \%conf);
my $sended = $Browser->json_request( {
MESSAGE => {
TYPE => 'COMMAND',
AID => $admin->{AID}, # Кому придёт уведомление
PROGRAM => '/usr/bin/ping', # Имя программы
PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ], # Массив аргументов для программы
ARGS => { # Аргументы для Abills::Base::cmd
timeout => 5
}
}
});
Пример выше можно заменить вызовом функции Abills::Misc::run_in_background
require Abills::Misc;
run_in_background('/usr/bin/ping', { timeout => 5 }, { PROGRAM_ARGS => [ '-c 3', '-q', '192.168.1.1' ] });
Когда сообщение приходит в браузер администратора, оно передаётся AMesssageChecker.
==== Расширение обработчиков сообщений AMessageChecker ====
* [[abills:docs:development:modules:maps#otobrazhenie_sobytij_na_karte| Maps (MAP_EVENT) ]]