Advertisement
Guest User

ring2.erl

a guest
Nov 27th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.24 KB | None | 0 0
  1. -module(ring2).
  2. -export([start/3, first/3, loop/4]).
  3.  
  4. start(N,M,Message)->
  5.     io:format("Creo ~p attori che inviano ~p messaggi...~n",[N,M]),
  6.     spawn(ring2, first,[N,M,Message]).
  7.  
  8. first(N,M,Message)-> %first must create 2nd actor that receives the messages sent by the first one
  9.     Second= spawn(ring2,loop,[N-1,M,Message,self()]),
  10.     invia(M,Message,Second),
  11.     ricevi().
  12.    
  13. loop(1,M,Message,First)->
  14.     ricevi(),
  15.     invia(M,Message,First);
  16. loop(N,M,Message,First)-> %loop must recieve messages then it create an actor to whom he sends the messages
  17.     ricevi(),
  18.     NextActor= spawn(ring2,loop,[N-1,M,Message,First]),
  19.     invia(M,Message,NextActor).
  20.  
  21. invia(1,Message,To)->
  22.     io:format("~nSono ~p, sto inviando l'ULTIMO un messagio a ~p~n",[self(),To]),
  23.     To ! {Message, self(), quit};
  24. invia(M,Message,To)->
  25.     io:format("~nSono ~p, sto inviando un messaggio a ~p~n",[self(),To]),
  26.     To ! {Message,self()},
  27.     invia(M-1,Message,To).
  28.    
  29. ricevi() ->
  30.     receive
  31.         {Message,From}->io:format("~nSono ~p, ho ricevuto messaggio~n~n~p~n~n ...da ~p~n",[self(),Message,From]),ricevi();
  32.        
  33.         {Message,From,quit} -> io:format("~nSono ~p, ho ricevuto l'ULTIMO messaggio~n~n~p~n~n ...da ~p~n",[self(),Message,From]);
  34.         Other -> io:format("~nNon riconosco questo messagio~n")
  35.     end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement