Advertisement
Guest User

ring.erl

a guest
Nov 27th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.14 KB | None | 0 0
  1. -module(ring).
  2. -export([start/3, first/3, loop/3]).
  3.  
  4. start(N,M,Message) ->
  5.     io:format("Creo ~p processi che mandano ~p messaggi...~n",[N,M]),
  6.     spawn(ring,first,[M,Message,spawn_ring(N-1,M,Message,self())]).
  7.    
  8. spawn_ring(1,M,Message,First)->spawn(ring,loop,[M,Message,First]);
  9. spawn_ring(N,M,Message,First)->spawn(ring,loop,[M,Message,spawn_ring(N-1,M,Message,First)]).
  10.    
  11. first(M,Message,To)->
  12.     invia(M,Message,To),
  13.     ricevi().
  14.    
  15. loop(M,Message,To)->
  16.     ricevi(),
  17.     invia(M,Message,To).
  18.  
  19.  
  20. invia(1,Message,To)->
  21.     io:format("Sono (~p), mando l'ultimo messaggio a (~p)~n~n",[self(),To]),
  22.     To!{Message,self(),quit};
  23. %invia n messaggi
  24. invia(M,Message,To)->
  25.     io:format("Sono (~p), mando un messaggio a (~p)~n~n",[self(),To]),
  26.     To ! {Message,self()},
  27.     invia(M-1,Message,To).
  28.    
  29. ricevi()->
  30.     receive
  31.         {Message,FromPid} -> io:format("Sono ~p, ho ricevuto questo messaggio:~n    ~p~n da ~p~n",[self(),Message,FromPid]), ricevi();
  32.         {Message,FromPid,quit} -> io:format("Sono ~p, ho ricevuto questo messaggio:~n    ~p~n da ~p~n A QUANTO PARE È L'ULTIMO MESSAGGIO...~n~n",[self(),Message,FromPid]);
  33.         Other -> io:format("Unknown message~n~n")  
  34.     end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement