From: Greg Burri Date: Mon, 5 May 2008 21:13:34 +0000 (+0000) Subject: MOD cleanage du code X-Git-Tag: 1.0.0^2~105 X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=commitdiff_plain;h=d46b9cc6453803962960373f4adff4e3b89b5b4d MOD cleanage du code FIX quelques bugs bloquants, rien très grave ^ -^´ --- diff --git a/modules/Makefile b/modules/Makefile index 80eef52..bd7d763 100755 --- a/modules/Makefile +++ b/modules/Makefile @@ -11,20 +11,15 @@ rep_include = include erlc_params = -I $(rep_include) -o $(rep_ebin) $< # Compilation de toute l'application euphorik -all: $(rep_ebin)/euphorik_bd.beam \ -$(rep_ebin)/euphorik_minichat.beam \ +all: $(rep_ebin)/euphorik_bd.beam \ $(rep_ebin)/euphorik_minichat_conversation.beam \ $(rep_ebin)/euphorik_requests.beam \ $(rep_ebin)/euphorik_protocole.beam \ -# Module pour la gestion de la BD, principalement la création +# Module pour la gestion des données persistante la BD $(rep_ebin)/euphorik_bd.beam: $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl erlc $(erlc_params) - -# Module permettant l'ajout et la demande de message dans le minichat -$(rep_ebin)/euphorik_minichat.beam: $(rep_erl)/euphorik_minichat.erl $(rep_include)/euphorik_bd.hrl - erlc $(erlc_params) - + # Module permettant l'extraction des conversations du minichat $(rep_ebin)/euphorik_minichat_conversation.beam: $(rep_erl)/euphorik_minichat_conversation.erl $(rep_include)/euphorik_bd.hrl erlc $(erlc_params) diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 9ad6da2..e114b52 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -4,7 +4,7 @@ % Ce module utilise une base mnesia. % @author G.Burri --module(euphorik_minichat). +-module(euphorik_bd). -export([ % gestion : create/0, @@ -364,7 +364,6 @@ messages_by_ids(Ids) -> fun() -> % TODO : optimisations ? serait-ce du O(n) ? Query = qlc:q([E || E <- qlc:keysort(2, mnesia:table(minichat), [{order, ascending}]), lists:any(fun(Id) -> Id =:= E#minichat.id end, Ids)]), - %io:format("~s~n", [qlc:info(Query)]), qlc:e(Query) end )). @@ -479,6 +478,7 @@ delta_date_ms(D1, D2) -> % Bizarre, cette fonction n'existe pas dans la stdlib. +% Pas utilisé mais bon ca me fait de la peine de l'enlever. ceiling(X) -> T = trunc(X), case (X - T) of diff --git a/modules/erl/euphorik_minichat_conversation.erl b/modules/erl/euphorik_minichat_conversation.erl index a280e1f..8cddd03 100755 --- a/modules/erl/euphorik_minichat_conversation.erl +++ b/modules/erl/euphorik_minichat_conversation.erl @@ -17,7 +17,7 @@ -include_lib("stdlib/include/qlc.hrl"). -import(lists, [reverse/1, any/2, map/2, sublist/3, filter/2]). --import(euphorik_minichat, [resultat_transaction/1]). +-import(euphorik_bd, [resultat_transaction/1]). -import(qlc, [e/1, q/1, keysort/3]). -import(mnesia, [table/1, transaction/1]). @@ -36,7 +36,6 @@ conversations(Racines, N, D, P) -> _ -> % 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) -> @@ -51,14 +50,11 @@ conversations(Racines, N, D, P) -> 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 end. @@ -119,7 +115,7 @@ mise_en_forme_conversations([{Principale, Plus_principale} | Conversations]) -> mise_en_forme_conversation(Messages) -> lists:foldr( fun(Id, Acc) -> - case euphorik_minichat:message_by_id(Id) of + case euphorik_bd:message_by_id(Id) of {ok, Message} -> [{Message, parents(Id)} | Acc]; _ -> diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 59f8def..1f5faf3 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -21,13 +21,13 @@ % Une utilisateur s'enregistre avec un tuple {Login, Password}. register([{login, Login}, {password, Password}], IP) -> - Can_register = euphorik_minichat:can_register(IP), + Can_register = euphorik_bd:can_register(IP), if Can_register -> - case euphorik_minichat:user_by_login(Login) of + case euphorik_bd:user_by_login(Login) of {ok, _} -> erreur("Login déjà existant"); _ -> - User = euphorik_minichat:nouveau_user(Login, Password, generer_cookie()), + User = euphorik_bd:nouveau_user(Login, Password, generer_cookie()), json_reponse_login_ok(User) end; true -> @@ -35,9 +35,9 @@ register([{login, Login}, {password, Password}], IP) -> end; % Enregistrement sans {Login, Password} register([], IP) -> - Can_register = euphorik_minichat:can_register(IP), + Can_register = euphorik_bd:can_register(IP), if Can_register -> - User = euphorik_minichat:nouveau_user("", generer_cookie()), + User = euphorik_bd:nouveau_user("", generer_cookie()), json_reponse_login_ok(User); true -> erreur_register_flood() @@ -46,17 +46,16 @@ register([], IP) -> erreur_register_flood() -> erreur("Trop de register (flood)"). - % Un utilisateur se logge (avec un couple {login, mot de passe}) login([{login, Login}, {password, Password}]) -> - loginUser(euphorik_minichat:user_by_login_password(Login, Password)); + loginUser(euphorik_bd:user_by_login_password(Login, Password)); % Un utilisateur se logge (avec un cookie) login([{cookie, Cookie}]) -> - loginUser(euphorik_minichat:user_by_cookie(Cookie)). + loginUser(euphorik_bd:user_by_cookie(Cookie)). loginUser({ok, User}) -> - euphorik_minichat:update_date_derniere_connexion(User#user.id), + euphorik_bd:update_date_derniere_connexion(User#user.id), json_reponse_login_ok(User); loginUser(_) -> % ajoute un délais d'attente (TODO : un autre moyen plus élégant ?) @@ -94,7 +93,7 @@ profile( % est-ce que les messages auquel on répond existent ? Conversations = lists:foldr( fun({struct, [{root, Root}, {page, Page}]}, Acc) -> - Message_existe = euphorik_minichat:message_existe(Root), + Message_existe = euphorik_bd:message_existe(Root), if Message_existe -> [{Root, Page} | Acc]; true -> @@ -104,7 +103,7 @@ profile( [], Conversations_json ), - case euphorik_minichat:set_profile(Cookie, Login, Password, Pseudo, Email, Css, list_to_atom(Nick_format_str), Main_page, Conversations) of + case euphorik_bd:set_profile(Cookie, Login, Password, Pseudo, Email, Css, list_to_atom(Nick_format_str), Main_page, Conversations) of ok -> json_reponse_ok(); login_deja_pris -> @@ -116,7 +115,6 @@ profile( % Renvoie les messages appropriés. % last_message id et cookie sont facultatifs -% TODO : erreur : {badmatch,false} wait_event(Data) -> Cookie = case lists:keysearch(cookie, 1, Data) of {value, {_, C}} -> C; _ -> inconnu end, Last_message_id = case lists:keysearch(last_message_id, 1, Data) of {value, {_, Id}} -> Id; _ -> 0 end, @@ -130,7 +128,7 @@ wait_event(Data) -> end, Conversations_json ), - User = case euphorik_minichat:user_by_cookie(Cookie) of + User = case euphorik_bd:user_by_cookie(Cookie) of {ok, U} -> U; _ -> inconnu end, @@ -146,14 +144,13 @@ wait_event(Data) -> lists:map( fun({Mess, Repond_a}) -> Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, - A_repondu_a_message = User =/= inconnu andalso euphorik_minichat:a_repondu_a_message(User#user.id, Mess#minichat.id), - Est_une_reponse_a_user = User =/= inconnu andalso euphorik_minichat:est_une_reponse_a_user(User#user.id, Mess#minichat.id), - % io:format("Repond_a : ~p~n", [Repond_a]), + A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), + Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), User_mess = if Mess#minichat.auteur_id =:= 0 -> inconnu; true -> - {ok, U2} = euphorik_minichat:user_by_id(Mess#minichat.auteur_id), + {ok, U2} = euphorik_bd:user_by_id(Mess#minichat.auteur_id), U2 end, {struct, [ @@ -168,8 +165,8 @@ wait_event(Data) -> {content, Mess#minichat.contenu}, {answer_to, {array, lists:map( fun(Id_mess) -> - {ok, M} = euphorik_minichat:message_by_id(Id_mess), - {ok, User_reponse} = euphorik_minichat:user_by_mess(M#minichat.id), + {ok, M} = euphorik_bd:message_by_id(Id_mess), + {ok, User_reponse} = euphorik_bd:user_by_mess(M#minichat.id), {struct, [{id, M#minichat.id}, {nick, M#minichat.pseudo}, {login, User_reponse#user.login}]} end, Repond_a @@ -201,15 +198,15 @@ put_message( {answer_to, {array, Answer_to}} ] ) -> - case euphorik_minichat:user_by_cookie(Cookie) of + case euphorik_bd:user_by_cookie(Cookie) of {ok, User} -> Strip_content = string:strip(Content), if (Strip_content =:= []) -> erreur("Message vide"); true -> % TODO : non-atomique (update_pseudo+nouveau_message) - euphorik_minichat:update_pseudo_user(User#user.id, Nick), - case euphorik_minichat:nouveau_message(Strip_content, User#user.id, Answer_to) of + euphorik_bd:update_pseudo_user(User#user.id, Nick), + case euphorik_bd:nouveau_message(Strip_content, User#user.id, Answer_to) of erreur -> erreur("Impossible d'ajouter un nouveau message"); _ -> json_reponse_ok() @@ -250,9 +247,7 @@ format_date(Date) -> end ++ io_lib:format("~2.10.0B:~2.10.0B:~2.10.0B", [Heure, Minute, Seconde]) ). - - -%%%%%%%%% %%%%%%%%% + json_reponse_ok() -> {struct, [{reply, "ok"}]}. @@ -288,6 +283,3 @@ json_reponse_login_ok(User) -> } ] }. - - -%%%%%%%%% %%%%%%%%% diff --git a/modules/include/euphorik_defines.hrl b/modules/include/euphorik_defines.hrl index 5c2d357..443437f 100755 --- a/modules/include/euphorik_defines.hrl +++ b/modules/include/euphorik_defines.hrl @@ -1,6 +1,11 @@ - +% Un message est considéré comme du spam s'il est posté 1 seconde ou moins après le dernier posté +-define(DUREE_SPAM, 1000). % ms +% Lorsque l'indice de spam d'un utilisateur atteind cette valeur alors il ne peut plus poster pendant un moment +-define(INDICE_SPAM_MAX, 6). +% Un utilisateur ayant trop spamé est bloqué pendant ce temps +-define(DUREE_BLOCAGE_SPAM, 20000). % ms % le temps qu'une ip est bannie après avoir voulu s'etre enregistré trop de fois trop rapidement diff --git a/sessions/erl.session b/sessions/erl.session index e25e717..5dda940 100755 --- a/sessions/erl.session +++ b/sessions/erl.session @@ -1,23 +1,20 @@ # SciTE session file -buffer.1.path=/home/gburri/projets/euphorik/modules/erl/euphorik_bd.erl -buffer.1.position=1 +buffer.1.path=/home/gburri/projets/euphorik/modules/erl/euphorik_minichat.erl +buffer.1.position=360 +buffer.1.current=1 -buffer.2.path=/home/gburri/projets/euphorik/modules/erl/euphorik_minichat.erl +buffer.2.path=/home/gburri/projets/euphorik/modules/erl/euphorik_minichat_conversation.erl buffer.2.position=1 -buffer.3.path=/home/gburri/projets/euphorik/modules/erl/euphorik_minichat_conversation.erl +buffer.3.path=/home/gburri/projets/euphorik/modules/erl/euphorik_protocole.erl buffer.3.position=1 -buffer.4.path=/home/gburri/projets/euphorik/modules/erl/euphorik_protocole.erl +buffer.4.path=/home/gburri/projets/euphorik/modules/erl/euphorik_requests.erl buffer.4.position=1 -buffer.5.path=/home/gburri/projets/euphorik/modules/erl/euphorik_requests.erl +buffer.5.path=/home/gburri/projets/euphorik/modules/include/euphorik_bd.hrl buffer.5.position=1 -buffer.6.path=/home/gburri/projets/euphorik/modules/include/euphorik_bd.hrl -buffer.6.position=1 - -buffer.7.path=/home/gburri/projets/euphorik/modules/include/euphorik_defines.hrl -buffer.7.position=1 -buffer.7.current=1 +buffer.6.path=/home/gburri/projets/euphorik/modules/include/euphorik_defines.hrl +buffer.6.position=336