+Euphorik - Protocole v3
+-----------------------
+
+A. Introduction
+---------------\r
+
+Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
+Les messages échangés sont basés sur le format JSON.
+Ce document remplace 'protocole2.txt'.
+\r
+
+B. Principe
+-----------
+
+Enregistrement:\r
+ * 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:\r
+ * L'authentification (login) se fait soit par un couple <login, mot de passe> soit à l'aide d'un cookie.\r
+ * 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 est envoie le ou les messages manquants.
+
+
+C. Protocole
+------------
+c : client
+s : server
+Les messages client vers serveur sont envoyé par HTTP-POST
+
+
+C.1. Login
+----------
+Le mot de passe est hashé en md5.\r
+
+c -> s\r
+ { \r
+ "action" : "authentification",\r
+ "login" : "Paul",\r
+ "password" : "IJKJDHHSAD9081238"\r
+ }
+ou\r
+ {\r
+ "action" : "authentification",\r
+ "cookie" : "LKJDLAKSJBFLKASN"\r
+ }
+ou\r
+ {\r
+ "action" : "register",\r
+ "login" : "Paul",\r
+ "password" : "IJKJDHHSAD9081238"\r
+ }
+
+s -> c\r
+ {\r
+ "reply" : "login",\r
+ "status" : "registration_ok" | "authentification_ok" | "error",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "id" : 193,\r
+ "pseudo" : "Paul",\r
+ "login" : "paul49",\r
+ "email" : "paul@pierre.com",\r
+ "css" : "css/3/euphorik.css",\r
+ "main_page" : 1,\r
+ "conversations" : [\r
+ {\r
+ "racine" : 123,\r
+ "page" : 1\r
+ }\r
+ ],\r
+ "error_message" : "blabla"\r
+ }
+ \r
+
+C.2. Logout
+-----------
+c -> s\r
+ {\r
+ "action" : "logout",\r
+ "cookie" : "LKJDLAKSJBFLKASN"\r
+ }
+ \r
+
+C.3. Profile
+------------
+Modification du profile, seul "cookie" est obligatoire.
+
+c -> s\r
+ {\r
+ "action" : "set_profile",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "login" : "paul49",\r
+ "password" : "IJKJDHHSAD9081238",\r
+ "pseudo" : "Paul",\r
+ "email" : "paul@pierre.com",\r
+ "css" : "css/3/euphorik.css",\r
+ "mainPage" : "1",\r
+ "conversations" : [\r
+ {\r
+ "racine" : "4F",\r
+ "page" : 1\r
+ }\r
+ ],\r
+ } \r
+
+s -> c\r
+ {\r
+ "reply" : "ok" | "error",\r
+ "error_message" : "blabla"\r
+ }
+
+
+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\r
+ {\r
+ "action" : "wait_event",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "message_count" : 10,\r
+ "last_message_id" : 163\r
+ }
+
+s -> c\r
+La première conversation est la principale (main).\r
+L'ordre des conversation est le même que celui des données de l'utilisateur.\r
+Le format de la date n'est pas formel.\r
+ {\r
+ "reply" : "new_messages",\r
+ "conversations" : [\r
+ "last_page" : true | false,\r
+ "messages" : [\r
+ "id" : 54,\r
+ "date" : "Hier 17:26:54",\r
+ "system" : true | false,\r
+ "owner" : true | false,\r
+ "answered" : true | false,\r
+ "is_a_reply" : true | false,\r
+ "nick" : "Paul",\r
+ "login" : "paul_22",\r
+ "content" : "Salut",\r
+ "answer_to" : [\r
+ { "id" : 123, "pseudo" : "Pierre", "login" : "pierre_45" }\r
+ ]\r
+ ]\r
+ ]\r
+ }
+ou\r
+ {\r
+ "reply" : "message_updated",\r
+ "message_id" : 123,\r
+ "contenu" : "Salut +++ poulpe"\r
+ }
+ou\r
+ {\r
+ "reply" : "error",\r
+ "error_message" : "blabla"\r
+ }
+
+
+C.5. Envoie message
+-------------------
+Le client envoie un message, le message peut répondre à un certain nombre d'autres messages.
+"answer_to" n'est pas obligatoire.\r
+
+c -> s\r
+ {\r
+ "action" : "put_message",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "nick" : "Paul",\r
+ "content" : "Bonjour",\r
+ "answer_to" : [ 345, 532, ... ]\r
+ }
+
+s -> c\r
+ {\r
+ "reply" : "ok" | "error",\r
+ "error_message" : "blabla"\r
+ }
+ \r
+ \r
+C.6 Ajout d'une correction d'un messages\r
+----------------------------------------\r
+Le client envoie un correctif sous la forme de texte supplémentaire à appondre au dernier messages.\r
+Le message est appondu avec un " +++ " devant, par exemple :\r
+> Gnome c'est mieux que KDE +++ Euh non ok, c'est faux\r
+\r
+c -> s\r
+ {\r
+ "action" : "correction",\r
+ "cookie" : "LKJDLAKSJBFLKASN",\r
+ "content" : "Euh non ok, c'est faux"\r
+ }\r
+ \r
+s -> c\r
+ {\r
+ "reply" : "correction",\r
+ "status" : "ok" | "error",\r
+ "message_error" : "blabla"\r
+ }