<Index de l'aide> <Serveur> <Client> <Plugins>
<Liste des Plugins> <Nos points forts> <Extensions envisagées>

Nos points forts

Voici plusieurs points gérés par notre application qui, bien qu'ils ne soient pas mentionnés dans le sujet, nous ont paru utiles à intégrer :


Le système de plugins

Puisque le client devait être allégé au maximum, tout le code de traitement devait se retrouver côté serveur.
Afin de ne pas rendre le code trop lourd, nous avons opté pour un système de Plugins.
Le code est ainsi réparti dans plusieurs classes totalement indépendantes de MonDialogue, et il est possible d'ajouter de nouvelles fonctionnalités au serveur sans avoir ni à le recompiler, ni à le redémarrer ! Il suffit en effet d'écrire son plugin, de le compiler et de placer le fichier dans le répertoire approprié. Ensuite, un simple /admin rehash permet de le charger !


L'enregistrement infini d'informations utilisateurs

Pour chaque plugin, il n'y a qu'une seule instance de créée, commune à tous les utilisateurs.
Afin de permettre aux plugins de stocker des informations nécessaires à leur bon fonctionnement, les methodes setInfo() et getInfo() permettent d'enregistrer et de retrouver autant d'informations que nécessaires sur un utilisateur.


Des clients répartis sur plusieurs émetteurs

Afin de répartir la tâche de l'émetteur, nous avons créé un système qui se multiplie de lui-même lorsque la charge devient trop importante pour un seul émetteur.
Il est possible de voir la répartition des utilisateurs sur les différents émetteurs par la commande /chat map


Une limitation du nombre de connexions simultanées

Il nous a paru utile de pouvoir fixer une limite de connexions simultanées, afin d'éviter que le serveur ne soit saturé suite à une forte affluence ou une attaque de la part d'utilisateurs mal intentionnés :-)
Cette limite est définie à l'instanciation du MonServeur.
Lorsque le serveur est plein et qu'un utilisateur tente de se connecter, il est mis en attente par la methode getUnClient().
Dès qu'un dialogue se libère, il en informe le serveur qui accepte alors la connexion du nouveau client :
protected synchronized void deconnexion(){ //visible au niveau package afin de la rendre accessible aux plugins
[...]try{ getSocket().close(); } catch (IOException e){}
synchronized(serveur){
serveur.notifyAll(); //notifier le serveur qu'une place s'est libérée
}}


Un plannificateur générique

Notre Scheduler peut être utilisé pour plannifier l'execution et l'arrêt de n'importe quel objet implémentant l'interface Plannifiable, qui se résume à deux methodes: start() et stop()

Un temps de grâce à la fermeture du serveur

Qui n'a jamais connu le stress qu'occasionne une connexion se fermant juste au mauvais moment ?
Pour le bien être de nos utilisateurs, nous avons prévu un temps de grâce durant lequel les utilisateurs sont informés du temps qu'il leur reste avant d'être déconnecté, et où le serveur n'accepte plus aucune nouvelle connexion...