Des noeuds capteurs peuvent tomber en panne, à cause de l'épuisement de leur batterie, ou à cause d'une destruction physique. De nouveaux noeuds capteurs peuvent être déployés pour renforcer la densité du réseau. Pour tenir compte de ces phénomène et éliminer les noeuds en pannes de l'arbre et inclure les nouveaux noeuds dans l'arbre, il est nécessaires de relancer périodiquement la construction de l'arbre.
Pour éliminer le problème des boucles, on avait utilisé un booléen pour savoir si le noeud a été déjà visité ou pas. Si on veut relancer la construction périodiquement il faut introduire un mécanisme pour savoir s'il s'agit d'une ancienne requête ou d'une nouvelle requête de reconstruction qu'il ne faudrait pas ignorer.
Une solution simple serait de remplacer ce booléen par un numéro séquentiel de la requête de reconstruction de l'arbre.
Si le numéro de la requête reçus par un noeud est inférieur ou égal au numéro séquentiel actuel (qui doit être sauvegardé au niveau du noeud), alors ignrer cette requête pour éviter les boucles. Sinon, traiter la requête comme une nouvelle requête de reconstruction de l'arbre.
Afin de relancer la construction de l'arbre périodiquement, le noeuds puis (sink) doit relancer la tâche sendInitTreeReq() périodiquement après un délai fixe.
Pour cela, nous aurons besoin d'utiliser un deuxième Timer.
Rajouter dans TreeBuilderM.nc le fait que TreeBuilderM utilise une deuxième interface Timer avec un autre alias (par exemple RoundTimer)
Rajouter dans HTC.nc la liaison entre TreeBuilderM et cette deuxième instance de TimerC
Mettre à jours TreeBuilderM pour relancer périodiquement la construction de l'arbre.
Recompiler puis relancer l'exécution de HTC.