Euphorik - minichat ------------------- A. Introduction --------------- Le minichat utilise AJAX. Tous les messages sont au format XML Eventuellement utiliser comet comme décrit ici : http://www.zeitoun.net/index.php?2007/06/22/46-how-to-implement-comet-with-php Structure : ----------- Les objets globaux : - Messages (liste des messages actuellement affichés, permet de recupérer les nouveaux messages) - Connexion (Information sur la connexion, information sur le user actuel) B. Principe ----------- Termes : serveur, client, utilisateur 1 Chargement de la page html. 2 Le client écoute les derniers messages au serveur (asynchrone). 3 Le client est initialement déconnecté, il regarde si un cookie existe sur la machine cliente : 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é. b Si non : il demande au serveur la génération d'un captcha et l'affiche. 4 L'utilisateur peut alors envoyer un message. Il doit saisir le captcha s'il l'état et déconnecté. a Si le captcha a été saisie le client envoie une requête de login 5 Le message est posté Principe concernant le rafraichissement: * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un méthode de JQuery) * Le serveur maintient la connexion bloqué si le client est à jour. * Dès que le serveur n'est plus à jours, il envoie les messages manquants. Problème : * Comment faire de l'attente passive sur le serveur en écoutant l'arrivée d'un nouveau message au niveau de la bd -> en utilisant le "event handling" de mnesia : http://www.erlang.org//doc/apps/mnesia/part_frame.html chapitre 5.7 et 5.7.2 C. Protocole ------------ c : client s : server C.1. Demande de génération d'un nouveau captcha : ----------------------------------------------- c -> s s -> c img/tmp/b1b1b4e72e6f3d00e477cf37cced5851.jpg b1b1b4e72e6f3d00e477cf37cced5851 C.2. Login : ------------ le message du client est posté par la méthode POST et se nomme 'action'. c -> s (nouveau user) (obsolète) b1b1b4e72e6f3d00e477cf37cced5851 LKJDLA ou (ne sert pour l'instant qu'a mettre à jour user.date_derniere_connexion) (si le login est faut, une temporisation est effectuée) LKJDLAKSJBFLKASN ou Paul IJKJDHHSAD9081238 Paul IJKJDHHSAD9081238 ou (login et password peuvent être omis) Paul IJKJDHHSAD9081238 s -> c ( et pas obligatoire) enregistre|identifie|erreur LKJDLAKSJBFLKASN 7ZS Paul paul49 paul@pierre.com css/lite.css blabla C.3. Logout : ------------- c -> s LKJDLAKSJBFLKASN C.4. Profile : -------------- modification du profile, seul 'cookie' est obligatoire c -> s LKJDLAKSJBFLKASN paul49 IJKJDHHSAD9081238 Paul paul@pierre.com css/dark.css s -> c ok|pas ok balbla> C.5. Refresh messages : ----------------------- Si dernierMessageId est absent alors le client ne possède pas de message. Page peut être omis, il a alors la valeur 1 (première page) dernierMessageId est en base 36 (l'histoire de rigoler un peu) c -> s LKJDLAKSJBFLKASN 6ZR 10 1 s -> c 4 Hier 17:26:54 Paul paul_22 Salut ou raison C.6. Envoie message : --------------------- Un client envoie un message, le message peut répondre à un certain nombre d'autres messages. n'est pas obligatoire. c -> s LKJDLAKSJBFLKASN Paul Bonjour s -> c ok|pas ok