Pregunta

Yo uso por debajo de código para enviar mensajes.

 // Assume we've created an XMPPConnection name "connection".
ChatManager chatmanager = connection.getChatManager();
Chat newChat = chatmanager.createChat("jsmith@jivesoftware.com", new MessageListener() {
    public void processMessage(Chat chat, Message message) {
        System.out.println("Received message: " + message);
    }
});

try {
    newChat.sendMessage("Howdy!");
}
catch (XMPPException e) {
    System.out.println("Error Delivering block");
}

Y a continuación para recibir mensajes enviados a mi jabberId, de forma asíncrona.

// Create a packet filter to listen for new messages from a particular
// user. We use an AndFilter to combine two other filters.
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), 
        new FromContainsFilter("mary@jivesoftware.com"));
// Assume we've created an XMPPConnection name "connection".

// First, register a packet collector using the filter we created.
PacketCollector myCollector = connection.createPacketCollector(filter);
// Normally, you'd do something with the collector, like wait for new packets.

// Next, create a packet listener. We use an anonymous inner class for brevity.
PacketListener myListener = new PacketListener() {
        public void processPacket(Packet packet) {
            // Do something with the incoming packet here.
        }
    };
// Register the listener.
connection.addPacketListener(myListener, filter);

enviando el mensaje está bien.

Sin embargo, la recepción de mensajes de otro jabberId no achived hasta que envíe un mensaje a ese jabberId.

Y después de que recibo mensajes enviados por él adecuadamente.

Tenga en cuenta que a menudo necesito para recibir mensajes de jabberIDs que no están en mi lista y, a menudo Mi solicitud no es el lado que comienza una charla.

códigos superiores son muestras tortazo, pero mi código es completamente igual, excepto que no se crea en línea PacketListener aplicación.

¿Fue útil?

Solución

Mi problema resuelto cuando se dejó de usar Jabber Client con el mismo usuario durante logined pongo a prueba mi programa. En otras palabras código es correcto, pero las capturas cliente Jabber envió mensajes y que no queden cosas para mi programa de captura.

Otros consejos

Ha sido bastante tiempo desde que trabajé con el golpe, pero me las arreglé para iniciar chats basados ??en los mensajes entrantes.

Si recuerdo bien, tenía una especie de "ChatRegistry", un Map<String, Chat> sencillo en el que la clave era igual a la socios de la charla ID. Entonces escuché los mensajes entrantes, extraje el Jabber ID y busqué una sesión de charla con esta pareja. Si no había una sesión activa, he creado un nuevo chat y añadido el nuevo par clave / valle en el registro.

Sólo un poco confundido. Usted dice

  

códigos superiores son muestras tortazo, pero mi código es completamente igual, excepto que no se crea en línea PacketListener aplicación.

¿Cómo recibe mensajes sin tener una implementación PacketListener? Me gustaría pensar que siempre recibirá los mensajes de los chats que comenzó a causa de la siguiente código

  

Chat en newChat = chatmanager.createChat ( "jsmith@jivesoftware.com", nueva MessageListener () {       procesarMensaje public void (Chat, mensajes Mensaje) {           System.out.println ( "mensaje recibido:" + mensaje);       }   });

Sin embargo, con el fin de esperar de forma asíncrona para los mensajes entrantes, yo creo que se necesita un PacketListener. Podría haber malinterpretado por completo el problema que se enfrentan, aunque

(Esto debería haber sido un comentario, pero no puedo cifra cómo agregar uno)

Ha sido un tiempo, se las arregló para resolver esto? ¿por qué estás creando FromContainsFilter? De esta manera, los procesos de sus oyentes sólo los paquetes del usuario dado, no todos los paquetes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top