用sys:log调试gen_fsm
16> gen_fsm:send_event(fsm,{button,"000000"}).buttion: "000000", So far: [], Code: "afw"
wrong passwd: "000000"
ok
17> sys:log(fsm,get,5000).
{ok,[{{in,{'$gen_all_state_event',{button,"aaa"}}},
{fsm,initial_state_name},
#Fun<gen_fsm.0.64764857>},
{return,{fsm,initial_state_name},#Fun<gen_fsm.1.64764857>},
{{in,{'$gen_event',{button,"aaa"}}},
{fsm,initial_state_name},
#Fun<gen_fsm.0.64764857>},
{return,{fsm,initial_state_name},#Fun<gen_fsm.1.64764857>},
{{in,{'$gen_event',{button,"000000"}}},
{fsm,initial_state_name},
#Fun<gen_fsm.0.64764857>},
{return,{fsm,initial_state_name},#Fun<gen_fsm.1.64764857>}]}
18> -module(fsm).
-behaviour(gen_fsm).
-define(SERVER, ?MODULE).
%% ------------------------------------------------------------------
%% API Function Exports
%% ------------------------------------------------------------------
%% ------------------------------------------------------------------
%% gen_fsm Function Exports
%% ------------------------------------------------------------------
-export([init/1, state_name/2, state_name/3, handle_event/3,
handle_sync_event/4, handle_info/3, terminate/3,
code_change/4]).
-compile(export_all).
%% ------------------------------------------------------------------
%% API Function Definitions
%% ------------------------------------------------------------------
start_link(_Args) ->
gen_fsm:start_link({local, ?SERVER}, ?MODULE, _Args, []).
%% ------------------------------------------------------------------
%% gen_fsm Function Definitions
%% ------------------------------------------------------------------
init(_Args) ->
{ok, initial_state_name, {[],_Args}}.
state_name(_Event, State) ->
io:format("state_event /2"),
{next_state, state_name, State}.
state_name(_Event, _From, State) ->
io:format("state_event /3"),
{reply, ok, state_name, State}.
handle_event(_Event, StateName, State) ->
io:format("i handle it"),
{next_state, StateName, State}.
handle_sync_event(_Event, _From, StateName, State) ->
{reply, ok, StateName, State}.
handle_info(_Info, StateName, State) ->
{next_state, StateName, State}.
terminate(_Reason, _StateName, _State) ->
ok.
code_change(_OldVsn, StateName, State, _Extra) ->
{ok, StateName, State}.
%% ------------------------------------------------------------------
%% Internal Function Definitions
%% ------------------------------------------------------------------
initial_state_name({button,Digit},{SoFar,Code})->
io:format("buttion: ~p, So far: ~p, Code: ~p~n", ),
InputDigits = lists:append(SoFar, Digit),
case InputDigits of
Code ->
do_unlock(),
{next_state, open, {[], Code}, 10000};
Incomplete when length(Incomplete)<length(Code) ->
{next_state, initial_state_name, {Incomplete, Code}, 5000};
Wrong ->
io:format("wrong passwd: ~p~n", ),
{next_state, initial_state_name, {[], Code}}
end;
initial_state_name(timeout, {_SoFar, Code}) ->
io:format("timout when waiting button inputting, clean the input, button again plz~n"),
{next_state, initial_state_name, {[], Code}}.
open(timeout, State) ->
do_lock(),
{next_state, initial_state_name, State}.
do_unlock() ->
io:format("passwd is right, open the DOOR.~n").
do_lock() ->
io:format("over, close the DOOR.~n"). function_clause erlang
No matching function clause is found when evaluating a function call.
页:
[1]