begin process at 2012 02 11 10:52:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.NET

 > MOTEUR DE PLUGINS AVEC CHARGEMENT/DÉCHARGEMENT

MOTEUR DE PLUGINS AVEC CHARGEMENT/DÉCHARGEMENT


 Information sur la source

Note :
Aucune note
Catégorie :.NET Source .NET ( DotNet ) Classé sous :plugin, sécurité, chargement, dynamique, module Niveau :Initié Date de création :03/01/2008 Date de mise à jour :12/02/2008 09:25:15 Vu / téléchargé :6 801 / 303

Auteur : maitredede

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

C'est un petit moteur de gestion de plugins qui permet de :
  - Charger/décharger à chaud les plugins
  - Rechercher les plugins dans les assembly
  - Gérer un niveau de sécurité réduit pour les plugins
  - Catégoriser les plugins (via des attributs)
  - Redémarrage d'un plugin en cas de plantage de celui-ci

Pour définir une classe comme étant un plugin, il faut qu'elle hérite de ClsPluginBase (ou ClsThreadPluginBase si c'est un nouveau Thread), et qu'elle soit tagguée avec un attribut dérivant de PluginAttribute (ou PluginAttribute si vous n'avez pas de catégories).
Ensuite, vous devez instancier un ClsPluginHostGeneric en spécifiant quel type de PluginAttribute (de catégorie) il doit gérer.
Vous pouvez énumérer les plugins disponibles dans un assembly via la fonction GetPlugins(string assembly).
Après, vous lancez un plugin avec LoadAndInitPlugin() en spécifiant quel plugin instancier, et vous obtenez l'instance du plugin. Libre à vous d'en faire ce que vous voulez (Start, Stop...).

Pour décharger un plugin, vous devez appeller UnloadPlugin() avec l'instance du plugin à décharger.

Un plugin qui crée une exception non gérée déclenche l'évènement PluginException. Si l'exception n'est pas gérée (PluginExceptionEventArgs.Handled=true) alors le plugin est redémarré, en sauvegardant son état (via les fonction SaveState et LoadState).

Coté sécurité :
Par défaut, un plugin tourne dans un bac à sable avec aucun droit (juste celui de s'exécuter). Pour modifier, vous devez vous abonner à l'évènement GetPluginPermissions du Host, et renseigner la propriété PluginPermissionEventArgs.Permissions avec les permissions que vous donnez à votre plugin.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • using System.Threading;
  • using System.IO;
  • namespace MaitreDede.Plugins
  • {
  • /// <summary>
  • /// Sample plugin : write the current time on the Console each second
  • /// Plugin d'exemple : affiche l'heure actuelle sur la Console chaque seconde
  • /// </summary>
  • [Plugin("Sample plugin", "1.0.0.0")]
  • public sealed class ClsPluginSample:ClsThreadPluginBase
  • {
  • /// <summary>
  • /// Main loop
  • /// </summary>
  • protected override void Run()
  • {
  • while(this.Running)
  • {
  • Console.WriteLine(DateTime.Now.ToLongTimeString());
  • Thread.Sleep(1000);
  • }
  • }
  • /// <summary>
  • /// Save the plugin state (for restarting)
  • /// </summary>
  • /// <param name="saveStream">Stream where to save data</param>
  • public override void SaveState(Stream saveStream)
  • {
  • //Nothing to save
  • }
  • /// <summary>
  • /// Load the plugin state (for restarting)
  • /// </summary>
  • /// <param name="saveStream">Stream where to load data</param>
  • public override void LoadState(Stream saveStream)
  • {
  • //Nothing to load
  • }
  • }
  • }
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;

namespace MaitreDede.Plugins
{
    /// <summary>
    /// Sample plugin : write the current time on the Console each second
    /// Plugin d'exemple : affiche l'heure actuelle sur la Console chaque seconde
    /// </summary>
    [Plugin("Sample plugin", "1.0.0.0")]
    public sealed class ClsPluginSample:ClsThreadPluginBase
    {
        /// <summary>
        /// Main loop
        /// </summary>
        protected override void Run()
        {
            while(this.Running)
            {
                Console.WriteLine(DateTime.Now.ToLongTimeString());
                Thread.Sleep(1000);
            }
        }

        /// <summary>
        /// Save the plugin state (for restarting)
        /// </summary>
        /// <param name="saveStream">Stream where to save data</param>
        public override void SaveState(Stream saveStream)
        {
            //Nothing to save
        }

        /// <summary>
        /// Load the plugin state (for restarting)
        /// </summary>
        /// <param name="saveStream">Stream where to load data</param>
        public override void LoadState(Stream saveStream)
        {
            //Nothing to load
        }
    }
}

 Conclusion

Bon, j'ai refais la roue... Mais j'avais un peu de temps à tuer...

A vous de voir si cette librairie répond à vos besoins ;o)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 janvier 2008 13:56:24 :
Modification du zip : projet vs2005
12 février 2008 09:25:15 :
Quelques bugs en moins, passage en projet VS2008.

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) TRAITER UN FOREACH EN PARALLÈLE
Source avec Zip Source .NET (Dotnet) CHATBOX : AFFICHAGE DE TEXTE AVEC SMILEYS
Source avec Zip Source .NET (Dotnet) STREAM QUI LIMITE LA BANDE PASSANTE
Source avec Zip Source .NET (Dotnet) COUCHE D'ACCÈS AUX DONNÉES SIMPLIFIÉE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) ORIONBANQUE par toutphp
Source avec Zip Source avec une capture Source .NET (Dotnet) ORIONAPPLICATION par toutphp
Source avec Zip SOCKET CONNEXION CLIENT & SERVEUR par ziedto83
Source avec Zip Source .NET (Dotnet) FFMPEG.NET : WRAPPER .NET DE FFMPEG par MasterShadows
Source avec Zip Source .NET (Dotnet) ATTACHER, CRÉER ET SAUVEGARDER UNE BASE DE DONNÉES SQL SERVE... par Alvepinai

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) ORIONAPPLICATION par toutphp
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE MODBUS POUR MODULES ADAM, BECKHOFF, WAGO par mnmsjaune
Source avec Zip Source avec une capture Source .NET (Dotnet) DÉMINEUR JR par jrscofield
Source avec Zip Source .NET (Dotnet) COPIE DE CLÉ USB AUTOMATIQUE par pigedanslelac
Source avec Zip Source .NET (Dotnet) [.NET2] HÉBERGEUR DE PLUGINS AVEC CHARGEMENT ET DÉCHARGEMENT... par BaFM

Commentaires et avis

Commentaire de tmcuh le 03/01/2008 13:27:20

Hello il manque le fichier projet pour pouvoir tester. L'idée parait simpa, surtout le fait de "catégoriser" ton plugin.

Commentaire de maitredede le 03/01/2008 13:52:12

Salut :)
Le fichier projet est inclus (.csproj) c'est juste que je n'ai pas mis de fichier solution (.sln) et c'est du VS2008...
Je vais voir  pour faire un projet/solution VS2005

Commentaire de Aurazed le 14/01/2008 11:22:02

Bon projet, en revanche il manque un projet pour pouvoir tester, il n'y a que le projet MaitreDede.Plugins

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Chargement dynamique de type [ par thiosyiasar ] Bonjour a tous, Je voudrais faire un chargement dynamique d'assembly à partir d'un nom complet de type Par exemple, j'ai la valeur suivante "Syste XML, Enum, Dynamique [ par ricklekebekoi ] Bonjour,Je travail sur un serveur de jeu, dont l'émulateur est écrit entierement en c#. L'emulateur contient une base en assembly.exe, et un dossier s Chargement d'une assembly [ par onionichan ] Bonjour à tous,J'ai un petit souci technique avec un composant COM C# qui est utilisé dans Excel;1. J'ai enregistré mon assembly COM qui se trouve dan chargement d'un PDF qque soit la version d'acrobat [ par j_lamia ] Bonjourj'ai fait une application dans la quelle j'affiche un fichier pdf dans une form, pour cela j'ai utilisé pdf.ocx, installé avec ma version 6 d'a Tableau Dynamique [ par hedi_tounsi ] Coment on peu afficher un tableau dynamique c a d que le nombre de lignes et le nombre de colones change en fonction des paramétres? et es ce qu'on pe Sécurité tabControl [ par steph701 ] Salut à tous!J'utilise un tabControl avec 4 onglets. J'aimerais bloquer l'accès au tabPage de deux des onglets à l'aide d'un systeme de boite de dialo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales