Advertisement
Guest User

Untitled

a guest
Nov 27th, 2018
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.70 KB | None | 0 0
  1. -module(fsm_telephone).
  2. -export([start/1, call/2, idle/1, ringing/2, dial/2, connected/1, start_ringing/1, start_tone/1, stop_ringing/1]).
  3.  
  4. start(Name) ->
  5.  Bill = [],
  6.  Pid = spawn(fsm_telephone, idle, [Bill]),
  7.  register(Name, Pid), ok.
  8.  
  9. call(Name, Msg) ->
  10.  Name ! {request, self(), Msg},
  11.  receive {reply, Reply} -> Reply end.
  12.  
  13. reply(To, Msg) ->
  14.  To ! {reply, Msg}.
  15.  
  16. idle(Bill) ->
  17.  receive
  18.  {request, From, {Number, incoming}} ->
  19.  start_ringing(From),
  20.  ringing(Number, Bill);
  21.  {request, From, {Number, call}} ->
  22.  start_tone(From),
  23.  dial(Number, Bill);
  24.  {request, From, bill} ->
  25.  reply(From, 'Billing'),
  26.  io:format("~w~n", [Bill]),
  27.  idle(Bill)
  28.  end.
  29.  
  30. ringing(Number, Bill) ->
  31.  receive
  32.  {request, From, other_on_hook} ->
  33.  stop_ringing(From),
  34.  idle(Bill);
  35.  {request, From, off_hook} ->
  36.  stop_ringing(From),
  37.  {{Year,Month,Day},{Hour,Min,Sec}} = erlang:localtime(),
  38.  Bill1 = Bill++[{'Incoming call', Number, {{Year,Month,Day},{Hour,Min,Sec}}}],
  39.  connected(Bill1)
  40.  end.
  41.  
  42. dial(Number, Bill) ->
  43.  receive
  44.  {request, From, on_hook} ->
  45.  reply(From, 'Cancel calling'),
  46.  idle(Bill);
  47.  {request, From, connect} ->
  48.  {{Year,Month,Day},{Hour,Min,Sec}} = erlang:localtime(),
  49.  Bill1 = Bill++[{'Outcoming call', Number, {{Year,Month,Day},{Hour,Min,Sec}}}],
  50.  reply(From, connected),
  51.  connected(Bill1)
  52.  end.
  53.  
  54. connected(Bill) ->
  55.  receive
  56.  {request, From, on_hook} ->
  57.  reply(From, 'Calling finished!!!'),
  58.  {{Year,Month,Day},{Hour,Min,Sec}} = erlang:localtime(),
  59.  Bill1 = Bill++[{'End Call', {{Year,Month,Day},{Hour,Min,Sec}}}],
  60.  idle(Bill1)
  61.  end.
  62.  
  63. start_ringing(To) -> reply(To, 'Ring ring!!!').
  64. start_tone(To) -> reply(To, 'Signal tone!!!').
  65. stop_ringing(To) -> reply(To, 'Stop ringing').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement