Architecture de plugin
EuuBot.Relay permet la création de divers plugins par l'implantation d'interfaces spécifiques sur une classe .NET (Il est possible de créer de plugins autant en c# qu'en vbnet). Diverses classes permettent de donne différents comportements à vos plugins. Voici la liste non-finale des interfaces disponibles pour vos plugins:
- IPlugin (requis): Interface commune à tout les plugins
- IConnectionPlugin: plugin qui est chargée lors d'une connection initiale. Ce type de plugin permet d'envoyer et de recevoir des packets.
- IFormPlugin: permet de charger un formulaire en tant qu'enfant MDI à l'intérieur du logiciel.
- ISharedPlugin: interface qui défini un plugin comme étant partager par tout les autres plugins. Ce type de plugin est chargé quand le programme ouvre et seulement une instance est maintenue en tout temps.
Chaque plugin doit également définir un attribut PluginInformation avec le nom du plugin, la description, l'auteur et la version.
Voici maintenant une description détaillée de chaque interface.
IPlugin
void Initiate(IPluginHost host);
Méthode qui communique au plugin le host qui l'a chargé. Un plugin host est un objet défini par l'engin de plugin qui permet de communiquer avec cet engin. Il contient des méthode qui servent par exemple à obtenir une référence vers un autre plugin, envoyer des packets ou encore à sauvegarder une configuration spécifique au plugin.
IConnectionPlugin
bool ForceAutoLoad { get; }
Si cette propriété retourne true, alors il sera impossible de désactiver ce plugin. Veuillez noter qu'au moment d'écrire ce guide, cette fonction n'est pas implantée.
PacketAction ProcessClientPacket(ClientPacket packet);
PacketAction ProcessServerPacket(ServerPacket packet);
Méthode appelée par le plugin host lorsqu'un packet est reçu du serveur ou du client. L'objet ClientPacket ou ServerPacket peut être converti en un type plus spécifique dépendemment du protocol id (par exemple il est possible de convertir en MapComplementaryInformationDataMessage). C'est ici que vous interprètez les packets recues du serveur ou envoyer par le client. Il est possible de dire ce que fait le plugin host avec le packet en modifiant la valeure de retour. Voir section suivante.
public enum PacketAction
{
Keep,
Drop
}
Chaque fois qu'un packet est gérer par un plugin, le host demande à ce plugin quoi faire avec. Si vous retournez PacketAction.Drop, le packet ne sera pas envoyer vers le client (ou vers le serveur, dépendemment du cas). Il est alors possible d'empecher le client d'envoyer certains messages ainsi que d'empecher le serveur d'en recevoir.
IFormPlugin
Form GetPluginForm();
Sert à retourner le formulaire que vous voulez afficher. Veuillez noter que pour l'instant, cette fonction n'est pas disponible pour les shared plugins.
ISharedPlugin
Cette interface ne contient aucune méthode spécifique, elle est simplement utilisée pour indiquer qu'un plugin est partager.