Euphorik - Protocole v3 ----------------------- A. Introduction --------------- Ce document a pour but de décrire la communication client-serveur du site euphorik. Les messages échangés sont basés sur le format JSON. Ce document remplace 'protocole2.txt'. B. Principes ------------ Enregistrement: * Permet de créer un compte, un cookie est donné en retour. Ce cookie doit être stocké par le client pour pouvoir s'authentifier par la suite. Authentification: * L'authentification (login) se fait soit par un couple soit à l'aide d'un cookie. * Permet de récupérer les données d'un profile Rafraichissement: * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery) * Le serveur maintient la connexion bloquée si le client est à jour. * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants. C. Protocole ------------ c : client s : server Les messages client vers serveur sont envoyés par HTTP-POST. A toutes les requêtes le serveur peut répondre une erreur : { "reply" : "error", "error_message" : "blabla" } Message ok générique : { "reply" : "ok" } C.1. Login ---------- Le mot de passe est hashé en md5. c -> s { "action" : "authentification", "login" : "Paul", "password" : "IJKJDHHSAD9081238" } ou { "action" : "authentification", "cookie" : "LKJDLAKSJBFLKASN" } ou { "action" : "register", "login" : "Paul", "password" : "IJKJDHHSAD9081238" } s -> c { "reply" : "login", "status" : "registration_ok" | "authentification_ok", "cookie" : "LKJDLAKSJBFLKASN", "id" : 193, "pseudo" : "Paul", "login" : "paul49", "email" : "paul@pierre.com", "css" : "css/3/euphorik.css", "main_page" : 1, "conversations" : [ { "root" : 123, "page" : 1 } ] } C.2. Logout ----------- c -> s { "action" : "logout", "cookie" : "LKJDLAKSJBFLKASN" } C.3. Profile ------------ c -> s { "action" : "set_profile", "cookie" : "LKJDLAKSJBFLKASN", "login" : "paul49", "password" : "IJKJDHHSAD9081238", "pseudo" : "Paul", "email" : "paul@pierre.com", "css" : "css/3/euphorik.css", "main_page" : 1, "conversations" : [ { "root" : 123, "page" : 1 } ] } s -> c ou C.4. Wait event --------------------- Si "last_message_id" est absent alors le client ne possède pas de message. Les conversations données sont définies dans le profile. c -> s { "action" : "wait_event", "cookie" : "LKJDLAKSJBFLKASN", "message_count" : 10, "last_message_id" : 163, "main_page" : 1, "conversations" : [ { "root" : 123, "page" : 1 } ] } s -> c La première conversation est la principale (main). L'ordre des conversation est le même que celui des données de l'utilisateur. Le format de la date n'est pas formel. { "reply" : "new_messages", "conversations" : [ { "last_page" : true | false, "messages" : [ "id" : 54, "date" : "Hier 17:26:54", "system" : true | false, "owner" : true | false, "answered" : true | false, "is_a_reply" : true | false, "nick" : "Paul", "login" : "paul_22", "content" : "Salut", "answer_to" : [ { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" } ] ] } ... ] } ou { "reply" : "message_updated", "message_id" : 123, "contenu" : "Salut +++ poulpe" } ou { "reply" : "error", "error_message" : "blabla" } C.5. Envoie troll ------------------- c -> s { "action" : "put_troll", "cookie" : "LKJDLAKSJBFLKASN", "content" : "Un bon troll velu !" } s -> c { "reply" : "ok" | "error", "error_message" : "blabla" } C.6. Envoie message ------------------- Le client envoie un message, le message peut répondre à un certain nombre d'autres messages. "answer_to" n'est pas obligatoire. c -> s { "action" : "put_message", "cookie" : "LKJDLAKSJBFLKASN", "nick" : "Paul", "content" : "Bonjour", "Troll" : 45, "answer_to" : [ 345, 532, ... ] } s -> c { "reply" : "ok" | "error", "error_message" : "blabla" } C.7. Ajout d'une correction d'un messages ---------------------------------------- Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages. Le message est appondu avec un " +++ " devant, par exemple : > Gnome c'est mieux que KDE +++ Euh non ok, c'est faux c -> s { "action" : "correction", "cookie" : "LKJDLAKSJBFLKASN", "content" : "Euh non ok, c'est faux" } s -> c { "reply" : "correction", "status" : "ok" | "error", "message_error" : "blabla" }