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

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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