Skip to end of metadata
Go to start of metadata

Благодаря технологии WebSocket, браузер может держать постоянное подключение к серверу, что дает нам постоянный двусторонний канал обмена сообщениями.

Сервер websoket_backend реализован асинхронно на AnyEvent.

Установка сервера 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 указанному администратору, формат сообщений
json_requestОтсылает сообщение демону websocket_backend (Плагину Internal)

Пример отправки сообщения администратору:

use Abills::Sender::Browser;
my $Browser = Abills::Sender::Browser->new(\%conf);

send_message();

sub send_message {
  my $Browser = Abills::Sender::Browser->new(\%conf);
  $Browser->{debug} = 1; # Debug mode
  my $test_aid = 1;

  # Проверяем, что админ есть на линии
  my $test_admin_connected = $Browser->has_connected_admin($test_aid);

  if (!$test_admin_connected) {
    print "Admin not connected Error: $test_admin_connected /  \n";
    return 0;
  }

  if ( $Browser->send_message({
    AID     => $test_aid,
    TITLE   => 'Test message',
    MESSAGE => 'test message'
  }) ) {
    print "Message sendded\n";
  }

  return 1;
}


Запуск внешней команды с уведомлением

 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

 Maps (MAP_EVENT)

  • No labels