From: Greg Burri Date: Fri, 16 May 2008 22:51:04 +0000 (+0000) Subject: FIX bug du process qui ne se terminait pas lorsque la connexion tcp était fermé ... X-Git-Tag: 1.0.0^2~67 X-Git-Url: http://git.euphorik.ch/index.cgi?a=commitdiff_plain;h=886e51257b3d610ee0e4f7576d720495914ae9ec;p=euphorik.git FIX bug du process qui ne se terminait pas lorsque la connexion tcp était fermé (enfin !) --- diff --git a/doc/TODO.txt b/doc/TODO.txt index 805658b..d4b1ec5 100755 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -166,9 +166,7 @@ 1 : Critique 2 : Urgent 3 : Peu grave - -[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 @@ -215,6 +213,8 @@ [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 === Une fois l'idée validée elle est déplacée dans une version à venir. diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index d354c21..a6099fe 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -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. diff --git a/modules/erl/euphorik_minichat_conversation.erl b/modules/erl/euphorik_minichat_conversation.erl index 0ce113c..2530327 100755 --- a/modules/erl/euphorik_minichat_conversation.erl +++ b/modules/erl/euphorik_minichat_conversation.erl @@ -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. diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index b81f60a..fd2175d 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -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. diff --git a/modules/erl/euphorik_requests.erl b/modules/erl/euphorik_requests.erl index 5c2e538..edc0e17 100755 --- a/modules/erl/euphorik_requests.erl +++ b/modules/erl/euphorik_requests.erl @@ -20,12 +20,13 @@ tester() -> 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, - %inet:setopts(A#arg.clisock, inet:getopts(A#arg.clisock, [active])), + end, + % passive -> active, permet de recevoir {tcp_closed, _} lorsque le socket se ferme + inet:setopts(A#arg.clisock, [{active, true}]), {value, {_, Contenu}} = lists:keysearch("action", 1, yaws_api:parse_post(A)), Ret = traiter_donnees(Contenu, IP), {content, "application/json", Ret}.