Remotable Functions
Sono le funzioni (metodi) richiamabili attraverso il meccanismo RPC (vedi il modulo RPC).
Si può specificare quali metodi di una certa classe sono remotable.
A partire da un certo oggetto (istanza di una classe) chiamato root_instance, che viene specificato al momento dell'avvio del MicroTCPServer o MicroUDPServer, tutti i suoi attributi si possono "accedere" da remoto. E per ogni attributo che contiene un oggetto, di nuovo tutti i suoi attributi si possono "accedere" da remoto.
Dicendo che "si può accedere" si intende che si possono richiamare i suoi metodi.
Bisogna poi vedere quali di questi metodi si possono veramente richiamare. Questo si controlla appunto specificando quali metodi di una data classe sono remotable.
Oggetto radice e suoi attributi
La root_instance fornita dal demone di Netsukuku è l'unica istanza della classe NtkNode.
Tra i suoi attributi sono:
self.radar = radar.Radar(...)
self.neighbour = self.radar.neigh
self.maproute = maproute.MapRoute(...)
self.etp = qspn.Etp(...)
self.p2p = p2p.P2PAll(...)
self.coordnode = coord.Coord(...)
self.hook = hook.Hook(...)
In particolare l'attributo p2p è un oggetto P2PAll. Questo ha un numero dinamico di attributi interessanti, perché richiamando un suo attributo con nome PID_n (dove n è un qualsiasi intero) si ottiene un oggetto della classe P2P.
I TCPClient sono memorizzati sull'attributo ntkd dell'oggetto Neigh.
Gli oggetti Neigh si passano insieme agli eventi NEIGH_NEW, NEIGH_REM_CHGED, NEIGH_DELETED oppure si richiedono alla istanza locale di Neighbour con il metodo neigh_list.
Quindi sul codice si trovano pezzi simili a questo:
neigh.ntkd.etp.etp_exec(...)
neigh è un oggetto Neigh ricevuto attraverso un evento. Attraverso l'attributo ntkd esegue una chiamata RPC. La root_instance (sull'host remoto) è l'oggetto NtkNode, il quale ha un attributo etp che è una istanza della classe Etp. La classe Etp ha la funzione remotable etp_exec. La chiamata quindi risulta corretta.
Altro esempio potrebbe essere:
n.ntkd.p2p.PID_12.msg_send(...)
n è un oggetto Neigh richiesto alla istanza locale di Neighbour. Attraverso l'attributo ntkd esegue una chiamata RPC. La root_instance (sull'host remoto) è l'oggetto NtkNode, il quale ha un attributo p2p che è una istanza della classe P2PAll. La classe P2PAll ha un attributo (dinamico) PID_12 che è una istanza della classe P2P. La classe P2P ha la funzione remotable msg_send. La chiamata quindi risulta corretta.
Elenco delle funzioni remotable
Modulo radar
class Radar(object)
reply
time_register
class Neighbour(object)
ip_change
class MapRoute(Map)
free_nodes_nb
Modulo qspn
class Etp
etp_exec
Modulo hook
class Hook(object)
communicating_vessels
highest_free_nodes
Modulo p2p
class P2P(RPCDispatcher)
partecipant_add
msg_send
class P2PAll(object)
pid_getall
Modulo coord
class MapCache(Map)
map_data_merge
class Coord(P2P)
going_out
going_out_ok
going_in