diff --git a/protocole.md b/protocole.md new file mode 100644 index 0000000..a0567dc --- /dev/null +++ b/protocole.md @@ -0,0 +1,198 @@ +Proposition de protocole +======================== + +Proposition de protocole pour la communication inter-serveurs/clients pour le projet de chat textuel. + +Quelques règles pour assurer le bon fonctionnement du protocole : + +- Chaque ligne se termine par les caractères `\r\n`. +- Un nom d’utilisateur ne peut contenir que des caractères alphanumériques (a-z, A-Z, 0-9). + +Liste d’abbréviations : + +- "C" : client unique +- "A" : ensemble des clients +- "S" : serveur + +Connexion au serveur +-------------------- + +Gestion de l’arrivée des utilisateurs sur le serveur (choix du nom d’utilisateur et notification des clients). + +### Requête 1.1 + +C->S + +Connexion sans nom d’utilisateur fournit par le client, `` devant être remplacé par la version utilisée par le client (tel que `0.5` ou `1.0`). + +``` text +PROT CONNECT NEW +``` + +### Requête 1.2 + +C->S + +Connexion au serveur mentionnant le nom d’utilisateur + +``` text +PROT CONNECT USER +``` + +Selon si la connexion est établie avec ce nom d'utilisateur, la [requête 1.4](#requête-14) ou la [requête 1.5](#requête-15) sera renvoyée. Si la requête [requête 1.5](#requête-15) est renvoyée, la [requête 1.2](#requête-12) suivra immédiatement après. + +### Requête 1.3 + +S->C + +Réponse à cette requête du serveur vers le client (serveur vers client), requête du nom d'utilisateur. + +``` text +PROT NAME REQ +``` + +### Requête 1.4 + +C->S + +Réponse à la requête du serveur (client vers serveur), envoi du nom d’utilisateur. + +``` text +PROT NAME +``` + +### Requête 1.5 + +S->C + +Réponse du serveur si l'enregistrement du nom d'utilisateur s’est bien déroulé, immédiatement suivi par la [requête 1.9](#requête-18) + +``` text +PROT NAME OK +``` + +### Requête 1.6 + +S->C + +Réponse du serveur si l'enregistrement du nom d'utilisateur a rencontré une erreur (nom déjà utilisé,…) (serveur vers client). + +``` text +PROT NAME FAILURE +``` + +### Requête 1.7 + +S->A + +Conjointement à la [requête 1.4](#requête-14), cette requête sera envoyée à tout autre client connecté pour les notifier de la connexion d’un nouvel utilisateur. + +``` text +PROT JOIN +``` + +### Requête 1.8 + +S->C + +Requête confirmant au client sa connexion + +``` text +PROT WELCOME +``` + +Déconnexion du serveur +---------------------- + +Gestion du départ des utilisateurs du serveur + +### Requête 2.1 + +C->S +S->C + +Du client vers le serveur : notification de déconnexion du client au serveur. + +Du serveur vers le client : confirmation de déconnexion du client depuis le serveur. + +``` text +PROT BYE +``` + +### Requête 2.2 + +S->A + +Notification aux clients de la déconnexion d’un autre client. + +``` text +PROT LOGOUT +``` + +Ping +---- + +Vérification de la connexion des clients avec le serveur. Chaque minute, la requête [requête 3.1](#requête-31) est envoyée à chaque client qui ont tous trois secondes pour répondre avec la [requête 3.2](#requête-32). + +### Requête 3.1 + +S->A + +Envoi d’un ping du serveur vers chaque client. + +``` text +PROT PING +``` + +### Requête 3.2 + +C->S + +Envoi de la réponse du client au serveur pour la [requête 3.1](#requête-31) + +``` text +PROT PONG +``` + +## Échange de messages +### Échange de messages publics + +#### Requête 4.1.1 + +C->S + +Envoi depuis le client vers le serveur d’un message public +``` text +PROT MSG +``` + +#### Requête 4.1.2 + +S->A + +Transmission d’un message d’un client vers les autres clients +``` text +PROT FROM MSG +``` + +### Échange de messages privés + +#### Requête 4.2.1 + +C->S + +Transmission d’un message d’un client vers un autre client uniquement, spécifié par son nom d’utilisateur (client vers serveur) + +``` text +PROT PRIV TO MSG +``` + +#### Requête 4.2.2 + +S->C + +Transmission d’un message d’un client vers un autre client uniquement, spécifié par son nom d’utilisateur (serveur vers client) + +``` text +PROT PRIV FROM MSG +```