spark realtime library igniterealtime for xmpp smack

realtime - ¿Cómo recibir mensajes entrantes de XMPP usando Smack?



spark openfire (4)

Debe registrar un ChatListener para recibir notificaciones de nuevos chats, luego puede agregar un mensaje de escucha a ellos como de costumbre:

connection.getChatManager().addChatListener(new ChatManagerListenerImpl()); .... private class ChatManagerListenerImpl implements ChatManagerListener { /** {@inheritDoc} */ @Override public void chatCreated(final Chat chat, final boolean createdLocally) { chat.addMessageListener(...); } }

Leí algunos ejemplos y los probé, pero todos ellos necesitan iniciar un chat con alguien primero para recibir Mensajes entrantes ... ¿Quiero recuperar estos Mensajes entrantes sin necesidad de hablar primero con el jid? ¿Alguien puede dar un ejemplo?


Solo quería añadir una copia y pegar una muestra:

// connect to server XMPPConnection connection = new XMPPConnection("jabber.org"); connection.connect(); connection.login("user", "password"); // TODO: change user and pass // register listeners ChatManager chatmanager = connection.getChatManager(); connection.getChatManager().addChatListener(new ChatManagerListener() { public void chatCreated(final Chat chat, final boolean createdLocally) { chat.addMessageListener(new MessageListener() { public void processMessage(Chat chat, Message message) { System.out.println("Received message: " + (message != null ? message.getBody() : "NULL")); } }); } }); // idle for 20 seconds final long start = System.nanoTime(); while ((System.nanoTime() - start) / 1000000 < 20000) // do for 20 seconds { Thread.sleep(500); } connection.disconnect();

Este ejemplo se conecta a jabber.org y muestra todos los mensajes recibidos en la consola.


Por favor encuentre el siguiente código.
Añada smack.jar & smackx.jar a su ruta de compilación

import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.PacketCollector; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.filter.PacketTypeFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; public class GoogleTalkDemo extends Thread{ private XMPPConnection xmppConnection; public void connect(String server, int port, String s) throws Exception { xmppConnection = new XMPPConnection(new ConnectionConfiguration(server, port,s)); xmppConnection.connect(); } public void disconnect(){ if(xmppConnection != null){ xmppConnection.disconnect(); interrupt(); } } public void login(String username, String password) throws Exception{ connect("talk.google.com", 5222, "gmail.com"); xmppConnection.login(username, password); } public void run(){ try { login("[email protected]", "your password"); System.out.println("Login successful"); listeningForMessages(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String args[]) throws Exception { GoogleTalkDemo gtd = new GoogleTalkDemo(); gtd.run(); } public void listeningForMessages() { PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class)); PacketCollector collector = xmppConnection.createPacketCollector(filter); while (true) { Packet packet = collector.nextResult(); if (packet instanceof Message) { Message message = (Message) packet; if (message != null && message.getBody() != null) System.out.println("Received message from " + packet.getFrom() + " : " + (message != null ? message.getBody() : "NULL")); } } } }


private MultiUserChat muc; /* Initialize muc */ private void listeningForMessages() { muc.addMessageListener(new PacketListener() { public void processPacket(Packet packet) { final Message message = (Message) packet; // Do your action with the message } }); }