Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. -module(eventdetector).
  2. -export([start/2,edetector/3]).
  3.  
  4. start(InitialState, TransitionFun) ->
  5. spawn(?MODULE, edetector, [InitialState, TransitionFun, []]).
  6.  
  7. edetector(State, TransitionFun, Obs) ->
  8. receive
  9. {Pid, add_me} ->
  10. % send {added} to Pid, then add Pid to head of
  11. % observers list
  12. Pid ! {added},
  13. New = [Pid] ++ Obs,
  14. edetector(State, TransitionFun, New);
  15. {Pid, add_yourself_to, EDPid} ->
  16. EDPid ! {self(), add_me},
  17. receive
  18. {added} ->
  19. Pid ! {added}
  20. end,
  21. edetector(State, TransitionFun, Obs);
  22. {Pid, state_value} ->
  23. Pid ! {value_is, State},
  24. edetector(State, TransitionFun, Obs);
  25. atom ->
  26. {NewState, Event} = TransitionFun(State, atom),
  27. if Event == none ->
  28. edetector(State, TransitionFun, Obs);
  29. true ->
  30. sendTo(Obs, Event),
  31. edetector(NewState, TransitionFun, Obs)
  32. end
  33. end.
  34.  
  35. sendTo([], Event) ->
  36. _ = Event,
  37. [];
  38. sendTo([H|T], Event) ->
  39. H ! Event,
  40. sendTo(T, Event).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement