Premier commit
[euphorik.git] / conception / fonctionnement_minichat.txt
1 Euphorik - minichat\r
2 -------------------\r
3 \r
4 A. Introduction\r
5 ---------------\r
6 \r
7 Le minichat utilise AJAX. Tous les messages sont au format XML\r
8 Eventuellement utiliser comet comme décrit ici\r
9  : http://www.zeitoun.net/index.php?2007/06/22/46-how-to-implement-comet-with-php\r
10 \r
11 \r
12 Structure :\r
13 -----------\r
14 \r
15 Les objets globaux :\r
16  - Messages (liste des messages actuellement affichés, permet de recupérer les nouveaux messages)\r
17  - Connexion (Information sur la connexion, information sur le user actuel)\r
18  \r
19 \r
20 B. Principe\r
21 -----------\r
22 Termes : serveur, client, utilisateur\r
23 \r
24  1 Chargement de la page html.\r
25  2 Le client écoute les derniers messages au serveur (asynchrone).\r
26  3 Le client est initialement déconnecté, il regarde si un cookie existe sur la machine cliente :\r
27   a Si oui : il tente un login avec le cookie, si ok alors le client est connecté sinon il reste dans l'état déconnecté.\r
28   b Si non : il demande au serveur la génération d'un captcha et l'affiche.  \r
29  4 L'utilisateur peut alors envoyer un message. Il doit saisir le captcha s'il l'état et déconnecté.\r
30   a Si le captcha a été saisie le client envoie une requête de login\r
31  5 Le message est posté\r
32 \r
33 \r
34 Principe concernant le rafraichissement:\r
35  * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un méthode de JQuery)\r
36  * Le serveur maintient la connexion bloqué si le client est à jour.\r
37  * Dès que le serveur n'est plus à jours, il envoie les messages manquants.\r
38  \r
39 Problème :\r
40  * Comment faire de l'attente passive sur le serveur en écoutant l'arrivée d'un nouveau message au niveau de la bd\r
41   -> en utilisant le "event handling" de mnesia : http://www.erlang.org//doc/apps/mnesia/part_frame.html\r
42      chapitre 5.7 et 5.7.2\r
43
44 \r
45 C. Protocole\r
46 ------------\r
47 c : client\r
48 s : server\r
49 \r
50 C.1. Demande de génération d'un nouveau captcha :\r
51 -----------------------------------------------\r
52 \r
53 c -> s\r
54 <action name="generationCaptcha">\r
55 </action>\r
56 \r
57 s -> c\r
58 <reponse name="generationCaptcha">\r
59    <chemin>img/tmp/b1b1b4e72e6f3d00e477cf37cced5851.jpg</chemin>\r
60    <captchaCrypt>b1b1b4e72e6f3d00e477cf37cced5851</captchaCrypt>\r
61 </action>\r
62 \r
63 C.2. Login :\r
64 ------------\r
65 le message du client est posté par la méthode POST et se nomme 'action'.\r
66 \r
67 c -> s\r
68 (nouveau user) (obsolète)\r
69  <action name="loginCaptcha">\r
70    <captchaCrypt>b1b1b4e72e6f3d00e477cf37cced5851</captchaCrypt>\r
71    <captchaInput>LKJDLA</captchaInput>\r
72  </action>\r
73  \r
74 ou\r
75 (ne sert pour l'instant qu'a mettre à jour user.date_derniere_connexion)\r
76 (si le login est faut, une temporisation est effectuée)\r
77  <action name="login">\r
78    <cookie>LKJDLAKSJBFLKASN</cookie>\r
79  </action>
80  
81 ou 
82  <action name="login">
83    <login>Paul</login>
84    <password>IJKJDHHSAD9081238</password>
85  </action>
86  
87  <action name="login">
88    <login>Paul</login>
89    <password>IJKJDHHSAD9081238</password>
90  </action>
91  
92 ou (login et password peuvent être omis)
93  <action name="register">
94    <login>Paul</login>
95    <password>IJKJDHHSAD9081238</password>
96  </action>\r
97    \r
98 s -> c
99 (<information> et <pseudo> pas obligatoire)\r
100  <reponse name="login">\r
101    <statut>enregistre|identifie|erreur</statut>\r
102    <cookie>LKJDLAKSJBFLKASN</cookie>\r
103    <id>7ZS</id> <!-- l'id est en base 36 -->\r
104    <pseudo>Paul</pseudo>
105    <login>paul49</login>
106    <email>paul@pierre.com</email>
107    <css>css/lite.css</css>\r
108    <information>blabla</information>\r
109  </reponse>\r
110  \r
111  \r
112 C.3. Logout :\r
113 -------------\r
114 c -> s\r
115  <action name="logout">\r
116    <cookie>LKJDLAKSJBFLKASN</cookie> \r
117  </action>
118  
119 C.4. Profile :
120 --------------
121 modification du profile, seul 'cookie' est obligatoire
122
123 c -> s
124  <action name="profile">
125    <cookie>LKJDLAKSJBFLKASN</cookie>
126    <login>paul49</login>
127    <password>IJKJDHHSAD9081238</password>
128    <pseudo>Paul</pseudo>
129    <email>paul@pierre.com</email>
130    <css>css/dark.css</css>
131  </action>
132  
133 s -> c
134  <reponse name="profile">
135    <statut>ok|pas ok</statut>
136    <information>balbla></information>
137  </reponse>\r
138 \r
139 \r
140 C.5. Refresh messages :\r
141 -----------------------\r
142 \r
143 Si dernierMessageId est absent alors le client ne possède pas de message.\r
144 Page peut être omis, il a alors la valeur 1 (première page)\r
145 dernierMessageId est en base 36 (l'histoire de rigoler un peu)
146 \r
147 c -> s\r
148  <action name="refreshMessages">
149   <cookie>LKJDLAKSJBFLKASN</cookie>\r
150   <dernierMessageId>6ZR</dernierMessageId>\r
151   <nombreMessage>10</nombreMessage>\r
152   <page>1</page>\r
153  </action>\r
154  \r
155 s -> c\r
156  <reponse name="refreshMessages">\r
157   <nbPage>4</nbPage> <!-- le nombre de page total -->
158   <message id="1F5">\r
159    <date>Hier 17:26:54</date>
160    <systeme></system> <!-- est-ce un message système ? -->\r
161    <proprietaire></proprietaire> <!-- est-ce que le message appartient à l'utilisateur courant ? "true" ou "false" -->\r
162    <repondu></repondu>  <!-- est-ce que l'utilisateur courant a répondu à ce message ? "true" ou "false" -->\r
163    <reponse></reponse> <!-- est-ce que c'est une réponse à un message de l'utilisateur courant ? "true" ou "false" -->\r
164    <pseudo>Paul</pseudo>
165    <login>paul_22</login>\r
166    <contenu>Salut</contenu>\r
167    <repondA>
168       <!-- id est l'id d'un message -->\r
169       <id id="DE2" pseudo="Pierre" login="pierre_45"> 
170       <!-- [..] -->\r
171    </repondA>\r
172   </message>\r
173   <!-- [..] -->\r
174  </reponse>\r
175 \r
176 ou\r
177 \r
178  <reponse name="refreshMessages">\r
179   <erreur>raison</erreur>\r
180  </reponse>\r
181 \r
182 C.6. Envoie message :\r
183 ---------------------\r
184 \r
185 Un client envoie un message, le message peut répondre à un certain nombre d'autres messages.\r
186 <reponses> n'est pas obligatoire.\r
187 c -> s\r
188  <action name="message">\r
189   <cookie>LKJDLAKSJBFLKASN</cookie>\r
190   <pseudo>Paul</pseudo> <!-- il est possible que la personne change de pseudo -->\r
191   <contenu>Bonjour</contenu>\r
192   <reponses>\r
193    <reponse id="RT5" />\r
194    <reponse id="39K" />\r
195    <!-- [..] -->\r
196   </reponses>\r
197  </action>\r
198  \r
199 s -> c\r
200  <reponse name="message">\r
201    <statut>ok|pas ok</statut>\r
202  </reponse>\r
203  \r