chat-reseau-p8/protocole.md

4.3 KiB
Raw Permalink Blame History

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 dutilisateur ne peut contenir que des caractères alphanumériques (a-z, A-Z, 0-9).
  • Un nom dutilisateur contient de 1 (un) à 20 (vingt) caractères.
  • Un message contient de 1 (un) à 2000 (deux mille) caractères (hors protocole)

Liste dabbréviations :

  • "C" : client unique
  • "A" : ensemble des clients
  • "S" : serveur

Général

Requête 0.1

S->C

Requête non comprise par le serveur

BAD REQ

Connexion au serveur

Gestion de larrivée des utilisateurs sur le serveur (choix du nom dutilisateur et notification des clients).

Requête 1.1

C->S

Connexion sans nom dutilisateur fournit par le client, <version> devant être remplacé par la version utilisée par le client (tel que 0.5 ou 1.0).

PROT <version> CONNECT NEW

Requête 1.2

C->S

Connexion au serveur mentionnant le nom dutilisateur

PROT <version> CONNECT USER <username>

Selon si la connexion est établie avec ce nom d'utilisateur, la requête 1.4 ou la requête 1.5 sera renvoyée. Si la requête requête 1.5 est renvoyée, la requête 1.2 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.

NAME REQ

Requête 1.4

C->S

Réponse à la requête du serveur (client vers serveur), envoi du nom dutilisateur.

NAME <username>

Requête 1.5

S->C

Réponse du serveur si l'enregistrement du nom d'utilisateur sest bien déroulé, immédiatement suivi par la requête 1.9

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).

NAME FAILURE

Requête 1.7

S->A

Conjointement à la requête 1.4, cette requête sera envoyée à tout autre client connecté pour les notifier de la connexion dun nouvel utilisateur.

JOIN <username>

Requête 1.8

S->C

Requête confirmant au client sa connexion

WELCOME

Requête 1.9

S->C

Réponse du serveur en cas de version de protocole différente

BAD PROT

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.

BYE

Requête 2.2

S->A

Notification aux clients de la déconnexion dun autre client.

LOGOUT <username>

Ping

Vérification de la connexion des clients avec le serveur. Chaque minute, la requête requête 3.1 est envoyée à chaque client qui ont tous trois secondes pour répondre avec la requête 3.2.

Requête 3.1

S->A, C->S

Envoi dun ping du serveur vers chaque client ou dun client vers le serveur.

PING

Requête 3.2

C->S, S->C

Envoi de la réponse du client au serveur ou du serveurs au client pour la requête 3.1

PONG

Échange de messages

Échange de messages publics

Requête 4.1.1

C->S

Envoi depuis le client vers le serveur dun message public

MSG <message>

Requête 4.1.2

S->A

Transmission dun message dun client vers les autres clients

FROM <username> MSG <message>

Interactions salon de chat

Requête 4.2.1

C->S

Demande du client pour recevoir la liste des participants connectés

REQ CLIENTS

Requête 4.2.2

S->C

Réponse du client à la requête 4.2.1 transmettant au client la liste des autres clients connectés

LIST CLIENTS <nombre de clients> <noms clients séparés par un espace>

Comme mentionné au début de ce document, aucun caractère blanc nest autorisé dans les pseudonymes afin quil ny ait pas de collision avec le protocole.