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,
codig veio cortado =(
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.
Valeu! Me poupou várias horas de trabalho!
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)