= Come viene usato il modulo RPC in Netsukuku =
== Dove vengono istanziati e usati i servers e i clients ==
I server TCP e UDP vengono avviati in microthreads (vedi il [[../ModuloMicro|modulo micro]]). Questi microthread vengono lanciati nel metodo {{{initialize}}} della [[../ClasseNtkNode|classe NtkNode]] (vedi la [[../NtkNodeStartup|fase di startup]] di un nodo).
<
>
Esistono però dei metodi per ri-avviare questi server ({{{rpc.stop_tcp_servers}}} e {{{rpc.stop_udp_servers}}}) rinnovando i socket, necessario se i socket diventano invalidi (ad esempio per cambio IP).
Il {{{TCPClient}}} viene istanziato nei metodi ''{{{store}}}'' e ''{{{ip_change}}}'' della classe {{{Neighbour}}}. In questi metodi infatti l'host corrente apprende dell'esistenza '''di un certo IP nella sua LAN'''. Il {{{TCPClient}}} creato viene memorizzato nell'attributo ''{{{ntk_client[}}}''{{{ip}}}''{{{]}}}'' (che è un dict) della classe {{{Neighbour}}}.
<
>
Inoltre viene memorizzato nell'attributo ''{{{ntkd}}}'' dell'oggetto {{{Neigh}}} ogni volta che se ne istanzia uno.
<
>
Gli oggetti {{{Neigh}}} si istanziano per memorizzarli nella ''{{{ip_table}}}'' della classe {{{Neighbour}}}, per emettere degli eventi, per passarli a metodi, ecc. Va notato però che gli oggetti memorizzati nella {{{ip_table}}} non hanno valorizzato il membro {{{ntkd}}}.
<
>
Va notato che un TCPClient crea il suo socket in fase di connessione, e non ripete questa operazione se non viene prima chiusa la connessione ({{{TCPClient.close}}}). Di norma non chiude la connessione alla fine di una richiesta, ma esiste un metodo di {{{Neighbour}}} ({{{reset_ntk_clients}}}) per chiudere tutte le connessioni rimaste aperte e quindi rinnovare tutti i socket.
Varie istanze del {{{BcastClient}}} vengono create. Alcune per '''mandare richieste''' UDP, altre per inviare le '''relative risposte'''.
<
>
Una istanza viene creata e gestita dalla classe Radar per l'invio di richieste di radar scan.
<
>
Altre istanze vengono create e usate una tantum in altri metodi per inviare richieste in altre occasioni, come per richiamare il metodo {{{highest_free_nodes}}} nella fase di hooking.
<
>
Altre istanze vengono create e usate una tantum per inviare le risposte a richieste fatte via UDP.
L'istanza di {{{BcastClient}}} del radar viene creata una volta per tutte nel costruttore della [[../ClasseNtkNode|classe NtkNode]] (vedi il [[../ModuloAvvioNtkd|modulo di avvio ntkd]]) e viene associato a tutte le interfacce di rete gestite da Netsukuku. Questa istanza viene passata alla classe Radar che se ne servirà per inviare messaggi in broadcast '''a tutta la sua LAN''', per la gestione del vicinato (vedi anche [[../FunzionamentoDelRadar|Funzionamento del Radar]])
<
>
Esiste però un metodo per rinnovare il socket di un {{{BcastClient}}}, è il metodo {{{BcastClient.reset}}}. Questo viene chiamato dal radar nel suo metodo {{{Radar.radar_reset}}}. Quest'ultimo viene eseguito alla fine di ogni radar scan, e anche come risposta all'evento {{{HOOKED}}} dopo la fase di [[../MicrofuncHook|hooking]].
== Quali chiamate RPC vengono fatte ==
Vedi le [[../ElencoRemotableFunctions|funzioni remotable]].