Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(eventdetector).
- -export([start/2,edetector/3]).
- start(InitialState, TransitionFun) ->
- spawn(?MODULE, edetector, [InitialState, TransitionFun, []]).
- edetector(State, TransitionFun, Obs) ->
- receive
- {Pid, add_me} ->
- % send {added} to Pid, then add Pid to head of
- % observers list
- Pid ! {added},
- New = [Pid] ++ Obs,
- edetector(State, TransitionFun, New);
- {Pid, add_yourself_to, EDPid} ->
- EDPid ! {self(), add_me},
- receive
- {added} ->
- Pid ! {added}
- end,
- edetector(State, TransitionFun, Obs);
- {Pid, state_value} ->
- Pid ! {value_is, State},
- edetector(State, TransitionFun, Obs);
- atom ->
- {NewState, Event} = TransitionFun(State, atom),
- if Event == none ->
- edetector(State, TransitionFun, Obs);
- true ->
- sendTo(Obs, Event),
- edetector(NewState, TransitionFun, Obs)
- end
- end.
- sendTo([], Event) ->
- _ = Event,
- [];
- sendTo([H|T], Event) ->
- H ! Event,
- sendTo(T, Event).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement