Как преобразовать 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 .

0 ответов

Другие вопросы по тегам