GUYOT Gaston - GONDANGE Benjamin
Ce projet est une implémentation du protocole IRC comme décrit dans le memo RFC 1459.
cargo run
Le port est 3333.
Nous avons testé avec le client XChat irc pour linux, ainsi que le client CLI weechat-curses.
Pour se connecter au server, nous pouvons par exemple utiliser la commande
/connect 127.0.0.1 3333
Les fonctions implémentées sont les suivantes :
- NICK s'authentifier
- JOIN pour rejoindre un salon
- PART pour quiter un salon
- PRIVMSG pour envoyer un message dans un salon
- QUIT pour quitter le serveur
- PING
Des différents composants s'occupent des différentes parties de l'applocation :
- Registration s'occupe de l'enregistrement et du désenregistrement des clients
- Channels s'occupe de l'ajout et la suppression de clients aux channels
- Broadcast s'occupe d'envoyer des messages à une channel entière
- client_handler s'occupe de lire les messages envoyés par les clients et de les dispatcher.
- Postman s'occupe d'envoyer des messages uniques de manière asynchrone aux clients (peut provoquer des race conditions dans certaines situations)
- Protocol s'occupe de formatter les messages à envoyer
La discussion entre les différents threads (channels, registration, broadcast, ...) se font à l'aide de canaux définis dans main.rs.
Le Vecteur qui stocke les clients, ainsi que la HashMap qui stocke les chaînes sont utilisées ave des Arc et des Mutex pour y accéder depuis différents threads. Ils sont définis dans le main.rs.
Nous avons implémenté le trait Clone
et PartialEq
sur la struct Client
définie dans client_handler.rs.
Pas d'unwrap
ni d'except
utilisés.
Utilisés un peu partout, notamment dans broadcast.rs.