FIX bug du process qui ne se terminait pas lorsque la connexion tcp était fermé ...
authorGreg Burri <greg.burri@gmail.com>
Fri, 16 May 2008 22:51:04 +0000 (22:51 +0000)
committerGreg Burri <greg.burri@gmail.com>
Fri, 16 May 2008 22:51:04 +0000 (22:51 +0000)
doc/TODO.txt
modules/erl/euphorik_bd.erl
modules/erl/euphorik_minichat_conversation.erl
modules/erl/euphorik_protocole.erl
modules/erl/euphorik_requests.erl

index 805658b..d4b1ec5 100755 (executable)
 1 : Critique
 2 : Urgent
 3 : Peu grave\r
-     \r
-[1] Les processus en attente ne se termine pas lorsque le socket est fermé (pour l'instant un timeout de 1heure est appliqué)
-[1] Possibilité d'enregistrer plusieurs users avec le même login
+     
 [1] Lors de l'extraction d'une conv il arrive que la conv extractée soit bien créée mais vide, le bouton ne ferme pas la conv (très étrange, bug de firefox?)
    * Arrive une fois sur 20 environ
    * Jamais reproduit avec Opera\r
 [ok] jQuery définit l'option "X-Requested-With" à "XMLHttpRequest dans l'entête HTTP. De ce fait Yaws exige absolument de l'xml...
    Solution actuelle : jquery.js est modifié pour ne plus définir cette option. Trouver un autre moyen plus élégant.
 [ok] Les smiles ne devraient pas dépasser de la fenêtre lorsqu'ils sont affichés
+[ok] Les processus en attente ne se termine pas lorsque le socket est fermé (pour l'instant un timeout de 1heure est appliqué)
+[ok] Possibilité d'enregistrer plusieurs users avec le même login
 
 === Idées ===\r
 Une fois l'idée validée elle est déplacée dans une version à venir.\r
index d354c21..a6099fe 100755 (executable)
@@ -640,8 +640,12 @@ attend_evenement_troll() ->
          {add, [Troll]};
       {mnesia_table_event, {delete, troll, {troll, Id}, _, _}} ->
          {del, Id};
+      {tcp_closed, _} ->
+         exit(normal);
       _ ->
          attend_evenement_troll()
+   % 60 minutes de timeout (on ne sais jamais)
+   % Après 60 minutes de connexion, le client doit donc reétablir une connexion
    after 1000 * 60 * 60 -> 
       timeout
    end.
index 0ce113c..2530327 100755 (executable)
@@ -46,51 +46,6 @@ conversations(Racines, N, D, P) ->
          true ->
             mise_en_forme_conversations(Conversations)
       end.
-   
-   
-% Ecoute les événements de modification d'une table.
-% @spec subscribe(atom(), integer()) -> ok | erreur
-% Obsolète
-%~ subscribe(_Table, 0) ->
-   %~ erreur;
-%~ subscribe(Table, C) ->
-   %~ case mnesia:subscribe({table, Table, simple}) of 
-       %~ {error, {not_active_local, Table}} ->
-         %~ mnesia:add_table_copy(minichat, node(), ram_copies),
-         %~ subscribe(Table, C - 1);
-      %~ {error, _}->
-         %~ erreur;
-      %~ _ ->
-         %~ ok
-   %~ end.   
-   
-   
-% Arrête d'écouter les modifications d'une table.
-% @spec unsubscribe(atom()) -> term()
-% Obsolète
-%~ unsubscribe(Table) -> 
-   %~ mnesia:unsubscribe({table, Table, simple}).
-% 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);
-      %~ {tcp_closed, _} ->
-         %~ mnesia:unsubscribe({table, minichat, simple});      
-      %~ _ ->
-         %~ 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.   
      
 
 % Mise en forme des conversations pour l'utilisateur du module.
index b81f60a..fd2175d 100755 (executable)
@@ -271,12 +271,12 @@ wait_event_bd_page_chat() ->
          ok;
       {mnesia_table_event, {write, troll, Troll, [Old_troll | _], _}} when Troll#troll.date_post =/= undefined, Old_troll#troll.date_post == undefined ->
          ok;
-      M ->
-         io:format("M : ~p~n", [M]), %TODO : a virer
+      {tcp_closed, _} ->
+         exit(normal);
+      _ ->
          wait_event_bd_page_chat()
-   % 60 minutes de timeout (le cas ou il n'y a que des consultations et jamais de post)
+   % 60 minutes de timeout (on ne sais jamais)
    % 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.           
index 5c2e538..edc0e17 100755 (executable)
@@ -20,12 +20,13 @@ tester() ->
 
 \r
 out(A) ->
-   %io:format("~p~n~n", [A]),
+   %io:format("~p~n", [A]), % utilisé parfois pendant le debug
    IP = case inet:peername(A#arg.clisock) of
-         {ok, {Adresse, _Port}} -> Adresse;
+      {ok, {Adresse, _Port}} -> Adresse;
       _ -> inconnue
-   end,\r
-   %inet:setopts(A#arg.clisock, inet:getopts(A#arg.clisock, [active])),\r
+   end,
+   % passive -> active, permet de recevoir {tcp_closed, _} lorsque le socket se ferme\r
+   inet:setopts(A#arg.clisock, [{active, true}]),\r
    {value, {_, Contenu}} = lists:keysearch("action", 1, yaws_api:parse_post(A)),\r
    Ret = traiter_donnees(Contenu, IP),
    {content, "application/json", Ret}.\r