GTalk no Java!!!

22 06 2007

Estudando a viabilidade de inserir um IM em um projeto, fui procurar bibliotecas para XMPP (Jabber) em Java. Como o GTalk usa o protocolo XMPP, então meu esperimento era implementar um programinha que recuperasse a lista de usuários de um usuário do GTalk, para mostrar se era fácil de mexer nisso.

Como resultado da procura, encontrei a Smack API. É uma biblioteca que implementa o XMPP em java, inclusive sem ter de tratar as coisas no baixo nível. Existem classes para abstração de Chat, e muito mais.

O código segue abaixo:

/*
 * ListUsers.java
 *
 * Created on 22 de Junho de 2007, 12:52
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.cefetpe.chat.gui;

import java.util.Collection;
import java.util.Scanner;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;

/**
 *
 * @author LENDES
 */
public class ListUsers {

    /** Creates a new instance of ListUsers */
    public ListUsers() {
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Digite seu usuário do GMail (sem o @gmail.com) e pressione enter:");
        String user = scan.nextLine();
        System.out.println("Digite sua senha: ");
        String pass = scan.nextLine();
        ConnectionConfiguration config = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
        config.setSASLAuthenticationEnabled(true);
        config.setReconnectionAllowed(true);
        XMPPConnection connection = new XMPPConnection(config);
        try{
            connection.connect();
            System.out.println("Conectou Bem!!");
            System.out.println("n Usando o Login: " + user);
            connection.login(user, pass);
            Presence presence = new Presence(Presence.Type.available);
            connection.sendPacket(presence);
            System.out.println("n Logou Direitinho!!!");
            Roster roster = connection.getRoster();
            Collection<RosterEntry> entries = roster.getEntries();
            for (RosterEntry entry : entries) {
                System.out.println(' ' + entry.getName() + 't' + entry.getStatus() + 'n');
            }

            connection.disconnect();
            System.out.println("Disconectado Ok!");
        } catch(XMPPException xe) {
            xe.printStackTrace();
            System.out.println("n Mas Fez Caquinha!!!!");
        }
    }
}

Observação importante: Não use a versão de release, a 3.0.3. Há um bug no método login. Use no entanto a 3.0.4 beta1, que não tem esse problema.

Abraços,


Ações

Informações

4 respostas

3 08 2007
mmenezes

codig veio cortado =(

3 08 2007
fabiocesar

tah cortado só na exibição, por conta do template do site
Mas se vc copiar o texto todo, vem o código completo, ok?

Qualquer problema, entra em contato q eu te passo o código todo.

6 09 2007
rafael

Valeu! Me poupou várias horas de trabalho!

7 09 2007
Rafael Santos

Obrigado!
Também agilizou muito meu trabalho!

Baseado no seu trabalho e em outros, também fiz um tutorial, que cria um bot que fica online recebendo e enviando mensagens.

http://blogdotopera.blogspot.com/2007/09/bot-para-gtalk-em-java.html

Valeu!
Topera (Rafael Pereira dos Santos)

Deixe um comentário