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
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
22 Termes : serveur, client, utilisateur
\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
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
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
50 C.1. Demande de génération d'un nouveau captcha :
\r
51 -----------------------------------------------
\r
54 <action name="generationCaptcha">
\r
58 <reponse name="generationCaptcha">
\r
59 <chemin>img/tmp/b1b1b4e72e6f3d00e477cf37cced5851.jpg</chemin>
\r
60 <captchaCrypt>b1b1b4e72e6f3d00e477cf37cced5851</captchaCrypt>
\r
65 le message du client est posté par la méthode POST et se nomme 'action'.
\r
68 (nouveau user) (obsolète)
\r
69 <action name="loginCaptcha">
\r
70 <captchaCrypt>b1b1b4e72e6f3d00e477cf37cced5851</captchaCrypt>
\r
71 <captchaInput>LKJDLA</captchaInput>
\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
84 <password>IJKJDHHSAD9081238</password>
89 <password>IJKJDHHSAD9081238</password>
92 ou (login et password peuvent être omis)
93 <action name="register">
95 <password>IJKJDHHSAD9081238</password>
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
115 <action name="logout">
\r
116 <cookie>LKJDLAKSJBFLKASN</cookie>
\r
121 modification du profile, seul 'cookie' est obligatoire
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>
134 <reponse name="profile">
135 <statut>ok|pas ok</statut>
136 <information>balbla></information>
140 C.5. Refresh messages :
\r
141 -----------------------
\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)
148 <action name="refreshMessages">
149 <cookie>LKJDLAKSJBFLKASN</cookie>
\r
150 <dernierMessageId>6ZR</dernierMessageId>
\r
151 <nombreMessage>10</nombreMessage>
\r
156 <reponse name="refreshMessages">
\r
157 <nbPage>4</nbPage> <!-- le nombre de page total -->
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
168 <!-- id est l'id d'un message -->
\r
169 <id id="DE2" pseudo="Pierre" login="pierre_45">
178 <reponse name="refreshMessages">
\r
179 <erreur>raison</erreur>
\r
182 C.6. Envoie message :
\r
183 ---------------------
\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
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
193 <reponse id="RT5" />
\r
194 <reponse id="39K" />
\r
200 <reponse name="message">
\r
201 <statut>ok|pas ok</statut>
\r