« A1, systèmes »
Mise en place d'une plateforme de messagerie instantanée
Le principe de cette plate-forme (le serveur) est de donner un espace de
discussion à un ensemble d'utilisateurs de machines connectées par le
réseaux (les clients). On doit donc pouvoir transmettre du texte d'un client au
serveur et que ce texte soit mis à disposition des autres membres de la
discussion.
Pour vous aider dans la construction de ce projet, il est découpé en trois
parties, de la plus simple à la plus compliquée. Le développement des trois
parties sera évalué pour la notation du projet.
PARTIE 1 : UNE SEULE DISCUSSION (4)
L'objectif de cette partie est de faire dialoguer plusieurs clients en même
temps sur un même serveur. Le fonctionnement de cette partie est très proche
du TP « programmation pour les réseaux » de R. Raffin. Tous les clients voient
la discussion et peuvent y intervenir.
Fonctionnement :
● exécuter le serveur sur une machine (le serveur est destiné à rester en
fonctionnement en permanence) ;
● chaque client se connecte au serveur grâce à l'adresse IP de ce dernier ;
● à chaque message d'un client vers le serveur, celui-ci renvoie le message
vers tous les clients.
Consignes :
● chaque message envoyé aux membres comporte un en-tête avec la date
et l'heure de la réception du message par le serveur et l'expéditeur de
ce message ;
● lorsqu'un client intègre ou quitte la discussion, les autres membres sont
avertis ;
● le serveur continue de fonctionner indéfiniment, même sans client ;
● lorsque le serveur est arrêté, il prend le temps de prévenir d'abord tous
les membres de la discussion.
PARTIE 2 : EXTENSION PLUSIEURS DISCUSSIONS (8)
Le serveur propose la mise en place de salles de discussions dans lesquelles
un ensemble de membres peuvent discuter. Les discussions dans ces salles
sont évidemment restreintes aux membres de la discussion mais un membre
peut faire partie de plusieurs discussions.
Fonctionnement :
● exécuter le serveur sur une machine ;
● chaque client se connecte à ce serveur grâce à son adresse IP ;
● une fois connecté, le serveur envoie au client la liste des discussions
avec leurs membres. Le client choisit d'en intégrer une (ou plusieurs) ;
● à chaque message d'un client vers le serveur pour une discussion
donnée, le serveur renvoie le message vers tous les clients de cette
discussion ;
● si le client veut créer une discussion, une fois connecté, il en fait la
demande au serveur. Celui-ci donnera un identifiant à la discussion, fera
du client demandeur un membre d'office et diffusera à tous la création
de cette discussion.
Consignes :
● à vous de voir quelle est la meilleur méthode pour pouvoir participer à
plusieurs discussions simultanées (un ou plusieurs serveurs issus de
threads, une console pour chaque discussion ou une console commune
avec la demande à chaque message pour connaître la discussion
réceptrice, ...) ;
● chaque message envoyé aux membres comporte un en-tête avec la date
et l'heure de la réception du message par le serveur, un identifiant de
discussion, l'expéditeur de ce message ;
● lorsqu'un client intègre ou quitte une discussion, les autres membres
sont avertis ;
● si tous les membres d'une discussion la quittent, elle est supprimée du
serveur ;
● le serveur continue de fonctionner, même sans client ;
● lorsque le serveur est arrêté, il prévient d'abord tous les membres de
toutes les discussions ;
● une commande permet d'obtenir une liste des membres actuels de la
discussion à laquelle le client est connecté.
PARTIE 3 : GESTION DES DISCUSSIONS (6)
À la suite de la partie 2, ajouter des modérateurs qui peuvent admettre ou
refuser un membre, éjecter un membre d'une ou plusieurs discussions et un
super-modérateur qui peut admettre ou refuser la création d'une discussion.
D'autre part, un client peut envoyer un message à un autre directement s'il
connaît son identifiant, seul le super-modérateur verra passer ce message.
Fonctionnement :
● identique au précédent
● tous les messages sont stockés sur disque dur (log), un fichier par
discussion. On doit retrouver pour chaque discussion :
○ une en-tête avec le créateur de la discussion, la date et l'heure,
○ pour chaque message, l'expéditeur la date et l'heure,
○ pour chaque événement, le type, les informations, la date et l'heure
(ajout ou suppression d'un membre, message du serveur, envoi d'un
message, ...).
● les messages hors discussion sont stockés dans un fichier à part.
Consignes :
● lorsque le serveur est exécuté, il ajoute forcement son propriétaire
comme super-modérateur et comme modérateur de chaque discussion ;
● lorsqu'un client crée une discussion, il en devient modérateur ;
● pour chaque action sur la discussion, le modérateur peut ou non
intervenir (ajout d'un membre, fermeture de la discussion) ;
● lorsqu'un modérateur quitte une discussion, le super-modérateur
nomme un autre membre de la discussion. En attendant cette
nomination, si nécessaire, la discussion est bloquée (le signaler alors
aux membres) ;
● le super-modérateur existe tant que le serveur existe.
CONSIGNES GÉNÉRALES
● utiliser des structures de données pour stocker les différentes données
des applications (classe, listes, tableaux, variables) ;
● mettre en place un serveur sur pluton (147.94.176.19) ou lotus
(192.168.106.6, mais accessible seulement depuis l'intérieur de l'IUT) ;
● le serveur accepte au maximum 10 connexions ;
● commenter le code pour chaque classe et fonction ;
● utiliser des classes, l'héritage (quand cela s'y prête), la STL, etc.
● penser à désalouer tout ce qui a été aloué quand cela est nécessaire.
SUGGESTIONS D'AJOUTS POSSIBLES
● envoi de données autre que texte (image bitmap, objet sérialisé) et
sauvegarde dans un répertoire local des clients ;
● suivi de la discussion sur un navigateur Web, sortie en HTML du texte
échangé ;
● pages HTML de récapitulatif ;
● commentaires en Doxygen (
www.doxygen.org) ;
● interface graphique (attention, c'est long et relativement difficile !) ;
● gestion de l'authentification auprès du serveur avec mot de passe crypté
(fonction crypt()).
AVERTISSEMENT IMPORTANT
Vous devez impérativement vous assurer à la fin de chacune de vos séances de
travail sur pluton (ou lotus) que vous n'avez laissé aucun processus zombie, ni
aucun processus encore actif lié à cet exercice.
En effet, si vous laissez un processus faire des threads à qui mieux mieux,
vous allez (gravement) affecter les performances du serveur principal de l'IUT,
ce qui n'est pas tolérable, et sera pris en compte dans la notation.