Domanda

Io uso il codice qui sotto per inviare messaggi.

 // 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");
}

E sotto per la ricezione di messaggi inviati al mio JabberID, in modo asincrono.

// 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);

L'invio di un messaggio è ok.

Ma la ricezione di un messaggio da un altro JabberID non achived fino a quando mando un messaggio a quel JabberID.

E dopo che ricevo i messaggi inviati da essa in modo corretto.

Si noti che ho spesso bisogno di ricevere messaggi da jabberIDs che non sono nella mia lista e spesso mia applicazione non è il lato che inizia una chat.

codici superiori sono campioni schiaffo, ma il mio codice è completamente stesso, tranne io non creo PacketListener implementazione in linea.

È stato utile?

Soluzione

Il mio problema risolto quando ho smesso di usare client Jabber con lo stesso utente logined durante la prima prova il mio programma. In altre parole, il codice è corretto, ma Jabber catture client messaggi inviati e rimanere non le cose per il mio programma per la cattura.

Altri suggerimenti

E 'passato un bel po' che ho lavorato con schiaffo, ma sono riuscito a iniziare le chat basata su messaggi in arrivo.

Se non ricordo male, ho avuto una sorta di "ChatRegistry", un semplice Map<String, Chat> dove la chiave è stata pari alla chat partner id. Poi ho ascoltato i messaggi in arrivo, estratto il Jabber ID e guardato la sessione di chat attiva con questo partner. Se non ci fosse una sessione attiva, ho creato una nuova chat e ha aggiunto la nuova coppia di chiavi / Vale al Registro di sistema.

Solo un po 'confuso. Dici

  

codici superiori sono campioni schiaffo, ma il mio codice è completamente stesso, tranne io non creo PacketListener implementazione in linea.

Come si fa a ricevere messaggi senza avere un'implementazione PacketListener? Vorrei pensare che si sarebbe sempre ricevere messaggi da chat è stato avviato a causa del codice seguente

  

Chat newChat = chatmanager.createChat ( "jsmith@jivesoftware.com", nuova MessageListener () {       ProcessMessage public void (Chat Chat, Message message) {           System.out.println ( "Messaggio ricevuto:" + messaggio);       }   });

Ma al fine di attendere in modo asincrono per i messaggi in arrivo, penserei avrete bisogno di un PacketListener. Avrei potuto totalmente frainteso il problema si sta affrontando anche se

(Questo avrebbe dovuto essere un commento, ma non posso figura come aggiungere uno)

E 'stato un po', siete riusciti a risolvere questo problema? perché stai creando FromContainsFilter? In questo modo, i vostri ascoltatori processi solo i pacchetti provenienti da un determinato utente, non tutti i pacchetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top