Projet de Programmation Répartie
Un cousin de MSN en RMI

I) Modalités

L'idée de ce projet est de concevoir un système de messagerie instantanée "à la MSN Messenger" en Java-RMI.
Le projet sera à rendre sous forme d'une archive quadrinome.tgz qui se dezippera en un seul répértoire nommé quadrinome/, et contenant :
  • les sources du projet,
  • les scripts nécessaires pour compiler et démarrer l'application (ant ou sh au choix),
  • un rapport de 5 à 10 pages expliquant l'architecture de votre application ainsi que les raisons qui vous ont ammenées à cette architecure. Il précisera aussi toutes les fonctionnalités (obligatoires et optionnelles) de votre projet.
L'architecture logicielle sera un point crucial pour la notation. La 8ème séance de TD (le 7 avril 2005) sera consacrée à une première évaluation de votre projet. Vous réaliserez une démonstration notée sur 5 points de votre application en une dizaine de minutes, ce qui vous permettera de défendre vos choix de conception.

Si vous avez d'autres questions : christian.delbe@sophia.inria.fr

II) Enoncé du projet

Exemple de scénario d'utilisation

L'utilisateur Bob désire se créer un compte sur votre réseau MSN-like (MSNl). Il lance le client et se connecte sur le serveur MSNl dont il connait l'adresse.

Le serveur propose soit de se logger (pour les utilisateurs possédant déjà un compte), soit de se créer un compte. Bob choisit de se créer un compte : il doit entrer des informations (nom, age, ...), ainsi qu'un couple pseudo/password. A partir de cet instant, Bob pourra se logger uniquement avec son couple pseudo/password sur le serveur MSNl.

Bob a des amis utilisateurs de MSNl dont il connait les pseudos. Il veut les rajouter dans sa liste d'amis. Il clique sur "Ajouter des contacts" puis entre un pseudo : l'ami correspondant est notifié de la demande et peut accpeter ou non d'être ajouter à la liste de Bob. Si l'ami n'est pas connecté à ce moment, la demande de contact lui sera indiquée à sa prochaine connexion.

Si Bob doit sortir faire des courses, il peut indiquer son absence aux autres utilisateurs au moyen d'un statut de type "en ligne ou absent".

Si un contact de Bob n'est pas connecté, mais que Bob désire tout de même lui laisser un message, il peut le faire au moyen d'une messagerie en "poste restante". Ce message est stocké avec la date et l'heure sur le serveur et sera delivré au contact de Bob lors de sa prochaine connexion.

Enfin, Bob peut bien-sûr être invité à discuter avec un contact ou inviter un ou plusieurs contacts (i.e. conversation en conférence) à discuter avec lui.

Contraintes techniques

Les fonctionnalités obligatoires sont les suivantes :
  • enregistrement d'un utilisateur avec son profil et une liste de contacts,
  • ajout et suppression de contacts durant une session,
  • statut des utilistateurs modifiables durant une session (en ligne, absent, hors ligne),
  • message en poste restante pour les utilisateurs non connectés,
  • conversation à deux ou en conférence.
Votre système de messagerie sera basé sur un serveur centralisé, mais les conversations entres utilisateurs se feront en pair-à-pair (à la différence de l'exemple vu en TD). Même lors de conversation "conférences" (plus de 2 personnes), le flux des conversations ne passera pas par le serveur. Ce serveur :
  • stocke le profil des utilisateurs (infos persos, pseudo/password, liste de contacts),
  • stocke les messages en poste restante,
  • notifie les utilisateurs des demandes d'ajout de contacts, d'invitations à discuter, de modifications de statut.

La façon de stocker les informations est libre (de la simple hashtable à la base de données), mais votre projet doit pouvoir fonctionner sans autre application ni libraire exotique.

Nous vous demandons une interface graphique minimum : fenêtre d'enregistrement, de login et de conversation.

Pour les plus courageux...

Il est possible d'étendre le projet en ajoutant :
  • la possibilité de transférer des fichiers lors d'une conversation à deux,
  • une recherche de contact par informations stockées dans le profil de l'utilisateur,
  • la persistence du serveur, c'est-à-dire le moyen de le redémarrer sans perdre les informations des utilisateurs,
  • ou encore une idée de votre cru...
Plus d'infos en TD pour les intéressés...
ATTENTION : Les fonctionnalités supplémentaires rapportent moins que celles obligatoires. Donc, finissez toutes les obligatoires avant de commencer les extensions...