Bonjour,
Nous sommes un groupe de 4 étudiant de première année de master génie informatique et mathématique. Nous avons a réaliser entrepris la réalisation d’une messagerie instantanée en java.
Nous aimerions beaucoup que des gens nous donne leur avis sur l’architecture technique que nous avons pris.
Notre messagerie comporte 2 parties :
-une partie serveur :
Le serveur possède un thread ouvert en écoute sur un port pour que les clients puissent s’y connecter. Le serveur gère les clients par l’intermédiaire d’une base de donnée MYSQL.
Chaque message quel qu’il soit est un objet fils de la classe mère :msg . Cette classe mère possède un tint en attribut qui correspond a la RFC du message. Cela permet aussi bien au client que au serveur de savoir quel est le type de message qu’il reçoit en fonction de la RFC.
Pour des raisons de sécurité tous les messages transitent par le serveur y compris ceux de communication.
Le serveur possède une table de hachage qui contient en clé le login de l’utilisateur et en valeur un objet content un pointeur d’écriture sur le thread client et l’INETAddress du client.
Grâce a cela le serveur peut joindre facilement n’importe quel client connecté.
-une partie client :
Les clients après connections accède a leur liste de contact. Cette liste est affichée dans un JTree. Les contacts sont gérer par groupe (chaque contact appartient a un groupe lorsqu’il est rajouter il appartient au groupe général). L’utilisateur peut rajouter autant de contact qu’il le souhaite et dans autant de gp qu’il le souhaite sans créer de doublons bien sur (l’ensemble des clients dupliquer pointe sur le même objet client). A chaque modification le client envoie la modification au serveur. Cela permet au serveur d’avoir une copie parfaite de la gestion des contacts du client.
Voici la RFC :
int MESSAGE =50;
//codes de requete :
int DELOG =2; //se delogger
int MODIF =3; //changer qqch dans ses infos
int AJOUT_CONTACT =5; //ajouter un contact
int CONF_AJOUT =13; //confirmation d'ajout d'un contact
int SUPP_CONTACT =6; //supprimer un contact
//coté client :
int C_LOGGER =1; //se connecter(logger)
int C_SUPP_CONTACT_GROUPE =10; //supprimer un contact d'un groupe
int C_RENAME_GROUPE =7; //renommer un groupe
int C_SUPP_GROUPE =8; //supprimer un groupe
int C_SUPP_GROUPE_MEMBRES=9; //supprimer un groupe et ses membres
int C_COPIE_CONTACT =11; //copier un contact dans un autre groupe
int C_DEP_CONTACT =12; //déplacer un contact vers un autre groupe
int C_BLOQUER =14; //bloquer un contact
int C_DEBLOQUER =15; //debloquer un contact
int C_NOUVEAU =17; //nouvel utilisateur
//coté serveur
int S_LOGGER=101; //se connecter(logger)
//erreurs
int ERROR =100; //erreur
int TE_FATAL_ERROR =0; //erreur fatale
int TE_AJOUT_CONTACT =1;
int CE_MEMBRE_INEXISTANT =1; //membre a ajoute non present dans la BD
int TE_LOGGER =2; //erreur de connection