Smack MUC 邀请

Posted

技术标签:

【中文标题】Smack MUC 邀请【英文标题】:Smack MUC invitation 【发布时间】:2014-09-14 03:18:05 【问题描述】:

我有任何方法可以使用常规数据包过滤器侦听传入的 MultiUserChat。

现在我有一个类可以处理所有传入的数据包并根据类型处理它们。

例如,如果数据包是消息的实例,则将其添加到数据库中并发送广播。

这就是我监听传入数据包的方式

public void registerListener()
    Log.d("XMPP","New thread created for Message Listener");
    Thread t = new Thread(new Runnable() 
        @Override
        public void run() 
            Log.d("XMPP","Message Listener Registered");
            PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class));
            PacketCollector collector = connection.createPacketCollector(filter);
            while (true) 
                Packet packet = collector.nextResult();
                packetManager.handlePacket(packet);
            
        
    );
    t.start();

【问题讨论】:

【参考方案1】:

Smack 已经为此提供了一个 API:MultiUserChat.addInvitationListener(InvitationListener)

顺便说一句:在代码中使用 PacketCollector 而不是 PacketListener 有什么原因吗?我建议尽可能使用 PacketListener。

【讨论】:

这是否意味着我必须为每个 MUC 实例添加一个 InvitationListener?因为我有一个管理多个 MUC 的类。 不,也不可能给实例添加监听器,方法是静态的。 谢谢,我使用 PacketCollector 的原因是因为我不知道更好。你会说使用 PacketListener 更好吗,如果是,为什么? 这取决于你想做什么。 PacketListeners 在 Smack Thread 中调用,因此如果您在那里执行长时间运行的计算,它将阻塞所有后续的 Listeners。对于 PacketCollector,您通常会启动一个新线程,但重要的是在不再需要 PacketCollector 时清理它,否则您会泄漏资源。 也许这就是为什么它不断给我一个泄露的意图。感谢您的帮助。

以上是关于Smack MUC 邀请的主要内容,如果未能解决你的问题,请参考以下文章

发送直接邀请不适用于 MUC [ejabberd mod muc 管理员]

strophe muc 下降组邀请节

eJabberd 不能邀请多个用户到多个 MUC 房间

如何在纽约接受邀请?

将用户添加到 xmpp 组或 muc

XMPP房间邀请好友IOS