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

Ecriture d'un plugin

Les informations suivantes s'adressent aux personnes désirant écrire de nouveaux plugins pour ajouter de nouvelles fonctionnalités au serveur, ou aux curieux qui souhaitent découvrir leur fonctionnement...

Un plugin est une sous-classe de la classe abstraite Plugin, et implémente une ou plusieurs fonctionnalités proposées par le serveur :
public class Plugin1_Stat extends Plugin implements Commandable, Traitable, Initialisable{ [...] }

Note: Les plugins sont chargés automatiquement, dans l'ordre alphabétique... Avant d'écrire un plugin, il faut déterminer quel sera son rôle, et à quel moment il devra interagir avec le serveur :

Les plugins Commandables

  • Un plugin Commandable est un plugin qui est capable de répondre à une commande qui lui est propre, et qui est indiquée par getCmd():
    public String getCmd(){ return "STAT"; }
  • Un plugin Commandable doit indiquer son rôle par la methode getRole():
    public String getRole(){ return "Pour visualiser vos statistiques"; }
  • Un plugin Commandable doit indiquer son utilisation par la methode getUsage():
    public String getUsage(){ return "[DUREE | DUREETOT | DUREELAST | _MOTS | CONNEXIONS]"; }
  • Un plugin Commandable doit décrire les différentes options qu'il propose par la methode getOptions():
    public String getOptions(){
    return "\tDUREE\t\tConnaitre son temps de connexion pour cette session.\n" +
    "\tDUREETOT\tConnaitre son temps total de connexion depuis l'inscription.\n" +
    "\tDUREELAST\tConnaitre son temps de dernière connexion.\n" +
    "\tMOTS\t\tConnaitre le nombre de mots tapés depuis l'inscription.\n" +
    "\tCONNEXIONS\tConnaitre le nombre de connexions au serveur depuis l'inscription.";
    }
  • Lorsqu'un chateur utilise la commande, la methode du plugin traitementCommande() est appelée afin de fournir une Reponse au chateur.
    Pour cela, il recoit en paramètres un tableau d'arguments avec lesquels a été appelée la commande, ainsi que le dialogue qui l'a appelé :
    public Reponse traitementCommande(String args[], MonDialogue d){
    ReponseInfo rep;
    User u = d.getUser();
    if( args.length > 1){
    args[1] = args[1].toUpperCase();
    if( args[1].equals(O_DUREE) ) rep = new ReponseInfo(repDurée(u));
    else if( args[1].equals(O_DUREETOT) ) rep = new ReponseInfo(repDuréeTot(u));
    else if( args[1].equals(O_DUREELAST) ) rep = new ReponseInfo(repDuréeLast(u));
    else if( args[1].equals(O_MOTS) ) rep = new ReponseInfo(repMots(u));
    else if( args[1].equals(O_CONNEXIONS) ) rep = new ReponseInfo(repConnexions(u));
    else rep = new ReponseInfo("Utilisation incorrecte.");
    }
    [...]
    return rep;
    }

Les plugins Traitables

Un plugin Traitable est un plugin qui a besoin d'effectuer un traitement sur chaque message textuel émis par les chateurs.
A tout moment, il peut remonter une exception MsgRefusedException afin que le message ne soit pas transmis aux autres chateurs, et que l'exception soit renvoyée à l'auteur en guise de Reponse.
  • Lorsqu'un chateur "dit" quelque chose, la methode du plugin traitementMsg() est appelée, avec comme paramètres le message textuel et le dialogue connecté au chateur. Il doit retourner le message, qu'il peut éventuellement mettre en forme :
    public String traitementMsg(String msg, MonDialogue d){
    int nbm;
    User u = d.getUser();
    //incrémente le nombre de mots
    try{ nbm = u.getInfoNumeric(INFO_NBM); }
    catch(NoSuchInfoException e){ nbm=0; }
    u.setInfo( INFO_NBM, nbm + (Split.split(msg)).length );
    //retourne le message inchangé
    return msg;
    }

Les plugins Initialisables

Un plugin Initialisable est un plugin qui a besoin d'effectuer un traitement lors de la connexion ou déconnexion d'un utilisateur.
  • Lorsqu'un chateur se connecte, la methode du plugin traitementConnexion() est appelée, avec comme paramètres l'User concerné.
    public void traitementConnexion(User u){
    //heure de connexion, pour connaitre la durée de la session
    u.setInfo(INFO_CONNEXION, new Date());
    //màj du nombre de connexions
    int nbc;
    try{nbc = u.getInfoNumeric(INFO_NBC);}
    catch(NoSuchInfoException e){nbc=0;}
    u.setInfo(INFO_NBC, ++nbc);
    }
  • Lorsqu'un chateur se déconnecte, la methode du plugin traitementDeconnexion() est appelée, avec comme paramètres l'User concerné.
    public void traitementDeconnexion(User u){
    //màj dernière connexion
    u.setInfo(INFO_DUREE_LAST, _duréeConnexion(u));
    }