Plugin systeme dans un TCL
#1
Yo!

Voila, j'ai une script TCL pondu de ma culotte !

J'aimerais intégrer un répertoire Plugins/ dedans

Ces plugins seront un plus au codes déjà proposer (le but d'un plug?)

J'aimerais vos avis comment crée un gestionnaire de plugins!

Hook des fonctions existante, ajouts nouveau codes, comment validé les plugins, comment les charger quel vérifications à faire , comment faire un vrai gestionnaire de plugins ? http://fr.wikipedia.org/wiki/Hook_%28informatique%29 / http://fr.wikipedia.org/wiki/Plugins

A vos marques ... PARTEZ !

Pour mes idées de bases :
- Ce doit contenir un namespace du sous projet, avec ::plugin::LePlug (Projet::plugin::LePlug)
- Ce doit être contenue dans le sous répertoire Plugins/ du projet
- ce doit d'avoir l extension .XX?, finissant par P comme .XXP = P comme plugins et XX un nom court du projet, afin que depuis l extension nous sachons que c'est le plug'ins de celui ci (ce projet)
- Ce doit de respecté a des formes d'uninstall (afin des propres) (un load les bind, les namespace)
- autres idées de contrôle/obligation?

Pour moi sa en fais un sujet important, je trouve la question intéressante, et j’espère trouvé à la lecture des choses intéressante!

Vous connaissez des scripts TCL qui gère des plug'ins ? avez vous leurs noms ? vous connaissait leur fonctionnement, si oui une explication svp?

LA la a vos marques ... PARTEZ ! :]
Répondre Avertir
#2
salut,

tcl gère déjà les librairies avec la commande "package". je ne vois pas trop l’intérêt de ton poste
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#3
Music 
djkenny a écrit :tcl gère déjà les librairies avec la commande "package". je ne vois pas trop l’intérêt de ton poste

Oui, c'est vrai! Mais je ne connais peut-être pas toutes les futilités de package

Je connais surtout :
tcl
package require
package provide



Le premier pour demander de charger un package, sans quoi, le code ne demandera pas.
Et le seconds pour fournir un code de package.

Dans mon cas, j'ai un code existant où j'aimerais rajouté/remplacer des procs par ce que j’appelle des plugins.

Je suppose ne pas être le premier à vouloir faire ceci.

Avec package tu pense à quoi?
Répondre Avertir
#4
salut,

par exemple tu crées un dossier lib/ dans lequel tu mets tes plugins
dans ce dossier tu places tes librairies en tcl
tu crées un fichier pkgIndex.tcl qui ressemble a ça
tcl
package ifneeded ton-package 0.1 ton-package.tcl
package ifneeded un-autre 2.3 un-autre.tcl



tu ajoutes ton-package.tcl
surtout n'oublies pas le package provide à la fin du tcl
et dans la config de l'eggdrop ajoutes ça:
tcl
set libpath [file join [pwd] lib]
if {[lsearch $::auto_path $libpath]==-1} {lappend ::auto_path $libpath}


ensuite tu n'auras simplement qu'à charger la lib avec
tcl
package require ton-package 0.1


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#5
Je te remercie de ton idée,

Je vois plusieurs inconvenants toute de même:
Rien déterminer que c'est bien un plug'in a mon soft !
Rien permet de hooks une proc
L'utilisateur doit connaitre le package a avoir et l'avoir, sauf si tout son la, en les settang en ::auto_path

Sauf si je fais erreur:
Ce que j'analyserai au moins la sources avant et je bloquerais le code si il est pas prévu dans libs/ ou comme code additionel au moins

Je cherche peut-être trop loin?

Dans tout les cas déjà merci pour ta réponse!
Au pire des cas, seras le mieux des cas que j'utiliserai ... je trouve bien
Mais ce qui m'agace c'est que sa semble trop 'simple' pour un codeur TCL basic, mais je désire une solution plus pro, porté pour monsieur tout le monde.

Dans d'autres langages le hook/plugin existe alors quel sont les techniques finalement qu'ils utilisent? Et comment appliqué a un code d'appli qui ce désire totalement personnalisable ?
Répondre Avertir
#6
salut,
avec un peut d'ingéniosité il est possible de tout faire avec ma solution,
de même qu'il est possible d'ajouter n'importe quel dossier à auto_path.
en codant correctement ta lib, tu peux remplacer n'importe quelle proc ou même recoder/modifier un namespace
regardes ici
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#7
Merci pour ta réponse,
je trouve Très intéressante le lien!

Une question dans le cas que je veux recoder/modifier tu un proc (d'un namespace), c'est comme renommer une commande ??

tcl
rename proc_orig ""
rename proc_lib proc_orig


Répondre Avertir
#8
il faut utiliser le chemin complet du namespace et je te conseil de garder la proc_orig en la renommant _proc_orig par exemple
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté