Модуль gen_statem

Модуль gen_statem содержит функции для работы с актором-сервером, создаваемом на основе обобщённого поведения gen_statem. statem — state machine, то есть машина состояний. Этот концепт удобен для манипулирования состояниями, в разных состояниях происходит разная обработка входящих событий и запросов (cast и call).

Данный модуль по смыслу и по функциям во многом похож на модуль gen_server, также используемый для создания акторов-серверов.

Функции модуля gen_statem

call(ServerRef, Request, Timeout) Делает синхронный вызов на сервер, построенный на основе gen_statem.

cast(ServerRef, Msg) Посылает асинхронное сообщение (событие) на сервер, построенный на основе gen_statem.

check_response(Msg, ReqId) Проверяет, является ли полученное сообщение ответом на конкретный асинхронный вызов — по идентификатору запроса ReqId, полученному при вызове send_request/2.

check_response(Msg, ReqIdCollection, Delete) Проверяет, является ли полученное сообщение ответом на запрос, сохранённым в коллекции.

enter_loop(Module, Opts, State, Data, Server, Actions) Наделяет текущий актор поведением gen_statem; ничего не возвращает, запуская loop.

enter_loop(Module, Opts, State, Data, Server_or_Actions) Наделяет текущий актор поведением gen_statem; ничего не возвращает, запуская loop.

receive_response(ReqId, Timeout) Получает ответ на асинхронный запрос, сделанный с помощью send_request/2; по таймауту прекращается ожидание.

receive_response(ReqIdCollection, Timeout, Delete) Получает ответ на асинхронный запрос, сделанный с помощью send_request/2, из коллекции; по таймауту прекращается ожидание; если 3-й аргумент true, удаляет ответ из коллекции.

reply(From, Reply) Используется в колбеках для ответа на call-запросы.

reply(Replies) Послать один или множественный ответ на асинхронный call-запрос.

reqids_add(ReqId, Label, ReqIdCollection) Сохраняет идентификатор запроса в коллекции.

reqids_new() Создаёт пустую коллекцию идентификаторов.

reqids_size(ReqIdCollection) Возвращает количество идентификаторов запросов в коллекции.

reqids_to_list(ReqIdCollection) Превращает коллекцию идентификаторов в список.

send_request(ServerRef, Request) Посылает асинхронный call-запрос; немедленно возвращает идентификатор запроса.

send_request(ServerRef, Request, Label, ReqIdCollection) Посылает асинхронный call-запрос на сервер, созданный на основе gen_statem, и добавляет полученный идентификатор запроса в коллекцию запросов, возвращая её.

start(Module, Args, Opts) Запускает сервер, созданный на основе gen_statem, не регистрируя его и не линкуя.

start(ServerName, Module, Args, Opts) Запускает сервер, созданный на основе gen_statem, регистрируя его, но не линкуя.

start_link(Module, Args, Opts) Запускает сервер на осннове gen_statem, линкуя его, но не регистрируя.

start_link(ServerName, Module, Args, Opts) Запускает сервер на основе gen_statem, линкуя и регистрируя его.

start_monitor(Module, Args, Opts) Запускает сервер на основе gen_statem, с монитором, но без регистрации.

start_monitor(ServerName, Module, Args, Opts) Запускает сервер на основе gen_statem, с монитором и регистрацией.

stop(ServerRef, Reason, Timeout) Останавливает сервер, созданный на основе gen_statem.

wait_response(ReqId, WaitTime) Ожидает ответ на посланный с помощью send_request/2 асинхронный запрос; если время вышло, возвращает timeout.

wait_response(ReqIdCollection, WaitTime, Delete) Ожидает ответ на любой посланный с помощью send_request/2 асинхронный запрос, сохранённый в коллекции; если время вышло, возвращает timeout; с помощью последнего аргумента можно удалить запрос из коллекции.


Copyright © 2025 Алексей Карманов