The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Salvation::DaemonDecl::Backend - Бэкэнд для Salvation::DaemonDecl

METHODS

get_meta( Str class )

Возвращает HashRef, представляющий описание демона.

Если описания для конкретного демона ещё нет - оно будет создано.

add_worker( HashRef meta, HashRef( Str :name!, CodeRef :main!, Int :max_instances!, CodeRef :log, Salvation::DaemonDecl::Transports :transport, CodeRef :reap, CodeRef :wrapper ) descr )

Добавляет новый воркер к описанию демона.

Воркер характеризуется следующими параметрами:

name

Строка, представляющая имя воркера.

Обязательный параметр.

main

Функция, представляющая основной код воркера, соверщающий одну итерацию и передающий управление вызвавшему его коду.

В эту функцию первым параметром будет передан экземпляр класса Salvation::DaemonDecl::Worker, соответствующий текущему воркеру, а далее - параметры, переданные воркеру при запуске.

В этой функции ни в коем случае не должно быть вечных циклов или вечного ожидания.

Обязательный параметр.

max_instances

Целое число, представляющее максимальное количество экземпляров конкретного воркера, которое может существовать единовременно.

Обязательный параметр.

log

Функция для логирования сообщений от воркера.

transport

Битовая маска, представляющая собой способность воркера к общению с внешним миром.

Составляющие биты (далее перечислены константы):

TRANSPORT_R

Воркер может принимать сообщения из внешнего мира.

TRANSPORT_W

Воркер может отправлять сообщения во внешний мир.

reap

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

Первым аргументом функция получает идентификатор процесса завершившегося воркера.

wrapper

Функция, представляющая обёртку вокруг кода, переданного в main.

Если необходимо, чтобы основной код воркера выполнялся в вечном цикле или содержал вечное ожидание - это должно быть сделано в данной функции.

Первым параметром в функцию будет передан экземпляр класса Salvation::DaemonDecl::Worker, соответствующий текущему воркеру, вторым - CodeRef, представляющий основной код воркера, не принимающий никаких параметров.

can_spawn_worker( HashRef meta, Str worker )

Возвращает true, если может быть порождён ещё один конкретный воркер, или false, если воркер не может быть порождён.

has_alive_workers( HashRef meta, Str worker? )

Возвращает true, если может быть порождён ещё один конкретный воркер, или false, если воркер не может быть порождён.

Если имя воркера не передано - ворзвращает true, если есть хотя бы один живой воркер, иначе - возвращает false.

count_alive_workers( HashRef meta, Str worker )

Возвращает целое число, представляющее количество активных экземпляров конкретного воркера.

wait_all_workers( HashRef meta, Str worker? )

Блокирует до тех пор, пока все воркеры не завершатся.

wait_worker_slot( HashRef meta, Str worker )

Блокирует до тех пор, пока хотя бы один конкретный воркер не завершится.

spawn_worker( HashRef meta, Str worker, ArrayRef args? )

Порождает новый экземпляр конкретного воркера.

Возвращает идентификатор порождённого процесса.

daemon_main( HashRef meta, Str worker, ArrayRef args? )

Точка входа в демон.

Аргументы worker и args используются для вызова spawn_worker. Предполагается, что так этот вызов породит главный воркер.

reinstall_signals( HashRef meta )

Переинициализирует обработчики сигналов.

Внутренний метод.

reap_worker( HashRef meta, HashRef worker, Int status )

Функция, обрабатывающая событие завершения работы конкретного воркера.

Внутренний метод.

serve_tunnel( HashRef meta, ArrayRef( Maybe[Ref] read, Maybe[Ref] write ) tun )

Функция, обрабатывающая запрос из одного конкретного тоннеля.

Внутренний метод.

serve_tunnel_by_prefix( HashRef meta, ArrayRef( Maybe[Ref] read, Maybe[Ref] write ) tun, Str{1} prefix )

Функция, обрабатывающая запрос известного типа из одного конкретного тоннеля.

Внутренний метод.

register_tmp_tunnel_handler( HashRef meta, Str prefix, Str|CodeRef method )

Регистрирует временный обработчик неизвестного ранее префикса сообщения, пришедшего в тоннель.

Такой обработчик выполняется, и тут же убирается из списка обработчиков.

Внутренни�� метод.

serve_discovery_request( HashRef meta, ArrayRef( Maybe[Ref] read, Maybe[Ref] write ) tun )

Функция, обрабатывающая запрос поиска тоннеля до конкретного воркера.

Внутренний метод.

serve_data_request( HashRef meta, ArrayRef( Maybe[Ref] read, Maybe[Ref] write ) tun )

Функция, обрабатывающая запрос отправки данных по тунелю до конкретного воркера.

Внутренний метод.

find_tunnel( HashRef meta, Int from, Int to, CodeRef cb, ArrayRef[Int] skip? )

Функция поиска тоннеля от одного воркера до другого.

Находит (или нет) и выполняет коллбэк.

Внутренний метод.

find_tunnel_deep( HashRef meta, Int from, Int to, HashRef skip, CodeRef cb )

Опрашивает соседних воркеров с целью поиска тоннеля, и выполняет коллбэк.

Внутренний метод.

ask_pid_about_tunnel( HashRef meta, Int from, Int to, Int pid, ArrayRef[Int] skip, CodeRef cb )

Спрашивает конкретный воркер, есть ли у него тоннель до конкретного воркера, и выполняет коллбэк.

Внутренний метод.

write_to( HashRef meta, Int pid, Str data )

Отправляет данные в конкретный воркер.

read_from( HashRef meta, Int pid, Int len, CodeRef cb )

Читает данные из конкретного воркера и выполняет коллбэк.

read_len( Int len, Ref pipe, CodeRef cb )

Читает сообщение определённой длины из пайпа и вызывает коллбэк.

Внутренний метод.

create_pipe()

Создаёт пайп.

Внутренний метод.

ae_handle_error_cb( AnyEvent::Handle h, Bool fatal, Str msg, AnyEvent::CondVar cv? )

Обработчик события ошибки для экземпляров класса AnyEvent::Handle.

Внутренний метод.

create_tunnel_manager( HashRef meta, ArrayRef( Ref read, Ref write ) tun )

Создаёт менеджер тоннеля.

Внутренний метод.

wait_cond( AnyEvent::CondVar cv )

Выполняет прерываемый $cv - recv()>.

Внутренний метод.

worker_class()

1 POD Error

The following errors were encountered while parsing the POD:

Around line 5:

Non-ASCII character seen before =encoding in 'Бэкэнд'. Assuming UTF-8