Panda3D e Broadcast

Tempo fa avevo cercato di creare la parte di networking per un videogioco che utilizza il motore Panda3D.

I giochi hanno bisogno di aggiornare velocissimamente le posizioni degli altri giocatori e tutti gli altri dati, perciò si usa UDP, un protocollo che è molto più veloce del TCP perché non fa controlli per vedere se sono arrivati i dati (e perciò è anche meno affidabile, ma non importa per un videogioco).

Una delle caratteristiche più belle di UDP è anche quella di poter fare il “broadcasting” di rete, ovvero mandare a tutti i client di una rete un pacchetto in una certa porta. Questa caratteristica può essere usata per esempio per fare la lista dei server a cui connettersi.

Panda3D teoricamente offre una funzione chiamata set_broadcast nella classe NetAddress, però non funziona, né in Python, né in C++. O almeno, non da sola.

In Python alla fine avevo lasciato perdere, però in C++ invece volevo sistemarla. Non riuscivo proprio a capire come fare, così ho cercato e ho visto che in generale bisogna dire al sistema operativo che la socket deve poter eseguire il broadcast.

Il set_broadcast sembra poterlo fare, ma se in realtà guardiamo il codice è solo una scorciatoia per inserire come indirizzo IP 255.255.255.255 necessario per fare appunto il broadcast ma non sufficiente.

Spulciando un po’ il codice ho trovato che serve abilitare il broadcast alla socket. Ed ecco come fare.

Quando creiamo la socket dal manager, otteniamo un puntatore alla connessione. Un metodo di quest’istanza è il get_socket, che normalmente restituirebbe un’istanza di Socket_IP, tuttavia questa classe non ha il metodo che ci serve. Allora dobbiamo “trasformarla” in una Socket_UDP, tramite il casting. Allora in quella possiamo chiamare il SetToBroadCast() e per magia il tutto funzionerà.

Tradotto in codice 😉 :

	Socket_UDP * sock = (Socket_UDP *)connection->get_socket();
	sock->SetToBroadCast();

connection è la connessione creata tramite il QueuedConnectionManager.

Una volta aggiunto questo come per magia il tutto funzionerà 😊

Marzo

Sono felice, finalmente l’inverno sta passando e sta arrivando la primavera.

Ieri nel primo pomeriggio ho fatto una passeggiata in mezzo alla natura ed ero proprio felice.

Niente visioni e suoni umani, solo io, il mio gatto che mi ha accompagnato ed alberi che sono ancora spogli ma sono pronti ad accogliere vita nuova.

Mi sono sentito bene come non mi sentivo da un po’. I problemi dell’impegnata vita quotidiana li ho lasciati in casa. Mi sono goduto il tepore sulle ossa e l’affetto che solo gli animali possono dare.

Questa è la magia di Marzo. Un consiglio? Godetevela un po’ anche voi.

Plugin RewriteURLs (v2.3.2) [Flatpress]

English

Hi, I’ve corrected another small bug of the RewriteURLs plugin.

It didn’t handle correctly the feed of comments.

License: GNU GPL v2

Download

Italiano

Ho corretto un altro piccolo bug del plugin RewriteURLs.

Non prendeva i feed dei commenti.

Licenza: GNU GPLv2

Download