ADD troll sur la page principale
[euphorik.git] / modules / erl / euphorik_minichat_conversation.erl
index d5f486f..0ce113c 100755 (executable)
 % 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.
+% Si il n'y a pas de nouveaux message alors vide est renvoyé.
 % @spec conversations([{integer(), integer(), integer()}], integer(), integer(), integer()) -> [Conversation()]
 conversations(Racines, N, D, P) ->
-   % écoute des nouveaux messages
-   case mnesia:subscribe({table, minichat, simple}) of
-      {error, E} = E ->
-         E;
-      _ ->
-         % demande des conversations
-         Conversations = conversations_detailees(Racines, N, D, P),
-         % 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(),
-               conversations_detailees(Racines, N, D, P);
-            true ->
-               Conversations
+      Conversations = conversations_detailees(Racines, N, D, P),
+      % si les conversations sont vides alors on attend un nouveau message
+      Vide = not any(
+         fun(C) ->
+            case C of
+               {[], _} -> false;
+               {_, [], _, _} -> false;
+               _ -> true
             end
-         ),
-         mnesia:unsubscribe({table, minichat, simple}),
-         Conversations_mises_en_forme
-   end.
+         end,
+         Conversations
+      ),
+      if Vide ->
+            vide;
+         true ->
+            mise_en_forme_conversations(Conversations)
+      end.
    
    
 % Ecoute les événements de modification d'une table.
@@ -86,22 +74,23 @@ conversations(Racines, N, D, P) ->
  
 % Attend qu'un nouveau message arrive, function bloquante.
 % Renvoie le nouveau message.
+% Obsolète
 % @spec attend_nouveau_message() -> #minichat | timeout
-attend_nouveau_message() ->
-   receive % attente d'un post
-      {mnesia_table_event, {write, Message, _}} ->
-         Message;
-         %file:close(F);
+%~ attend_nouveau_message() ->
+   %~ receive % attente d'un post
+      %~ {mnesia_table_event, {write, Message, _}} ->
+         %~ Message;
+         %~ %file:close(F);
       %~ {tcp_closed, _} ->
          %~ mnesia:unsubscribe({table, minichat, simple});      
-      _ ->
-         attend_nouveau_message()
+      %~ _ ->
+         %~ attend_nouveau_message()
    % 60 minutes de timeout (le cas ou il n'y a que des consultations et jamais de post)
    % Après 60 minutes de connexion, le client doit donc reétablir une connexion
    % TODO : pour être mieux : quand le socket se ferme alors un message devrait être envoyé et débloquer ce receive (demande en cours sur la mailing list de yaws)
-   after 1000 * 60 * 60 -> 
-      timeout
-   end.   
+   %~ after 1000 * 60 * 60 -> 
+      %~ timeout
+   %~ end.   
      
 
 % Mise en forme des conversations pour l'utilisateur du module.