Frage

ich Code unten verwenden, um Nachrichten zu senden.

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

Und unten für Nachrichten, die an meinem JabberID Empfang asynchron.

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

Nachricht Senden ist in Ordnung.

Aber empfangen Nachricht von einem anderen JabberID nicht achived, bis ich eine Nachricht an, dass JabberID.

senden

Und danach habe ich den Empfang von Nachrichten, indem sie es richtig gesendet.

Beachten Sie, dass ich muß oft Nachrichten von jabberIDs erhalten, die nicht in meiner Liste ist und oft Meine Anwendung ist nicht die Seite, die einen Chat beginnt.

Ober Codes sind Klaps Proben, aber mein Code ist völlig gleich, außer ich PacketListener Implementierung inline nicht erstellen.

War es hilfreich?

Lösung

Mein Problem ist gelöst, wenn ich mit gestoppt Jabber-Client mit dem gleichen Benutzer logined während ich mein Programm testen. Mit anderen Worten Code ist richtig, aber Jabber-Client Fänge gesendeten Nachrichten und bleiben keine Dinge für mein Programm zu fangen.

Andere Tipps

Es ist schon eine ganze Weile her, seit ich mit schmatzen gearbeitet, aber ich schaffte es Chats zu starten, basierend auf eingehende Nachrichten.

Wenn ich mich recht erinnere, hatte ich eine Art „ChatRegistry“, einen einfachen Map<String, Chat> wo der Schlüssel für den Chat-Partner-ID gleich war. Dann hörte ich auf eingehende Nachrichten, extrahierte die Jabber-ID und sah die aktive Chat-Sitzung mit diesem Partner auf. Wenn es nicht eine aktive Sitzung war, habe ich ein neues Chat und hinzugefügt, um den neuen Schlüssel / vale Paar in der Registrierung.

Nur ein bisschen verwirrt. Sie sagen,

  

Ober Codes sind Klaps Proben, aber mein Code ist völlig gleich, außer ich PacketListener Implementierung inline nicht erstellen.

Wie erhalten Sie Nachrichten ohne eine PacketListener Implementierung zu haben? Ich würde denken, dass Sie immer Nachrichten von Chats erhalten würden Sie begannen wegen des Code unten

  

Chat newChat = chatmanager.createChat ( "jsmith@jivesoftware.com", neue Message () {       public void process (Chat Chat, Messaging-Nachricht) {           System.out.println ( "Empfangene Nachricht:" + message);       }   });

Um aber für eingehende Nachrichten asynchron zu warten, würde ich denken, dass Sie eine PacketListener benötigen. Ich könnte völlig falsch verstanden haben das Problem, das Sie allerdings stehen vor

(Dies soll ein Kommentar gewesen, aber ich kann nicht verstehen, wie man hinzufügen)

Es ist schon eine Weile, haben Sie es geschafft, diese zu lösen? warum schaffen Sie FromContainsFilter? Auf diese Weise Ihre Zuhörer Prozesse nur Pakete, die von den jeweiligen Benutzer nicht alle Pakete.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top