Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.01 KB | None | 0 0
  1. -module(fsm_telephone).
  2. -export([start/1, call/2, ringing/2,idle/1, dial/1, connected/1, start_ringing/0, start_tone/0, stop_ringing/0]).
  3. -export([init/0]).
  4.  
  5. start(Name) ->
  6.  ets:new(bill, [bag]),
  7.  Pid = spawn(fsm_telephone, init, []),
  8.  register(Name, Pid), ok.
  9.  
  10. init() ->
  11.     Bill = ets:new(bill, [bag]),
  12.     idle(Bill).
  13.  
  14. call(Name, Msg) ->
  15.  Name ! {request, self(), Msg}.
  16.  
  17. idle(Bill) ->
  18.  receive
  19.  {Number, incoming} ->
  20.  start_ringing(),
  21.  ringing(Number, Bill);
  22.  {Number,off_hook} ->
  23.  start_tone(),
  24.  ets:insert(Bill, Number),
  25.  dial(Bill);
  26.  {PID, bill} ->
  27.  PID ! ets:lookup(Bill)
  28.  end.
  29.  
  30. ringing(Number, Bill) ->
  31.  receive
  32.  {Number, other_on_hook} ->
  33.  stop_ringing(),
  34.  idle(Bill);
  35.  {Number, off_hook} ->
  36.  stop_ringing(),
  37.  connected(Bill)
  38.  end.
  39.  
  40. dial(Bill) ->
  41.  receive
  42.  on_hook ->
  43.  idle(Bill);
  44.  connect ->
  45.  connected(Bill)
  46.  end.
  47.  
  48. connected(Bill) ->
  49.  receive
  50.  on_hook ->
  51.  idle(Bill)
  52.  end.
  53.  
  54. start_ringing() -> ringing.
  55. start_tone() -> tone.
  56. stop_ringing() -> stopRinging.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement