La microfunc communicating_vessels

Questa funzione può essere richiamata localmente dall'evento ETP_EXECUTED, oppure da remoto. Se viene chiamata localmente dall'evento ETP_EXECUTED significa che la mappa locale è cambiata, riceve nei parametri old_node_nb e cur_node_nb i valori vecchio e corrente del numero di nodi occupati nella mappa per ogni livello. Se è chiamata da remoto non riceve i parametri old_node_nb e cur_node_nb, perché la sua mappa non è cambiata.

Se viene richiamata per via di un cambiamento nella mappa locale:

Di seguito trova i candidati tra la lista dei vicini (vedi la classe Neighbour nel modulo Radar il relativo metodo neigh_list) selezionando solo quelli di un altro gnodo.
Da questi nodi si informa quanti nodi liberi hanno (vedi il metodo remotable free_nodes_nb(0) della classe Map che da il numero di nodi liberi di livello 0).
I vicini esterni (=quelli di un altro gnodo) che hanno più spazi liberi nel livello 0 di quanti ne abbiamo noi + 1 (come descritto nel documento topology.pdf) sono candidati ad un nostro hook. Quelli che hanno meno spazi liberi di quanti ne abbiamo noi - 1 sono candidati a dover eseguire loro la communicating_vessels.
Fra i candidati all'una e all'altra cosa prendiamo in esame solo quelli col divario maggiore.

Sul miglior candidato ad eseguire la communicating_vessels viene richiamata tale funzione remotable. Senza parametri.
Sul miglior candidato al nostro hook, attiviamo la microfunc hook. Per la precisione, come lista dei vicini da esaminare viene passata la lista dei candidati, nessuno escluso, viene richiesto il controllo della condizione con gnumb=il numero di nodi liberi nel miglior candidato. Questa condizione sarà usata nella comunicazione con il coordinator node per evitare che avvengano contemporaneamente più rehook di quanti sia lecito.