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
{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.
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.
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.
\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