Size: 832
Comment:
|
Size: 1455
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 5: | Line 5: |
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, viene eseguita la [[../GnodesSplit|funzione gnodes_split]] == vecchio == |
La microfunc communicating_vessels
TODO Rivisitare la funzione e dettagliare
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, viene eseguita la funzione gnodes_split
vecchio
Questo metodo della classe Hook, 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 (usando un TCPClient, vedi il modulo RPC) quanti nodi liberi hanno (vedi il metodo free_nodes_nb(0) della classe MapRoute tra le funzioni "remotable" che da il numero di nodi liberi di livello 0) e se stanno più stretti del nostro gnodo attiva la microfunc hook. In caso contrario (stanno più larghi) invita l'altro nodo a fare il communicating_vessels.