繁体   English   中英

如何使用smack-android:4.1.4在多用户聊天室中取消禁止用户

[英]How to unban user in multi user chat room using smack-android:4.1.4

我正在使用smack-android:4.1.4连接到xmpp服务器,并且我使用此代码连接到该服务器上的多用户聊天室:

MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = mucManager.getMultiUserChat(roomName);
muc.join(nickName,password,discussionHistory,timeout);

如果我是房主,则可以在这个房间里踢或禁止用户,以禁止用户:

muc.banUser(userJID, reason);

我可以在这个房间中获得禁止用户列表:

List<Affiliate> bannedList = muc.getOutcasts();

问题1:如何取消上一个列表中的用户? 问题是我找不到类似的任何功能:

//muc.unbanUser(String userJID);    // there's nothing close to this

我阅读了整个文档,但一无所获,那么我在这里想念的是什么?

我可以通过弃儿名单获得任何被禁止用户的名声:

String jid = outcast.getJid();  // where outcast is of type Affiliate

但没有使用此标识解除用户禁令的功能。

问题2:此问题与房间有关,但与禁止清单问题无关,在某些房间中,我遇到以下异常:

PacketParserUtils? Failed to parse extension packet in Presence packet. Attributes: from=roomName@conference.myXmppServer/someUserNickName id=null
org.jivesoftware.smack.SmackException: Caps elment with missing attributes. Attributes: hash=null version=1.0.0.84 node=http://www.google.com/xmpp/client/caps
        at org.jivesoftware.smackx.caps.provider.CapsExtensionProvider.parse(CapsExtensionProvider.java:54)
        at org.jivesoftware.smackx.caps.provider.CapsExtensionProvider.parse(CapsExtensionProvider.java:28)
        at org.jivesoftware.smack.provider.Provider.parse(Provider.java:35)
        at org.jivesoftware.smack.util.PacketParserUtils.parseExtensionElement(PacketParserUtils.java:929)
        at org.jivesoftware.smack.util.PacketParserUtils.addExtensionElement(PacketParserUtils.java:1060)
        at org.jivesoftware.smack.util.PacketParserUtils.parsePresence(PacketParserUtils.java:583)
        at org.jivesoftware.smack.util.PacketParserUtils.parseStanza(PacketParserUtils.java:155)
        at org.jivesoftware.smack.AbstractXMPPConnection.parseAndProcessStanza(AbstractXMPPConnection.java:956)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$500(XMPPTCPConnection.java:140)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:989)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:944)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:959)
        at java.lang.Thread.run(Thread.java:856)

并且它引用了smack库类中的一些代码,所以这不是我的代码中某些未捕获的异常,

发生此异常的原因是什么? 难道没有办法处理这些未解析的数据吗?

我在应用程序的其他部分使用ParsingExceptionCallback:

connection.setParsingExceptionCallback( parsingExceptionCallback ); 

但是在这种情况下不调用此函数,MultiUserChat类是否有任何类似的函数?

也许使用户成员将jid从禁止列表中删除? 因为根据xmpp,一个jid不能出现在多个列表中……xmpp中却有五个列表,一个列表用于所有者,管理员,成员,没有列表,并且被禁止。

在以下网站上

http://xmpp.org/extensions/xep-0045.html

4.1一般条款

5.2.1特权

可选读

  1. 管理员用例

我正在使用带有smack-android-4.1.9库的ejabberd服务器,以下代码对我来说很完美。

 //remove the user from Group of ejabberd.
//revoke the Ownership,Admin and membership from group of ejabberd.
public void removeUser(String room_jid,RosterVO removeUserRosterVo,boolean isAdmin){
    MultiUserChatManager multichatmanager = MultiUserChatManager.getInstanceFor(connection);
    MultiUserChat chatRoom = multichatmanager.getMultiUserChat(room_jid);

    try {
        if (isAdmin) {
            chatRoom.revokeOwnership(removeUserRosterVo.getJid());
            chatRoom.revokeAdmin(removeUserRosterVo.getJid());
            chatRoom.revokeMembership(removeUserRosterVo.getJid());
        } else {
            chatRoom.revokeMembership(removeUserRosterVo.getJid());
        }
    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
    } catch (XMPPException.XMPPErrorException e) {
        e.printStackTrace();
    } catch (SmackException.NoResponseException e) {
        e.printStackTrace();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM