سؤال

يمكنني استخدام الرمز أدناه لإرسال الرسائل.

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

وأسفل لتلقي الرسائل المرسلة إلى Jabberid ، بشكل غير متزامن.

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

إرسال الرسالة على ما يرام.

لكن تلقي رسالة من jabberid آخر لم يتم تحقيقها حتى أرسل رسالة إلى Jabberid.

وبعد ذلك أتلقى الرسائل المرسلة من قبلها بشكل صحيح.

لاحظ أنني غالبًا ما أحتاج إلى تلقي رسائل من jabberids غير الموجودة في قائمتي وغالبًا ما يكون طلبي ليس الجانب الذي يبدأ الدردشة.

الرموز العلوية عبارة عن عينات صفعية ولكن الكود الخاص بي هو نفسه باستثناء أنني لا أقوم بإنشاء تطبيق PacketListener مضمّن.

هل كانت مفيدة؟

المحلول

تم حل مشكلتي عندما توقفت عن استخدام عميل Jabber مع نفس المستخدم الذي تم تسجيله أثناء اختبار برنامجي. وبعبارة أخرى ، فإن التعليمات البرمجية صحيحة ، لكن عميل jabber يمسك بالرسائل المرسلة ولا يبقى أي أشياء لالتقاط برنامجي.

نصائح أخرى

لقد مر وقت طويل منذ أن عملت مع Smack ، لكنني تمكنت من بدء الدردشات بناءً على الرسائل الواردة.

إذا كنت أتذكر جيدًا ، كان لدي نوع من "الدردشة" ، بسيطة Map<String, Chat> حيث كان المفتاح مساوياً لمعرف شركاء الدردشة. ثم استمعت إلى الرسائل الواردة ، واستخرجت معرف Jabber وبحثت في جلسة الدردشة النشطة مع هذا الشريك. إذا لم تكن هناك جلسة نشطة ، فقد قمت بإنشاء محادثة جديدة وأضفت زوج المفتاح/Vale الجديد إلى السجل.

مجرد حيرة بعض الشيء. قول انت

الرموز العلوية عبارة عن عينات صفعية ولكن الكود الخاص بي هو نفسه باستثناء أنني لا أقوم بإنشاء تطبيق PacketListener مضمّن.

كيف تتلقى رسائل دون وجود تطبيق PacketListener؟ أعتقد أنك ستتلقى دائمًا رسائل من الدردشات التي بدأت بها بسبب الرمز أدناه

chat newchat = chatmanager.createchat ("jsmith@jivesoftware.com" ، new messagelistener () {public void processmessage (Chat Chat ، Message Message) {System.out.println ("message receed:" + message) ؛}}) ؛

ولكن من أجل الانتظار بشكل غير متزامن للرسائل الواردة ، أعتقد أنك ستحتاج إلى قائمة حزمة. ربما أسيء فهم المشكلة التي تواجهها رغم ذلك

(كان ينبغي أن يكون هذا تعليقًا ، لكن لا يمكنني تحديد كيفية إضافة واحدة)

لقد مرت بعض الوقت ، هل تمكنت من حل هذا؟ لماذا تقوم بإنشاء من KontainsFilter؟ وبهذه الطريقة ، يقوم المستمعون بمعالجة الحزم فقط من المستخدم المحدد ، وليس جميع الحزم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top