java - Smack 中的多用户聊天邀请

标签 java smack

我有以下代码来监听聊天室的邀请:

    Connection.DEBUG_ENABLED = true;
    XMPPConnection connection = new XMPPConnection("jabber.org");
    connection.connect();
    connection.login("username", "password");

    MultiUserChat.addInvitationListener(connection, new InvitationListener() {
        @Override
        public void invitationReceived(Connection arg0, String arg1,
                String arg2, String arg3, String arg4, Message arg5) {
            System.out.println("Invitation Received!");
        }
    });

    System.out.println("Connected, waiting for invitation");
    while(true) {
        Thread.yield();
    }
}

然后我使用另一个帐户使用 pidgin 登录创建一个聊天室,并邀请上述用户。未调用 invitationReceived 方法。 smack 调试器在我登录时收到存在更新,但没有其他数据包。但是,如果我使用 pidgin 登录到上述用户,我确实会收到邀请。如何让 smack 检测到邀请请求?

最佳答案

我可能来不及回答这个问题,但我想在这里分享我的解决方案,我有同样的问题,

首先,这取决于你使用的是什么版本的 smack(我推荐最新版本)

其次,发送MUC邀请的用户和接收邀请的用户应该连接到同一台服务器,以便接收MUC邀请。

第三个始终启用 smack 调试器,它将提供有关传入和传出节的信息。

您应该考虑的第四个因素是在登录后向 XMPP 服务器发送状态,如下所示,

       connection.setStatus(true,"ONLINE");

public void setStatus(boolean available, String status) throws XMPPException {
        Presence.Type type = available? Type.available: Type.unavailable;
        Presence presence = new Presence(type);
        presence.setStatus(status);
        connection.sendPacket(presence);
    } 

发送在线状态通知 xmpp 服务器有关用户状态,然后如果您在连接对象上启用了监听器,将会收到在线状态信息和新邀请,这对我有用希望它对你也有用,如果有任何信息请纠正我是错的。

关于java - Smack 中的多用户聊天邀请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390743/

相关文章:

android - 如何将用户添加到 xmpp 中的名册?

java - Java Web 框架(Ninja 和 Spark 框架)出现 MySQL unicode 错误

java - 如何获取字段或方法的 JNI 风格签名字符串?

java - 检查值方法不适用于检查幻方

android - 使用 aSmack、Eclipse 和增强的调试器调试 XMPP Android 客户端。

android - 使用 smack 'XMPPError: service-unavailable - cancel' 传输文件失败

android - 如何使用 Android 上的 Smack 让用户永久在线?

java - 无法使用 Smack 通过 CCS 接收来自 Google Cloud Messaging 的所有消息,只能每秒接收一次

java - 使 Java PriorityQueue 成为稳定的优先级队列

java - Eclipse 3.5+ - 注释处理器 : Generated classes cannot be imported