Size: 3777
Comment:
|
Size: 4532
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
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. | A partire da un certo oggetto (istanza di una classe) chiamato root_instance, che viene specificato al momento dell'avvio del {{{MicroTCPServer}}} e dei {{{MicroUDPServer}}} (un UDP per ogni scheda di rete), 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. |
Line 43: | Line 43: |
Invece il {{{BcastClient}}} viene istanziato e memorizzato sull'attributo {{{broadcast}}} dell'oggetto {{{Radar}}}. <<BR>> Oppure si può istanziare un {{{BcastClient}}} all'abbisogna. Quindi sul codice si trovano pezzi simili a questo: <<BR>> {{{ self.broadcast.radar.reply(...)}}} <<BR>> '''{{{self.broadcast}}}''' è un oggetto {{{BcastClient}}} attraverso il quale si esegue una chiamata RPC ''in broadcast''. La root_instance (su tutti gli host Netsukuku della LAN) è l'oggetto {{{NtkNode}}}, il quale ha un attributo '''{{{radar}}}''' che è una istanza della classe {{{Radar}}}. La classe {{{Radar}}} ha la funzione remotable '''{{{reply}}}'''. La chiamata quindi risulta corretta. |
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 e dei MicroUDPServer (un UDP per ogni scheda di rete), 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.
Invece il BcastClient viene istanziato e memorizzato sull'attributo broadcast dell'oggetto Radar.
Oppure si può istanziare un BcastClient all'abbisogna.
Quindi sul codice si trovano pezzi simili a questo:
self.broadcast.radar.reply(...)
self.broadcast è un oggetto BcastClient attraverso il quale si esegue una chiamata RPC in broadcast. La root_instance (su tutti gli host Netsukuku della LAN) è l'oggetto NtkNode, il quale ha un attributo radar che è una istanza della classe Radar. La classe Radar ha la funzione remotable reply. 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