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 邀请的主要内容,如果未能解决你的问题,请参考以下文章