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