-
-% Crée un process représentant le minichat, renvoie un tuple {Pid, Conversations}
-start(Racines, N, D, P) ->
- {mise_en_forme_conversations(loop(conversations(Racines, N, D, P))), conversations(Racines, N, D, P)}.
-
-% Attend pour d'autres messages.
-wait(Pid) ->
- Pid ! {wait, self()},
- receive
- {nouveau, Message} -> Message
+% Renvoie les conversations sous la forme d'une liste de conversation.
+% Chaque conversation est un tuple {[{Message, Parents}], Plus} où
+% Message est le message de type #minichat et Parents une liste d'Id.
+% Plus est un bool. Si Plus vaut true alors il y a encore des messages.
+% Si il n'y a pas de nouveaux message alors la fonction est bloquante et attend un nouveau message.
+% @spec conversations([{integer(), integer(), integer()}], integer(), integer(), integer()) -> [Conversation()]
+conversations(Racines, N, D, P) ->
+ % écoute des nouveaux messages
+ case subscribe(minichat, 2) of
+ erreur = E ->
+ E;
+ _ ->
+ % demande des conversations
+ Conversations = conversations_detailees(Racines, N, D, P),
+ %io:format("Conversations : ~p~n", [Conversations]),
+ % si les conversations sont vides alors on attend un nouveau message
+ Vide = not any(
+ fun(C) ->
+ case C of
+ {[], _} -> false;
+ {_, [], _, _} -> false;
+ _ -> true
+ end
+ end,
+ Conversations
+ ),
+ Conversations_mises_en_forme = mise_en_forme_conversations(
+ if Vide ->
+ attend_nouveau_message(),
+ %io:format("Racines = ~p, N = ~p, D = ~p, P = ~p~n", [Racines, N, D, P]),
+ %io:format("Conversations = ~p~n", [conversations_detailees(Racines, N, D, P)]),
+ conversations_detailees(Racines, N, D, P);
+ true ->
+ Conversations
+ end
+ ),
+ %io:format("Conversations_mises_en_forme = ~p~n", [Conversations_mises_en_forme]),
+ unsubscribe(minichat),
+ Conversations_mises_en_forme