You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
4.3 KiB

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
``` text
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`).
``` text
PROT <version> CONNECT NEW
```
### Requête 1.2
C->S
Connexion au serveur mentionnant le nom dutilisateur
``` text
PROT <version> CONNECT USER <username>
```
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
NAME REQ
```
### Requête 1.4
C->S
Réponse à la requête du serveur (client vers serveur), envoi du nom dutilisateur.
``` text
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](#requête-18)
``` text
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
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 dun nouvel utilisateur.
``` text
JOIN <username>
```
### Requête 1.8
S->C
Requête confirmant au client sa connexion
``` text
WELCOME
```
### Requête 1.9
S->C
Réponse du serveur en cas de version de protocole différente
```text
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.
``` text
BYE
```
### Requête 2.2
S->A
Notification aux clients de la déconnexion dun autre client.
``` text
LOGOUT <username>
```
Ping
----
5 years ago
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, C->S
Envoi dun ping du serveur vers chaque client ou dun client vers le serveur.
``` text
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](#requête-31)
``` text
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
``` text
MSG <message>
```
#### Requête 4.1.2
S->A
Transmission dun message dun client vers les autres clients
``` text
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
```text
REQ CLIENTS
```
#### Requête 4.2.2
S->C
Réponse du client à la [requête 4.2.1](#requête-421) transmettant au client la liste des autres clients connectés
```text
LIST CLIENTS <nombre de clients> <noms clients séparés par un espace>
```
5 years ago
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.