Smack中的MultiUserChat邀请

时间:2011-12-05 19:31:31

标签: 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检测到邀请请求?

2 个答案:

答案 0 :(得分:2)

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

首先,它取决于您使用的是什么版本的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服务器有关用户状态的信息,如果你在连接对象上启用了监听器,将会收到状态信息和新邀请,这对我有用,希望它对你也有用,如果有任何信息,请纠正我是错的。

答案 1 :(得分:0)

您可能使用了pidgin中错误的用户名。您必须使用名称后跟电子邮件地址。