08/08/2008, 14:01
(Modification du message : 08/08/2008, 14:13 par MenzAgitat.)
En tout premier lieu et afin de comprendre la suite, vous devriez vous familiariser avec le concept des namespaces.
Fonctionnement :
La procédure de désinstallation est automatiquement appelée si un .rehash est demandé.
Les binds du script sont supprimés, le namespace est détruit et toutes les ressources utilisées par le script sont ainsi libérées, ne laissant aucune trace.
Cela permet de modifier les binds de son script ou de renommer une procédure sans avoir besoin de .restart ensuite (un simple .rehash suffit), de désinstaller totalement un script sans nécessiter de .restart après qu'on l'ait enlevé du démarrage automatique dans eggdrop.conf, de travailler sur un script en cours de développement en s'assurant qu'aucune trace conflictuelle ne reste lorsque vous appliquez vos modifications avec .rehash.
Modèle :
Fonctionnement :
La procédure de désinstallation est automatiquement appelée si un .rehash est demandé.
Les binds du script sont supprimés, le namespace est détruit et toutes les ressources utilisées par le script sont ainsi libérées, ne laissant aucune trace.
Cela permet de modifier les binds de son script ou de renommer une procédure sans avoir besoin de .restart ensuite (un simple .rehash suffit), de désinstaller totalement un script sans nécessiter de .restart après qu'on l'ait enlevé du démarrage automatique dans eggdrop.conf, de travailler sur un script en cours de développement en s'assurant qu'aucune trace conflictuelle ne reste lorsque vous appliquez vos modifications avec .rehash.
Modèle :
tcl
if {[info commands NomDuNamespace::uninstall] eq "::NomDuNamespace::uninstall"} { NomDuNamespace::uninstall }
namespace eval NomDuNamespace {
# binds divers (pour l'exemple)
bind pub -|- !commande1 NomDuNamespace::pub_commande1
bind pub -|- !commande2 NomDuNamespace::pub_commande2
# bind de désinstallation (important)
bind evnt - prerehash NomDuNamespace::uninstall
# procédure de désinstallation
proc uninstall {args} {
putlog "Désallocation des ressources de \002NomDuScript...\002"
# on supprime les binds qu'on a créé
unbind pub -|- !commande1 NomDuNamespace::pub_commande1
unbind pub -|- !commande2 NomDuNamespace::pub_commande2
unbind evnt - prerehash NomDuNamespace::uninstall
# on détruit le namespace et tout ce qu'il contient (variables et procédures)
namespace delete ::NomDuNamespace
}
}
# Procédures exemple :
proc NomDuNamespace::pub_commande1 {nick host handle chan arg} {
...
}
proc NomDuNamespace::pub_commande2 {nick host handle chan arg} {
...
}