2018-02-26 11:30:34 +00:00
Proposition de protocole
========================
2018-02-26 11:56:21 +00:00
Proposition de protocole pour la communication inter-serveurs/clients pour le projet de chat textuel.
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
Quelques règles pour assurer le bon fonctionnement du protocole :
2018-02-26 11:30:34 +00:00
- Chaque ligne se termine par les caractères `\r\n` .
2018-02-26 11:56:21 +00:00
- Un nom d’ utilisateur ne peut contenir que des caractères alphanumériques (a-z, A-Z, 0-9).
2018-03-21 20:51:39 +00:00
- Un nom d’ utilisateur contient de 1 (un) à 20 (vingt) caractères.
- Un message contient de 1 (un) à 2000 (deux mille) caractères (hors protocole)
2018-02-26 11:30:34 +00:00
2018-02-27 11:11:50 +00:00
Liste d’ abbréviations :
- "C" : client unique
- "A" : ensemble des clients
- "S" : serveur
2018-03-22 15:46:45 +00:00
Général
-------
### Requête 0.1
S->C
Requête non comprise par le serveur
``` text
BAD REQ
```
2018-02-26 11:30:34 +00:00
Connexion au serveur
--------------------
2018-02-26 11:56:21 +00:00
Gestion de l’ arrivée des utilisateurs sur le serveur (choix du nom d’ utilisateur et notification des clients).
2018-02-26 11:30:34 +00:00
### Requête 1.1
2018-02-27 11:11:50 +00:00
C->S
Connexion sans nom d’ utilisateur fournit par le client, `<version>` devant être remplacé par la version utilisée par le client (tel que `0.5` ou `1.0` ).
2018-02-26 11:30:34 +00:00
``` text
PROT < version > CONNECT NEW
```
### Requête 1.2
2018-02-27 11:11:50 +00:00
C->S
2018-02-26 11:30:34 +00:00
Connexion au serveur mentionnant le nom d’ utilisateur
``` text
PROT < version > CONNECT USER < username >
```
2018-02-26 11:56:21 +00:00
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.
2018-02-26 11:30:34 +00:00
### Requête 1.3
2018-02-27 11:11:50 +00:00
S->C
2018-02-26 11:56:21 +00:00
Réponse à cette requête du serveur vers le client (serveur vers client), requête du nom d'utilisateur.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
NAME REQ
2018-02-26 11:30:34 +00:00
```
### Requête 1.4
2018-02-27 11:11:50 +00:00
C->S
2018-02-26 11:56:21 +00:00
Réponse à la requête du serveur (client vers serveur), envoi du nom d’ utilisateur.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
NAME < username >
2018-02-26 11:30:34 +00:00
```
### Requête 1.5
2018-02-27 11:11:50 +00:00
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 )
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
NAME OK
2018-02-26 11:30:34 +00:00
```
### Requête 1.6
2018-02-27 11:11:50 +00:00
S->C
Réponse du serveur si l'enregistrement du nom d'utilisateur a rencontré une erreur (nom déjà utilisé,…) (serveur vers client).
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
NAME FAILURE
2018-02-26 11:30:34 +00:00
```
### Requête 1.7
2018-02-27 11:11:50 +00:00
S->A
2018-02-26 11:56:21 +00:00
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.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
JOIN < username >
2018-02-27 11:11:50 +00:00
```
### Requête 1.8
S->C
Requête confirmant au client sa connexion
``` text
2018-03-17 10:39:28 +00:00
WELCOME
```
### Requête 1.9
S->C
Réponse du serveur en cas de version de protocole différente
```text
BAD PROT
2018-02-26 11:30:34 +00:00
```
Déconnexion du serveur
----------------------
Gestion du départ des utilisateurs du serveur
### Requête 2.1
2018-02-27 11:11:50 +00:00
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.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
BYE
2018-02-26 11:30:34 +00:00
```
### Requête 2.2
2018-02-27 11:11:50 +00:00
S->A
Notification aux clients de la déconnexion d’ un autre client.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
LOGOUT < username >
2018-02-26 11:30:34 +00:00
```
Ping
----
2018-02-26 11:57:23 +00:00
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 ).
2018-02-26 11:30:34 +00:00
### Requête 3.1
2018-03-21 11:21:37 +00:00
S->A, C->S
2018-02-27 11:11:50 +00:00
2018-03-21 11:21:37 +00:00
Envoi d’ un ping du serveur vers chaque client ou d’ un client vers le serveur.
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
PING
2018-02-26 11:30:34 +00:00
```
### Requête 3.2
2018-03-21 11:21:37 +00:00
C->S, S->C
2018-02-27 11:11:50 +00:00
2018-03-21 11:21:37 +00:00
Envoi de la réponse du client au serveur ou du serveurs au client pour la [requête 3.1 ](#requête-31 )
2018-02-26 11:30:34 +00:00
``` text
2018-03-17 10:39:28 +00:00
PONG
2018-02-26 11:30:34 +00:00
```
2018-02-26 11:56:21 +00:00
## Échange de messages
2018-03-17 10:39:28 +00:00
2018-02-26 11:56:21 +00:00
### Échange de messages publics
2018-02-26 11:30:34 +00:00
#### Requête 4.1.1
2018-02-27 11:11:50 +00:00
C->S
2018-02-26 11:56:21 +00:00
Envoi depuis le client vers le serveur d’ un message public
2018-03-17 10:39:28 +00:00
2018-02-26 11:56:21 +00:00
``` text
2018-03-17 10:39:28 +00:00
MSG < message >
2018-02-26 11:56:21 +00:00
```
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
#### Requête 4.1.2
2018-02-26 11:30:34 +00:00
2018-02-27 11:11:50 +00:00
S->A
2018-02-26 11:56:21 +00:00
Transmission d’ un message d’ un client vers les autres clients
2018-03-17 10:39:28 +00:00
2018-02-26 11:56:21 +00:00
``` text
2018-03-17 10:39:28 +00:00
FROM < username > MSG < message >
2018-02-26 11:56:21 +00:00
```
2018-02-26 11:30:34 +00:00
2018-03-17 10:39:28 +00:00
### Interactions salon de chat
2018-02-26 11:56:21 +00:00
#### Requête 4.2.1
2018-02-27 11:11:50 +00:00
C->S
2018-02-26 11:30:34 +00:00
2018-03-17 10:39:28 +00:00
Demande du client pour recevoir la liste des participants connectés
2018-02-26 11:30:34 +00:00
2018-03-17 10:39:28 +00:00
```text
REQ CLIENTS
2018-02-26 11:56:21 +00:00
```
2018-02-26 11:30:34 +00:00
#### Requête 4.2.2
2018-02-27 11:11:50 +00:00
S->C
2018-03-17 10:39:28 +00:00
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 >
2018-02-26 11:56:21 +00:00
```
2018-03-21 11:53:35 +00:00
2018-03-17 10:39:28 +00:00
Comme mentionné au début de ce document, aucun caractère blanc n’ est autorisé dans les pseudonymes afin qu’ il n’ y ait pas de collision avec le protocole.