FIX problème de rafraichissement des messages (flush, js)
authorGreg Burri <greg.burri@gmail.com>
Sun, 1 Jun 2008 12:22:29 +0000 (12:22 +0000)
committerGreg Burri <greg.burri@gmail.com>
Sun, 1 Jun 2008 12:22:29 +0000 (12:22 +0000)
ADD module de test coté serveur

doc/TODO.txt
js/pageMinichat.js
modules/Makefile
modules/erl/euphorik_protocole.erl
modules/erl/euphorik_test.erl [new file with mode: 0644]
pages/about.html
tools/mise_en_prod.rb

index e4c83a3..42f132c 100755 (executable)
@@ -1,7 +1,6 @@
 == TODO ==\r
 \r
 === v1.0 ===\r
 == TODO ==\r
 \r
 === v1.0 ===\r
-* Rendre compatible IE 7 (pfff..)\r
 * Corriger les bugs de niveau [1] et [2]\r
 * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
 === v1.1 ===\r
 * Corriger les bugs de niveau [1] et [2]\r
 * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
 === v1.1 ===\r
 [2] Le changement de skin n'est pas mémorisé lorsque l'on est pas connecté (normal puisque le style est mémorisé dans le profil)
    * solution 1 : permettre le changement de skin uniquement pour les personnes enregistré ?
    * solution 2 : mémoriser le skin courant dans un cookie\r
 [2] Le changement de skin n'est pas mémorisé lorsque l'on est pas connecté (normal puisque le style est mémorisé dans le profil)
    * solution 1 : permettre le changement de skin uniquement pour les personnes enregistré ?
    * solution 2 : mémoriser le skin courant dans un cookie\r
-[2] Après l'ajout d'une image il n'est pas possible de naviger depuis celle ci vers les autres images en utilisant Next et Prev de lightbox après l'avoir affiché\r
-[2] cliquer sur les smiles ne marche pas sous IE
+[2] Après l'ajout d'une image il n'est pas possible de naviger depuis celle ci vers les autres images en utilisant Next et Prev de lightbox après l'avoir affich\r
+[2] Plein de bugs sous MS internet explorer 7
+   * click sur le lien du conv insère sont id systématiquement au début du message
+   * le changement de skin foire complétement
 [2] griser le login dans le profil pour montrer qu'on ne peut pas l'éditer
 [3] Quand on revient en arrière dans firefox le message en rédaction est perdu
    * Pas sous Opera, apparemment Firefox recharge toute la page (donc impossible qu'il puisse remettre le message)
 [2] griser le login dans le profil pour montrer qu'on ne peut pas l'éditer
 [3] Quand on revient en arrière dans firefox le message en rédaction est perdu
    * Pas sous Opera, apparemment Firefox recharge toute la page (donc impossible qu'il puisse remettre le message)
index 48ab5be..356956c 100755 (executable)
@@ -529,12 +529,6 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
             
          messagePair = !messagePair
       }
             
          messagePair = !messagePair
       }
-      
-   // enlève les messages exedentaires
-   var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size()
-   
-   if (nbMessagesAffiche > this.nbMessageMax)
-      $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty()
    
    var DOM = $(XHTML)
    DOM.each(
    
    var DOM = $(XHTML)
    DOM.each(
@@ -640,6 +634,11 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
    )
    DOM.prependTo("#conversations #" + this.getId())
    
    )
    DOM.prependTo("#conversations #" + this.getId())
    
+   // enlève les messages exedentaires
+   var nbMessagesAffiche = $("#conversations #" + this.getId() + " .message").size()   
+   if (nbMessagesAffiche > this.nbMessageMax)
+      $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).remove()
+   
    if (this.messages.length > 0)
       this.idDernierMessageAffiche = this.messages[this.messages.length-1].id
 }
    if (this.messages.length > 0)
       this.idDernierMessageAffiche = this.messages[this.messages.length-1].id
 }
index 947a3c3..4f808db 100755 (executable)
@@ -16,6 +16,7 @@ $(rep_ebin)/euphorik_minichat_conversation.beam \
 $(rep_ebin)/euphorik_requests.beam \\r
 $(rep_ebin)/euphorik_protocole.beam \
 $(rep_ebin)/euphorik_daemon.beam \
 $(rep_ebin)/euphorik_requests.beam \\r
 $(rep_ebin)/euphorik_protocole.beam \
 $(rep_ebin)/euphorik_daemon.beam \
+$(rep_ebin)/euphorik_test.beam
 \r
 # Module pour la gestion des données persistante la BD\r
 $(rep_ebin)/euphorik_bd.beam: $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl $(rep_include)/euphorik_defines.hrl\r
 \r
 # Module pour la gestion des données persistante la BD\r
 $(rep_ebin)/euphorik_bd.beam: $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl $(rep_include)/euphorik_defines.hrl\r
@@ -39,6 +40,10 @@ $(rep_ebin)/euphorik_protocole.beam: $(rep_erl)/euphorik_protocole.erl $(rep_inc
       \r
 # Module effectuant periodiquement certaines tâches\r
 $(rep_ebin)/euphorik_daemon.beam: $(rep_erl)/euphorik_daemon.erl $(rep_include)/euphorik_defines.hrl\r
       \r
 # Module effectuant periodiquement certaines tâches\r
 $(rep_ebin)/euphorik_daemon.beam: $(rep_erl)/euphorik_daemon.erl $(rep_include)/euphorik_defines.hrl\r
+       erlc $(erlc_params)
+   
+# Module dédié au tests
+$(rep_ebin)/euphorik_test.beam: $(rep_erl)/euphorik_test.erl $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl
        erlc $(erlc_params)\r
 \r
 # Suppression des modules compilés\r
        erlc $(erlc_params)\r
 \r
 # Suppression des modules compilés\r
index faf877d..d99e4cc 100755 (executable)
@@ -91,7 +91,7 @@ loginUser(_, _) ->
    \r
 % Renvoie un string() représentant un cookie en base 36. Il y a 10^32 possibillités.\r
 generer_cookie() ->
    \r
 % Renvoie un string() représentant un cookie en base 36. Il y a 10^32 possibillités.\r
 generer_cookie() ->
-   {A1,A2,A3} = now(),
+   {A1, A2, A3} = now(),
    random:seed(A1, A2, A3),\r
    erlang:integer_to_list(random:uniform(math:pow(10, 32)), 36).\r
 
    random:seed(A1, A2, A3),\r
    erlang:integer_to_list(random:uniform(math:pow(10, 32)), 36).\r
 
diff --git a/modules/erl/euphorik_test.erl b/modules/erl/euphorik_test.erl
new file mode 100644 (file)
index 0000000..d5c83c3
--- /dev/null
@@ -0,0 +1,98 @@
+% coding: utf-8
+% Module de test de euphorik.
+% Crée un certain nombre d'utilisateur et post des messages aléatoire.
+
+
+-module(euphorik_test).
+-compile(export_all).
+
+-include("../include/euphorik_bd.hrl").
+
+
+% N est le nombre d'utilisateur
+start(N) ->
+   Ids = creer_users(N),
+   lists:map(
+      fun(Id) ->
+         timer:sleep(100),
+         spawn(
+            fun() -> 
+               {A1, A2, A3} = now(),
+               random:seed(A1, A2, A3),
+               loop(Id)
+            end
+         )
+      end,
+      Ids
+   ).
+   
+stop(Pids) ->
+   lists:foreach(fun(Pid) -> exit(Pid, kill) end, Pids).
+   
+   
+% Crée N user avec des noms aléatoires et renvoie la liste des id.
+creer_users(N) ->
+   creer_users(N, []).
+creer_users(0, Ids) -> lists:map(fun(#user{id = Id}) -> Id end, Ids);
+creer_users(N, Ids) ->
+   creer_users(N - 1, [euphorik_bd:nouveau_user(mot_rand(random:uniform(4) + 4), "", "") | Ids ]).
+
+
+% crée un message aléatoire et le renvoie
+message_rand() ->
+   lists:flatten(message_rand(random:uniform(10), [])).
+message_rand(0, Mots) -> Mots;
+message_rand(N, Mots) -> 
+   message_rand(N - 1, [mot_rand(random:uniform(2) + 5), $  | Mots]).
+
+
+% Renvoie une succession de lettre aléatoire
+mot_rand(L) ->
+   mot_rand(L, []).
+mot_rand(0, Mot) -> Mot;
+mot_rand(L, Mot) ->
+   mot_rand(L - 1, [random:uniform($z - $a + 1) + $a - 1 | Mot]).
+   
+
+% Tire au hasard de 0 à 3 messages sur les 10 derniers postés, renvoie une liste de int()
+% répartition : 
+%  0 : 0.5
+%  1 : 0.3
+%  2 : 0.15
+%  3 : 0.05
+messages_id_rand() ->
+   Messages = lists:map(fun(#minichat{id = Id}) -> Id end, euphorik_bd:messages(30)),
+   R = random:uniform(),
+   if R =< 0.5 -> [];
+      R > 0.5 andalso R =< 0.8 ->
+         tire_element_rand(1, Messages);
+      R > 0.8 andalso R =< 0.95 ->
+         tire_element_rand(2, Messages);
+      true ->
+         tire_element_rand(3, Messages)
+   end.
+
+
+% tire N element distinct parmis la liste L proposée
+tire_element_rand(N, L) when N =< length(L) ->
+   tire_element_rand(N, L, []).
+tire_element_rand(0, _, Elements) -> Elements;
+tire_element_rand(N, L, Elements) ->
+   E = lists:nth(random:uniform(length(L)), L),
+   E_se_trouve_dans_Elements = lists:any(fun(E2) -> E2 =:= E end, Elements),
+   if E_se_trouve_dans_Elements -> % si E a déjà été tiré on recommence sans rien changer
+         tire_element_rand(N, L, Elements);
+      true ->
+         tire_element_rand(N-1, L, [E | Elements])
+   end.
+
+
+loop(User_id) -> 
+   % attend un temp aléatoire compris entre 1 sec et 5 sec
+   timer:sleep(1000 * random:uniform(5)),
+   % poste un message aléatoire par une personne aléatoire répondant à des messages aléatoires
+   {Message, Repond_a} = {message_rand(), messages_id_rand()},
+   io:format("~p poste ~p et repond a ~w~n", [User_id, Message, Repond_a]),
+   euphorik_bd:nouveau_message(Message, User_id, Repond_a),
+   loop(User_id).
+   
\ No newline at end of file
index dd66cd0..b19724c 100644 (file)
@@ -19,8 +19,8 @@
 \r
 
 <h3>Quels-sont les navigateurs supportés ?</h3>
 \r
 
 <h3>Quels-sont les navigateurs supportés ?</h3>
-<p>Le site a été testé avec succès sous "Firefox 2", "Safari 3", "Opera 9" et "Konqueror".
-Il est déconseillé d'utiliser Microsoft Internet Explorer pour des raisons d'incompatibilités.</p>
+<p>Le site a été testé sous "Firefox 2 et 3", "Safari 3", "Opera 9".
+Il est fortement déconseillé d'utiliser Microsoft Internet Explorer pour des raisons d'incompatibilités.</p>
 
 
 <h3>Le site se bloque sous Microsoft Internet Explorer 7 !</h3>
 
 
 <h3>Le site se bloque sous Microsoft Internet Explorer 7 !</h3>
index 4ca524b..23c62cb 100755 (executable)
@@ -33,13 +33,13 @@ end
 # Compilation de la partie serveur
 Dir.chdir('../modules')
 puts `make`
 # Compilation de la partie serveur
 Dir.chdir('../modules')
 puts `make`
+Dir.chdir('..')
 
 # création du repertoire BD
 creer_remote_rep('BD')
 `ssh #{$host} "chmod g+w #{$rep_remote}/BD"`
 
 # copie de la partie statique : css, images, html, etc..
 
 # création du repertoire BD
 creer_remote_rep('BD')
 `ssh #{$host} "chmod g+w #{$rep_remote}/BD"`
 
 # copie de la partie statique : css, images, html, etc..
-Dir.chdir('..')
 print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}`
 print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}`
@@ -58,7 +58,7 @@ Dir.entries(rep_js).each{|fichier|
 
 # copie des modules erlang
 creer_remote_rep('modules')
 
 # copie des modules erlang
 creer_remote_rep('modules')
-`rsync #{$opt_rsync} -r modules/ebin #{$host}:#{$rep_remote}/modules`
+`rsync #{$opt_rsync} -r --exclude 'euphorik_test.beam' modules/ebin #{$host}:#{$rep_remote}/modules`
 `rsync #{$opt_rsync} -r modules/include #{$host}:#{$rep_remote}/modules`
 
 # attribution des droits
 `rsync #{$opt_rsync} -r modules/include #{$host}:#{$rep_remote}/modules`
 
 # attribution des droits