* Créer un favicon (joli)\r
* Système de commande /<commande>\r
* /nick : changer de pseudo\r
- * /me : "* <pseudo> <message>"\r
+ * /me : "*<pseudo> <message>"\r
+ * /blam <login> : permet d'envoyer un blame à qqun (uniquement depuis un modo vers un non-modo) \r
+ * /+ blabla Pourvoir ajouter du texte (correctif en général) à son dernier message par une commande, par exemple \r
* Ajouter de nouveaux smiles :\r
* "slurp" ("ca fait envie") : http://forum-images.hardware.fr/images/perso/huit.gif\r
* "agreed" : http://forum-images.hardware.fr/icones/smilies/jap.gif\r
[3] après le login un '?' s'ajoute à l'adresse (opera, firefox)\r
\r
-- Idées --\r
+* Avoir un thème de discussion affiché en haut des messages\r
* Pouvoir cacher les dates\r
* Pouvoir choisir une couleur pour son pseudo\r
* Gestion de l'historique (calendrier)\r
-* Créer un gamebot pour lancer des jeux. Par exemple un jeu d'énigmes
-* Pourvoir ajouter du texte (correctif en général) à son dernier message par une commande, par exemple : /+ blabla\r
+* Créer un gamebot pour lancer des jeux. Par exemple un jeu d'énigmes\r
* smiles personnalisé, on peut en ajouter dans la préférence utilisateur.\r
* tout le monde peut voir les smiles des autres et les utiliser : [nom_user:smile]\r
* Possibilité de formater le texte ; bold, italic, etc..\r
A. Introduction\r
---------------\r
\r
-Le minichat utilise AJAX. Tous les messages sont au format XML\r
-Eventuellement utiliser comet comme décrit ici\r
- : http://www.zeitoun.net/index.php?2007/06/22/46-how-to-implement-comet-with-php\r
+Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
\r
\r
-Structure :\r
------------\r
-\r
-Les objets globaux :\r
- - Messages (liste des messages actuellement affichés, permet de recupérer les nouveaux messages)\r
- - Connexion (Information sur la connexion, information sur le user actuel)\r
- \r
-\r
B. Principe\r
-----------\r
-Termes : serveur, client, utilisateur\r
\r
- 1 Chargement de la page html.\r
- 2 Le client écoute les derniers messages au serveur (asynchrone).\r
- 3 Le client est initialement déconnecté, il regarde si un cookie existe sur la machine cliente :\r
- 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
- b Si non : il demande au serveur la génération d'un captcha et l'affiche. \r
- 4 L'utilisateur peut alors envoyer un message. Il doit saisir le captcha s'il l'état et déconnecté.\r
- a Si le captcha a été saisie le client envoie une requête de login\r
- 5 Le message est posté\r
+Enregistrement:\r
\r
+Authentification:\r
\r
-Principe concernant le rafraichissement:\r
- * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un méthode de JQuery)\r
+Rafraichissement:\r
+ * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)\r
* Le serveur maintient la connexion bloqué si le client est à jour.\r
- * Dès que le serveur n'est plus à jours, il envoie les messages manquants.\r
- \r
-Problème :\r
- * Comment faire de l'attente passive sur le serveur en écoutant l'arrivée d'un nouveau message au niveau de la bd\r
- -> en utilisant le "event handling" de mnesia : http://www.erlang.org//doc/apps/mnesia/part_frame.html\r
- chapitre 5.7 et 5.7.2\r
-
+ * Dès qu'un nouveau message arrive, le serveurs débloque la connexion est envoie le ou les messages manquants.\r
+
\r
C. Protocole\r
------------\r
\r
C.1. Demande de génération d'un nouveau captcha :\r
-----------------------------------------------\r
+Obsolète : les captchas ne sont plus utilisés\r
\r
c -> s\r
<action name="generationCaptcha">\r
le message du client est posté par la méthode POST et se nomme 'action'.\r
\r
c -> s\r
-(nouveau user) (obsolète)\r
+(nouveau user) (Obsolète)\r
<action name="loginCaptcha">\r
<captchaCrypt>b1b1b4e72e6f3d00e477cf37cced5851</captchaCrypt>\r
<captchaInput>LKJDLA</captchaInput>\r
<password>IJKJDHHSAD9081238</password>
</action>
- <action name="login">
- <login>Paul</login>
- <password>IJKJDHHSAD9081238</password>
- </action>
-
ou (login et password peuvent être omis)
<action name="register">
<login>Paul</login>
--- /dev/null
+Euphorik - minichat - Protocole v2\r
+----------------------------------\r
+\r
+A. Introduction\r
+---------------\r
+\r
+Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
+Ce document remplace 'protocole.txt' qui était la première version du protocol.\r
+\r
+B. Principe\r
+-----------\r
+\r
+Enregistrement:\r
+\r
+Authentification:\r
+\r
+Rafraichissement:\r
+ * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)\r
+ * Le serveur maintient la connexion bloqué si le client est à jour.\r
+ * Dès qu'un nouveau message arrive, le serveurs débloque la connexion est envoie le ou les messages manquants.\r
+
+\r
+C. Protocole\r
+------------\r
+c : client\r
+s : server\r
+Chaque message est numéroté #<num>.\r
+Les messages client vers serveur sont envoyé par HTTP-POST\r
+\r
+\r
+C.1. Login\r
+----------\r
+\r
+c -> s\r
+#1
+ <action name="login">
+ <login>Paul</login>
+ <password>IJKJDHHSAD9081238</password>
+ </action>
+\r
+ou\r
+#2 (<login> et <password> peuvent être omis)
+ <action name="register">
+ <login>Paul</login>
+ <password>IJKJDHHSAD9081238</password>
+ </action>\r
+ \r
+s -> c\r
+#3 (<information> et <pseudo> pas obligatoire)\r
+ <reponse name="login">\r
+ <statut>enregistre|identifie|erreur</statut>\r
+ <cookie>LKJDLAKSJBFLKASN</cookie>\r
+ <id>7ZS</id> <!-- l'id est en base 36 -->\r
+ <pseudo>Paul</pseudo>
+ <login>paul49</login>
+ <email>paul@pierre.com</email>
+ <css>css/lite.css</css>\r
+ <information>blabla</information>\r
+ </reponse>\r
+ \r
+ \r
+C.2. Logout\r
+-----------\r
+c -> s\r
+ <action name="logout">\r
+ <cookie>LKJDLAKSJBFLKASN</cookie> \r
+ </action>
+
+C.3. Profile
+------------
+modification du profile, seul 'cookie' est obligatoire
+
+c -> s
+ <action name="profile">
+ <cookie>LKJDLAKSJBFLKASN</cookie>
+ <login>paul49</login>
+ <password>IJKJDHHSAD9081238</password>
+ <pseudo>Paul</pseudo>
+ <email>paul@pierre.com</email>
+ <css>css/dark.css</css>
+ </action>
+
+s -> c
+ <reponse name="profile">
+ <statut>ok|pas ok</statut>
+ <information>balbla></information>
+ </reponse>\r
+\r
+\r
+C.4. Attente evenement\r
+----------------------\r
+\r
+Si dernierMessageId est absent alors le client ne possède pas de message.\r
+Page peut être omis, il a alors la valeur 1 (première page)\r
+dernierMessageId est en base 36 (l'histoire de rigoler un peu)
+\r
+c -> s\r
+ <action name="attenteEvenement">
+ <cookie>LKJDLAKSJBFLKASN</cookie>\r
+ <dernierMessageId>6ZR</dernierMessageId>\r
+ <nombreMessage>10</nombreMessage>\r
+ <page>1</page>\r
+ </action>\r
+ \r
+s -> c\r
+ <reponse name="attenteEvenement" evenement="nouveauxMessages">\r
+ <nbPage>4</nbPage> <!-- le nombre de page total -->
+ <message id="1F5">\r
+ <date>Hier 17:26:54</date>
+ <systeme></system> <!-- est-ce un message système ? -->\r
+ <proprietaire></proprietaire> <!-- est-ce que le message appartient à l'utilisateur courant ? "true" ou "false" -->\r
+ <repondu></repondu> <!-- est-ce que l'utilisateur courant a répondu à ce message ? "true" ou "false" -->\r
+ <reponse></reponse> <!-- est-ce que c'est une réponse à un message de l'utilisateur courant ? "true" ou "false" -->\r
+ <pseudo>Paul</pseudo>
+ <login>paul_22</login>\r
+ <contenu>Salut</contenu>\r
+ <repondA>
+ <!-- id est l'id d'un message -->\r
+ <id id="DE2" pseudo="Pierre" login="pierre_45">
+ <!-- [..] -->\r
+ </repondA>\r
+ </message>\r
+ <!-- [..] -->\r
+ </reponse>\r
+ \r
+ou\r
+ <reponse name="attenteEvenement" evenement="modificationMessage">\r
+ TODO\r
+ </reponse>\r
+\r
+ou\r
+ <reponse name="refreshMessages">\r
+ <erreur>raison</erreur>\r
+ </reponse>\r
+\r
+C.5. Envoie message\r
+-------------------\r
+\r
+Un client envoie un message, le message peut répondre à un certain nombre d'autres messages.\r
+<reponses> n'est pas obligatoire.\r
+c -> s\r
+ <action name="message">\r
+ <cookie>LKJDLAKSJBFLKASN</cookie>\r
+ <pseudo>Paul</pseudo> <!-- il est possible que la personne change de pseudo -->\r
+ <contenu>Bonjour</contenu>\r
+ <reponses>\r
+ <reponse id="RT5" />\r
+ <reponse id="39K" />\r
+ <!-- [..] -->\r
+ </reponses>\r
+ </action>\r
+ \r
+s -> c\r
+ <reponse name="message">\r
+ <statut>ok|pas ok</statut>\r
+ </reponse>\r
+ \r
+\r
+C.5. Envoie message\r
+-------------------\r
+ \r