Poster une réponse  Créer un sujet 
Faire un script qui se désinstalle proprement
Auteur Message
MenzAgitat
Moderator ou à raison
*****


Messages : 520
Groupe : Moderators
Inscription : Jul 2007
Statut : Hors ligne
Message : #1
Faire un script qui se désinstalle proprement

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 :

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} {
   ...
}


toute l'actualité de mes scripts ici     (dernière mise à jour le 21/04/2012)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction. De quoi par implication, on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.

Ce message a été modifié le: 08/08/2008 13:13 par MenzAgitat.

08/08/2008 13:01
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
MenzAgitat
Moderator ou à raison
*****


Messages : 520
Groupe : Moderators
Inscription : Jul 2007
Statut : Hors ligne
Message : #2
RE: Faire un script qui se désinstalle proprement

L'idée d'un désinstalleur universel est intéressante mais avec ton exemple, ça ne fonctionnera pas si les binds comportent un namespace avec un chemin absolu ( donc commençant par :: ), ni avec des binds comportant des { }.
Je réfléchis à des solutions et je vous tiens au courant (ou si Artix veut pousser jusqu'au bout son idée il est le bienvenu Wink ).


toute l'actualité de mes scripts ici     (dernière mise à jour le 21/04/2012)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction. De quoi par implication, on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.

Ce message a été modifié le: 16/04/2009 13:15 par MenzAgitat.

16/04/2009 13:12
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Merwin
Tcl Coder
***


Messages : 145
Groupe : Registered
Inscription : Jun 2008
Statut : Hors ligne
Message : #3
RE: Faire un script qui se désinstalle proprement

Bah on peut simplement utiliser [namespace current] pour trouver le namespace puisque de toute évidance la procédure unsinstall sera dedans.

16/04/2009 19:50
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Artix
Boulet qu'a tort
*****


Messages : 117
Groupe : Moderators
Inscription : Jan 2009
Statut : Hors ligne
Message : #4
RE: Faire un script qui se désinstalle proprement

Desinstaller les timers
... est en fait super simple:

Il suffit de rajouter un commentaire après chaque timer créé (genre, ;#SCRIPT:Monscript)
Ensuite de tous les dégager dans la procédure de désinstallation :

TCL :
foreach currentTimer [lsearch -inline -index 1 -glob [timers] "*;#SCRIPT:Monscript"] {
catch { killtimer [lindex $currentTimer 2] }
}

02/09/2009 10:53
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse  Créer un sujet 

Discussions probablement similaires...
Discussion: Auteur Réponses: Affichages: Dernier message
  [Tuto] Coder proprement un script en TCL Mareo 10 1,325 08/12/2010 14:35
Dernier message: aliassangelius

Voir une version imprimable
Envoyer ce sujet à un ami
S'abonner au sujet | Ajouter le sujet aux favoris

Aller à :