如何使用 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
我阅读了整个文档但一无所获,所以我在这里遗漏了什么?
我可以通过流浪者列表获取任何被禁止用户的jid:
String jid = outcast.getJid(); // where outcast is of type Affiliate
但没有使用此 jid 解除用户封禁的功能。
问题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.access0(XMPPTCPConnection.java:140)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:989)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access0(XMPPTCPConnection.java:944)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.run(XMPPTCPConnection.java:959)
at java.lang.Thread.run(Thread.java:856)
它引用了 smack 库 classes 中的一些代码,所以它不是我代码中的一些未捕获的异常,
这个异常的原因是什么?难道没有办法处理这些未解析的数据吗?
我在应用程序的其他部分使用 ParsingExceptionCallback:
connection.setParsingExceptionCallback( parsingExceptionCallback );
但是在这种情况下不会调用此函数,MultiUserChat class 是否有类似的函数?
也许让用户成为会员会将 jid 从禁止列表中删除?因为根据 xmpp,一个 jid 不能在一个以上的列表中……xmpp 中有五个列表,一个用于所有者、管理员、成员、none 和被禁止。
在以下网站
http://xmpp.org/extensions/xep-0045.html
阅读
4.1 一般条款
5.2.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();
}
}
我正在使用 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
我阅读了整个文档但一无所获,所以我在这里遗漏了什么?
我可以通过流浪者列表获取任何被禁止用户的jid:
String jid = outcast.getJid(); // where outcast is of type Affiliate
但没有使用此 jid 解除用户封禁的功能。
问题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.access0(XMPPTCPConnection.java:140)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:989)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access0(XMPPTCPConnection.java:944)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.run(XMPPTCPConnection.java:959)
at java.lang.Thread.run(Thread.java:856)
它引用了 smack 库 classes 中的一些代码,所以它不是我代码中的一些未捕获的异常,
这个异常的原因是什么?难道没有办法处理这些未解析的数据吗?
我在应用程序的其他部分使用 ParsingExceptionCallback:
connection.setParsingExceptionCallback( parsingExceptionCallback );
但是在这种情况下不会调用此函数,MultiUserChat class 是否有类似的函数?
也许让用户成为会员会将 jid 从禁止列表中删除?因为根据 xmpp,一个 jid 不能在一个以上的列表中……xmpp 中有五个列表,一个用于所有者、管理员、成员、none 和被禁止。
在以下网站
http://xmpp.org/extensions/xep-0045.html
阅读
4.1 一般条款
5.2.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();
}
}