Как преобразовать sync_send_all_state_event в gen_fsm в gen_statem
Я пытаюсь преобразовать phone_fsm в phone_gen_statem из Scalability Designing forwith Erlang / OTP . В версии fsm есть несколько строк, которые выглядят примерно так:
action({outbound, ToMs}, MsId) ->
gen_fsm:sync_send_all_state_event(MsId, {outbound, ToMs});
Это обрабатывается как:
handle_sync_event({outbound, ToMs}, _From, idle, Ms) ->
case hlr:lookup_id(ToMs) of
{error, invalid} ->
io:format("ERROR, INVALID~n"),
phone:reply(invalid, ToMs, Ms),
{reply, {error, invalid}, idle, Ms};
{ok, ToMsId} when is_pid(ToMsId) ->
phone:reply(outbound, ToMs, Ms),
phone_fsm:inbound(ToMsId),
{reply, ok, calling, {Ms, ToMsId}}
end;
handle_sync_event({outbound, _ToMSISDN}, _From, State, MSISDN) ->
{reply, {error, busy}, State, MSISDN}.
Как мне сохранить состояние при получении такого глобального события? Обратите внимание, что здесь я не могу использовать режим обратного вызова handle_event_function .