Client/Serveur de chat
Résumé du sujet
Projet de C++ consistant en un serveur +client de chat (comme IRC, Slack , etc...), mais en plus "simple".
Fonctionnalités requises :
- un serveur central
- déconnecte un client si la connexion est perdu/fermée (tolérance ~1 min)
- chaque client peut se connecter (même si autre(s) client(s) déjà connecté(s))
- communication minimale avec un "canal" général/commun à tous le monde
- notifie des (dé)connexions des clients
- doit être capable d'accepter au minimum 20 connections en parallèle
- doit pouvoir envoyer les messages aux clients en moins d'une seconde
- un client
- permet d'écrire & envoyer messages au serveur
- permet de recevoir & afficher des messages du serveur
- les clients se connectent avec la même commande
- si programme interrompu, doit être déconnecté du serveur
- informe des (dé)connexions (du serveur/channel)
Contraintes :
- Les dépendances doivent être explicites et résolue dans la phase d’installation
- doit être compilable et lançable sous linux (Ubuntu 16.04 LTS)
- doit être testé (coverage de 50% minimum)
- doit passer le test de memcheck (valgrind)
- doit être versionné sous git
- doit avoir une intégration continue
- pas de GUI graphique (utilisable en console)
La contrainte d’ordonnancement des messages est la suivante: si un client U envoie le message
m1
puis le messagem2
, les autres clients doivent les recevoir dans cet ordre. Cependant il n'y a pas de priorité entre les clients.
Vous devez pouvoir montrer que des clients sur différentes machines peuvent communiquer via ce serveur (machines virtuelles sur la même machine physique autorisées).
Fonctionnalités supplémentaires :
- Sauvegarder l'historique des conversations sur le serveur (dans un fichier ou une base de données)
- Vérifier que deux clients n'ont pas le même identifiant
- Gérer les connexion de manière multi-threadé
- Permettre aux clients de demander l'historique
- Permettre l'envoi de messages personnels (visibles uniquement entre les deux clients concernés)
- Permettre la création de canaux de discussions par les clients (channels sur irc/slacks)
Le projet nécessite :
- lors de la compilation :
- CMake (3.x)
- make
- MinGW sous Windows
- GCC/CLang/? sous Linux
- pour le programme :
- ...
CMake se charge de tester et gérer les dépendances du projet.
Les seules commandes sont :
En debug (par défault) :
cmake -G"<Generator>" -Wdeprecated -Wdev -DCMAKE_BUILD_TYPE=Debug .
cmake --build . [--clean-first] [--target <tgt>]
En release :
cmake -G"<Generator>" -DCMAKE_BUILD_TYPE=Release .
cmake --build . [--clean-first] [--target <tgt>]
<Generator>
correspond suivant le système à :
MinGW Makefiles
sous WindowsUnix Makefiles
sous Linux (sauf si vous voulez compilez les binaires pour windows avec mingw)
<tgt>
peut-être :
all
(par défaut si option non utilisée)clean
,help
,rebuild_cache
,install
SChat
,schatSrv
ouschatCli