Skip to content

Instantly share code, notes, and snippets.

@abhijith
Created March 8, 2010 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abhijith/325457 to your computer and use it in GitHub Desktop.
Save abhijith/325457 to your computer and use it in GitHub Desktop.
-module(foobar).
-behaviour(gen_fsm).
-define(SERVER, ?MODULE).
-export([init/1, handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4, one/2, two/2, three/2, first/0, second/0, third/0]).
-compile(export_all).
start_link() ->
gen_fsm:start_link({local, ?SERVER}, ?MODULE, [], []).
init(Args) ->
io:format("called init ~p~n", [Args]),
{ok, one, []}.
first() ->
io:format("~p~n", [?SERVER]),
gen_fsm:send_event(?SERVER, 1).
second() ->
io:format("~p~n", [?SERVER]),
gen_fsm:send_event(?SERVER, 2).
third() ->
io:format("~p~n", [?SERVER]),
gen_fsm:send_event(?SERVER, 3).
one(1, StateData) ->
NewStateData = [1|StateData],
io:format("~p~n", [NewStateData]),
{next_state, two, NewStateData}.
two(2, StateData) ->
NewStateData = [2|StateData],
io:format("~p~n", [NewStateData]),
{next_state, three, NewStateData, 5000}.
three(3, StateData) ->
NewStateData = [3|StateData],
io:format("~p~n", [NewStateData]),
{next_state, one, NewStateData};
three(timeout, StateData) ->
NewStateData = [timeout|StateData],
io:format("~p~n", [NewStateData]),
{next_state, one, NewStateData}.
handle_event(Event, StateName, StateData) ->
io:fwrite("gen_fsm called ~w:handle_event(~w, ~w, ~w)~n",
[?MODULE, Event, StateName, StateData]),
{next_state, StateName, StateData}.
handle_sync_event(Event, From, StateName, StateData) ->
io:fwrite("gen_fsm called ~w:handle_sync_event(~w, ~w, ~w, ~w)~n",
[?MODULE, Event, From, StateName, StateData]),
{next_state, StateName, StateData}.
handle_info(Info, StateName, StateData) ->
io:fwrite("gen_fsm called ~w:handle_info(~w, ~w, ~w)~n",
[?MODULE, Info, StateName, StateData]),
{next_state, StateName, StateData}.
terminate(Reason, StateName, StateData) ->
io:fwrite("gen_fsm called ~w:terminate(~w, ~w, ~w)~n",
[?MODULE, Reason, StateName, StateData]).
code_change(OldVsn, StateName, StateData, Extra) ->
io:fwrite("gen_fsm called ~w:code_change(~w, ~w, ~w, ~w)~n",
[?MODULE, OldVsn, StateName, StateData, Extra]),
{ok, StateName, StateData}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment