Current section
Files
Jump to
Current section
Files
priv/example_statem.erl
-module(example_statem).
-behaviour(gen_statem).
%% API
-export([start_link/0]).
%% gen_statem callbacks
-export([ init/1
, callback_mode/0
, terminate/3
, code_change/4
]).
-export([ state_1/3
, state_2/3
, case_state/3
]).
-define(SERVER, ?MODULE).
%%%===================================================================
%%% API
%%%===================================================================
start_link() ->
gen_statem:start_link({local, ?SERVER}, ?MODULE, [], []).
callback_mode() -> state_functions.
%%%===================================================================
%%% gen_statem callbacks
%%%===================================================================
init([]) ->
{ok, state_1, 2}.
state_1(_EventType, e1, Data) ->
{next_state, state_2, Data};
state_1(_EventType, e2, Data) ->
{stop, normal, Data};
state_1(_EventType, e3, Data) ->
{keep_state, Data}.
state_2(_EventType, e4, Data) ->
{next_state, state_1, Data};
state_2(_EventType, e5, Data) ->
{next_state, case_state, Data}.
case_state(_EventType, {e6, Param}, Data) ->
do_some_things,
do_some_more_things,
case Param =:= 123 of
true ->
case Data =:= 2 of
true ->
if
Data == 2 ->
{keep_state, Data};
Data == 3 ->
{next_state, state_2, Data}
end;
false ->
{stop, blah, Data}
end;
false ->
{keep_state, Data}
end.
terminate(_TermEvent, _StateName, _State) ->
ok.
code_change(_CodeChangeEvent, StateName, State, _Extra) ->
{ok, StateName, State}.
%%%===================================================================
%%% Internal functions
%%%===================================================================