Guest User

Untitled

a guest
Jul 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. -module(telephone).
  2. -compile(export_all).
  3.  
  4. start(N) when is_integer(N), N > 1 ->
  5. First = spawn( fun() -> loop() end ),
  6. First ! {set_recipient, start(N-1, First)},
  7. register(game_master, First).
  8.  
  9. start(1, Neighbor) ->
  10. spawn( fun() -> loop(Neighbor) end );
  11. start(N, Neighbor) ->
  12. start(N-1, spawn( fun() -> loop(Neighbor) end )).
  13.  
  14. play(Message) ->
  15. game_master ! {send, Message}.
  16.  
  17. loop(WhoToTell) ->
  18. MyPid = self(),
  19. receive
  20. {send, Message} ->
  21. io:format("(~p) Whispering to my neighbor: ~p~n", [MyPid, Message]),
  22. WhoToTell ! {MyPid, Message},
  23. loop(WhoToTell);
  24.  
  25. {MyPid, Message} ->
  26. io:format("(~p) Got my message back: ~p~n", [MyPid, Message]),
  27. loop(WhoToTell);
  28.  
  29. {_Sender, Message}=X ->
  30. io:format("(~p) Passing message along: ~p~n", [MyPid, Message]),
  31. WhoToTell ! X,
  32. loop(WhoToTell)
  33. end.
  34.  
  35. loop() ->
  36. receive
  37. {set_recipient, Pid} -> loop(Pid)
  38. end.
Add Comment
Please, Sign In to add comment