chat-reseau-p8/protocole.md

168 lines
4.1 KiB
Markdown
Raw Normal View History

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 dutilisateur ne peut contenir que des caractères alphanumériques (a-z, A-Z, 0-9).
2018-02-26 11:30:34 +00:00
Connexion au serveur
--------------------
2018-02-26 11:56:21 +00:00
Gestion de larrivée des utilisateurs sur le serveur (choix du nom dutilisateur et notification des clients).
2018-02-26 11:30:34 +00:00
### Requête 1.1
2018-02-26 11:56:21 +00:00
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`). Client vers serveur.
2018-02-26 11:30:34 +00:00
``` text
PROT <version> CONNECT NEW
```
### Requête 1.2
Connexion au serveur mentionnant le nom dutilisateur
``` 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-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
PROT <version> REQ NAME
```
### Requête 1.4
2018-02-26 11:56:21 +00:00
Réponse à la requête du serveur (client vers serveur), envoi du nom dutilisateur.
2018-02-26 11:30:34 +00:00
``` text
PROT <version> NAME <username>
```
### Requête 1.5
2018-02-26 11:56:21 +00:00
Réponse du serveur si l'enregistrement du nom d'utilisateur sest bien déroulé (serveur vers client)
2018-02-26 11:30:34 +00:00
``` text
PROT <version> OK WELCOME
```
### Requête 1.6
2018-02-26 11:56:21 +00:00
Réponse du serveur si l'enregistrement du nom d'utilisateur a rencontré une erreur (nom déjà utilisé,…) (serveur vers client). La [requête 1.2](#requête-12) est envoyée vers le client.
2018-02-26 11:30:34 +00:00
``` text
PROT <version> FAILURE
```
### Requête 1.7
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 dun nouvel utilisateur.
2018-02-26 11:30:34 +00:00
``` text
JOIN <username>
```
Déconnexion du serveur
----------------------
Gestion du départ des utilisateurs du serveur
### Requête 2.1
Envoi du client vers le serveur le notifiant de sa déconnexion
``` text
PROT <version> BYE
```
### Requête 2.2
2018-02-26 11:56:21 +00:00
Envoi du serveur vers chaque client de la notification de déconnexion d'un client
2018-02-26 11:30:34 +00:00
``` text
PROT <version> LOGOUT <username>
```
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
Envoi dun ping du serveur vers chaque client.
``` text
PROT <version> PING
```
### Requête 3.2
2018-02-26 11:56:21 +00:00
Envoi de la réponse du client au serveur pour la [requête 3.1](#requête-31)
2018-02-26 11:30:34 +00:00
``` text
PROT <version> PONG
```
2018-02-26 11:56:21 +00:00
## Échange de messages
### Échange de messages publics
2018-02-26 11:30:34 +00:00
#### Requête 4.1.1
2018-02-26 11:56:21 +00:00
Envoi depuis le client vers le serveur dun message public
``` text
PROT <version> MSG <message>
```
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-26 11:56:21 +00:00
Transmission dun message dun client vers les autres clients
``` text
PROT <version> FROM <username> MSG <message>
```
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
### Échange de messages privés
#### Requête 4.2.1
Transmission dun message dun client vers un autre client uniquement, spécifié par son nom dutilisateur (client vers serveur)
``` text
PROT <version> PRIV TO <dest-username> MSG <msg>
```
#### Requête 4.2.2
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
Transmission dun message dun client vers un autre client uniquement, spécifié par son nom dutilisateur (serveur vers client)
``` text
PROT <version> PRIV FROM <username> MSG <message>
```
2018-02-26 11:30:34 +00:00
### Messages privés
#### Requête 4.2.1
2018-02-26 11:56:21 +00:00
Transmission dun message dun client vers un autre client uniquement, spécifié par son nom dutilisateur (client vers serveur)
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
``` text
PROT <version> PRIV TO <dest-username> MSG <msg>
```
2018-02-26 11:30:34 +00:00
#### Requête 4.2.2
2018-02-26 11:56:21 +00:00
Transmission dun message dun client vers un autre client uniquement, spécifié par son nom dutilisateur (serveur vers client)
2018-02-26 11:30:34 +00:00
2018-02-26 11:56:21 +00:00
``` text
PROT <version> PRIV FROM <username> MSG <message>
```