Collegarsi a Google Talk in Java: Jivesoftware Smack

Vediamo quanto sia semplice collegarsi a GTalk o a qualsiasi altro servizio di IM basato sul protocollo Jabber, utilizzando la libreria Open Source Smack. Scriviamo un piccolo bot che non faccia altro che rispondere a chi gli scrive come un pappagallo.

Smack è una libreria opensource, scritta dalla community Jivesoftware, che permette di scrivere molto semplicemente un client XMPP, protocollo del sistema di chat IM Jabber, sul quale sono basati molti IM conosciuti, fra cui anche Google Talk.

smackQuesta libreria è sia molto potente, sia molto semplice da usare. Si propone infatti come API ad alto livello, ma permette anche di scendere ad un livello piu’ basso, quello del XMPP Packet, per permettere l’implementazione di servizi più complessi di un semplice bot come quello che stiamo per realizzare. Vediamo quanto sia semplice inviare un messaggio:

GoogleTalkConnection è una estensione di XMPPConnection, classe base per la connessione a server Jabber. Il nostro bot non farà altro che inviare un messaggio dal testo identico a quello ricevuto, a chi gli scrive. Non è sicuramente un bot utile, ma puo’ servire come base per altri servizi.

Una volta creata la connessione, è opportuno settare la propria “Presence”, altrimenti il bot rimane nascosto (disconnesso) agli occhi degli altri utenti:

In questo modo il bot è online (AVAILABLE) e il suo status mostra il messaggio “GTalkBot”. Ora dobbiamo essere in grado di ricevere i messaggi e di rispondere a chi ci scrive. La classe Message deriva direttamente da Packet, il pacchetto XMPP, e lo specializza.
Per poter analizzare i pacchetti, bisogna istanziare un PacketCollector, che accumula i pacchetti di una data tipologia a cui possiamo accedere attraverso il metodo bloccante “nextResult()”. La tipologia di messaggio che ci interessa, va settata come PacketFilter. Ma vediamo nel dettaglio la nostra classe “GTalkPacketProcessor”, che estende Thread e si occupa di rispondere a chi ci scrive:

Abbiamo settato come pacchetti “interessanti” quelli di tipo “Message.class”, i messaggi veri e propri quindi. Poi, se tali messaggi sono messaggi di chat (Message.Type.CHAT), abbiamo replicato con lo stesso testo.

In output stampiamo l’XML di ogni messaggio ricevuto, nel formato XMPP. Ovviamente chi ha intenzione di approfondire ulteriormente questo protocollo, farà bene a studiare il formato di tali pacchetti:

Il nostro bot ha già la parola! Basta un po’ di fantasia per trovargli dei compiti da eseguire, in modo da comandarlo da remoto!

Potete scaricare la libreria e la relativa documentazione dal sito:
igniterealtime.org

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *