Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(fsm_telephone).
- -export([start/1, call/2, ringing/2,idle/1, dial/1, connected/1, start_ringing/0, start_tone/0, stop_ringing/0]).
- -export([init/0]).
- start(Name) ->
- ets:new(bill, [bag]),
- Pid = spawn(fsm_telephone, init, []),
- register(Name, Pid), ok.
- init() ->
- Bill = ets:new(bill, [bag]),
- idle(Bill).
- call(Name, Msg) ->
- Name ! {request, self(), Msg}.
- idle(Bill) ->
- receive
- {Number, incoming} ->
- start_ringing(),
- ringing(Number, Bill);
- {Number,off_hook} ->
- start_tone(),
- ets:insert(Bill, Number),
- dial(Bill);
- {PID, bill} ->
- PID ! ets:lookup(Bill)
- end.
- ringing(Number, Bill) ->
- receive
- {Number, other_on_hook} ->
- stop_ringing(),
- idle(Bill);
- {Number, off_hook} ->
- stop_ringing(),
- connected(Bill)
- end.
- dial(Bill) ->
- receive
- on_hook ->
- idle(Bill);
- connect ->
- connected(Bill)
- end.
- connected(Bill) ->
- receive
- on_hook ->
- idle(Bill)
- end.
- start_ringing() -> ringing.
- start_tone() -> tone.
- stop_ringing() -> stopRinging.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement