xmpp 如何查看xmpp 房间成员拥有者

ASMACK&XMPP&MultiUserChat.getJoinedRooms()返回空数据
项目中使用asmack进行xmpp通讯的第三放jar包,在网络异常时需要进行断线重连,由于xmpp的muc不对member进行持久化,当你断线重连时还需要重新加入房间。自然的想到,重新连接上xmppserver时先查看自己加入了哪些房间,发现MultiUserChat类里面有一个getJoinedRooms方法意思很明了也很契合我的需求。但在实际测试中发现这个返回的iterator一直是空的。有2个问题
1.返回数据为空
2.数据是自己发给自己的
xmpp的通讯数据:
发现数据是自己发出去然后在收到。明显不是从服务器查出来的。网上也有一些类似的问题,但都没有讲出原因都说是asmack的一个bug,answer最靠谱的就是在加个iq监听type为result的packagelistener。没办法自己去asmack的官方看看是否有这个bug的report。结果发现asmack已经被废弃了,4.1开始smack.jar开始全面支持android环境。现在替换asmack不切实际,之好自己去挖源码看。结果真找到了原因。
getJoinedRooms里面的discoverItem方法是用的一个阻塞方法获取的response。从xmpp的debug数据可以看出第一个query发出去返回的是
这个iq自然是一个空的iterator,至于为什么网上的answer是在添加一个packetlistener原理就是监听后面收到的result。
那问题2为什么会是自己发送result呢?
先来看一看org.jivesoftware.smackx.ServiceDiscoveryManager这个类
在ServiceDiscoveryManager的构造函数里面添加了一个packetlistener监听discover的get请求。所以当收到
时触发该监听。上图红框中正是数据的来源。由于这是一个注入数据源,注入源头在MultiUserChat的static块中,添加了一个connectioncreatelistener,当重新连接时触发该代码块往discovermanager注入数据,代码见下图
看到这儿基本上就明白了其实discoverroom是客户端自己实现的,asmack先发个discover的请求到服务器,服务器直接路由给客户端,客户端将本地缓存的数据发给服务器,服务器再将数据发给客户端,绕了一大圈就是读取了本地数据,所以网上的通过监听result包来获取数据其实不太好,而且还浪费流量和时间,还不如直接读取本地的数据。看了一下源码中得joinedRooms是private的,获取数据的方法也是私有的。可以直接将源码中的joinedRooms改成public。但改源码结构违背asmack作者的意愿。我就在自己将room信息缓存。代码如下
至此问题二完全弄明白了。希望给研究xmpp asmack的同行一些建议。
转载注明出处:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前访客身份:游客 [
业余时间不以编程为乐者,永远赶不上那些以此为乐的同行
:引用来自“123he”的评论我看到的图不清楚,请问...
:我看到的图不清楚,请问怎么回事
:引用来自“123he”的评论有没有项目源码哥们这个...
:有没有项目源码哥们
:真是非常感谢啊,!
:引用来自“逍遥影”的评论News类没有贴出来吧 就...
:引用来自“Rylyn_n”的评论求代码!!!非常感谢...
:News类没有贴出来吧
:求代码!!!非常感谢 ...
:方法二不错
今日访问:18
昨日访问:41
本周访问:207
本月访问:596
所有访问:9512
XMPP Smack Openfire
发表于1年前( 09:59)&&
阅读(1663)&|&评论()
0人收藏此文章,
XMPP Smack Openfire总结
import&java.io.BufferedInputS&&
import&java.io.BufferedR&&
import&java.io.ByteArrayInputS&&
import&java.io.F&&
import&java.io.FileInputS&&
import&java.io.IOE&&
import&java.io.InputStreamR&&
import&java.net.URL;&&
import&java.net.URLC&&
import&java.util.ArrayL&&
import&java.util.C&&
import&java.util.HashM&&
import&java.util.I&&
import&java.util.L&&
import&java.util.M&&
import&org.jivesoftware.smack.ConnectionC&&
import&org.jivesoftware.smack.PacketC&&
import&org.jivesoftware.smack.R&&
import&org.jivesoftware.smack.RosterE&&
import&org.jivesoftware.smack.RosterG&&
import&org.jivesoftware.smack.SmackC&&
import&org.jivesoftware.smack.XMPPC&&
import&org.jivesoftware.smack.XMPPE&&
import&org.jivesoftware.smack.filter.AndF&&
import&org.jivesoftware.smack.filter.PacketF&&
import&org.jivesoftware.smack.filter.PacketIDF&&
import&org.jivesoftware.smack.filter.PacketTypeF&&
import&org.jivesoftware.smack.packet.IQ;&&
import&org.jivesoftware.smack.packet.M&&
import&org.jivesoftware.smack.packet.P&&
import&org.jivesoftware.smack.packet.P&&
import&org.jivesoftware.smack.packet.R&&
import&org.jivesoftware.smack.provider.PrivacyP&&
import&org.jivesoftware.smack.provider.ProviderM&&
import&org.jivesoftware.smack.util.StringU&&
import&org.jivesoftware.smackx.F&&
import&org.jivesoftware.smackx.FormF&&
import&org.jivesoftware.smackx.GroupChatI&&
import&org.jivesoftware.smackx.OfflineMessageM&&
import&org.jivesoftware.smackx.PrivateDataM&&
import&org.jivesoftware.smackx.ReportedD&&
import&org.jivesoftware.smackx.ReportedData.R&&
import&org.jivesoftware.smackx.ServiceDiscoveryM&&
import&org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsP&&
import&org.jivesoftware.smackx.filetransfer.FileTransferM&&
import&org.jivesoftware.smackx.filetransfer.OutgoingFileT&&
import&org.jivesoftware.smackx.muc.DiscussionH&&
import&org.jivesoftware.smackx.muc.HostedR&&
import&org.jivesoftware.smackx.muc.MultiUserC&&
import&org.jivesoftware.smackx.packet.ChatStateE&&
import&org.jivesoftware.smackx.packet.LastA&&
import&org.jivesoftware.smackx.packet.OfflineMessageI&&
import&org.jivesoftware.smackx.packet.OfflineMessageR&&
import&org.jivesoftware.smackx.packet.SharedGroupsI&&
import&org.jivesoftware.smackx.packet.VC&&
import&org.jivesoftware.smackx.provider.AdHocCommandDataP&&
import&org.jivesoftware.smackx.provider.DataFormP&&
import&org.jivesoftware.smackx.provider.DelayInformationP&&
import&org.jivesoftware.smackx.provider.DiscoverInfoP&&
import&org.jivesoftware.smackx.provider.DiscoverItemsP&&
import&org.jivesoftware.smackx.provider.MUCAdminP&&
import&org.jivesoftware.smackx.provider.MUCOwnerP&&
import&org.jivesoftware.smackx.provider.MUCUserP&&
import&org.jivesoftware.smackx.provider.MessageEventP&&
import&org.jivesoftware.smackx.provider.MultipleAddressesP&&
import&org.jivesoftware.smackx.provider.RosterExchangeP&&
import&org.jivesoftware.smackx.provider.StreamInitiationP&&
import&org.jivesoftware.smackx.provider.VCardP&&
import&org.jivesoftware.smackx.provider.XHTMLExtensionP&&
import&org.jivesoftware.smackx.search.UserS&&
import&org.jivesoftware.smackx.search.UserSearchM&&
import&android.graphics.drawable.D&&
import&android.util.L&&
import&com.techrare.listener.TaxiConnectionL&&
&*&XmppConnection&工具类&
&*&@author&肖赛SoAi&
public&class&XmppConnection&{&&
&&&&private&int&SERVER_PORT&=&5222;&&
&&&&private&String&SERVER_HOST&=&"127.0.0.1";&&
&&&&private&XMPPConnection&connection&=&&&
&&&&private&String&SERVER_NAME&=&"ubuntuserver4java";&&
&&&&private&static&XmppConnection&xmppConnection&=&new&XmppConnection();&&
&&&&private&TaxiConnectionListener&connectionL&&
&&&&&*&单例模式&
&&&&&*&@return&
&&&&synchronized&public&static&XmppConnection&getInstance()&{&&
&&&&&&&&return&xmppC&&
&&&&&*&创建连接&
&&&&public&XMPPConnection&getConnection()&{&&
&&&&&&&&if&(connection&==&null)&{&&
&&&&&&&&&&&&openConnection();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&打开连接&
&&&&public&boolean&openConnection()&{&&
&&&&&&&&try&{&&
&&&&&&&&&&&&if&(null&==&connection&||&!connection.isAuthenticated())&{&&
&&&&&&&&&&&&&&&&XMPPConnection.DEBUG_ENABLED&=&//&开启DEBUG模式&&
&&&&&&&&&&&&&&&&//&配置连接&&
&&&&&&&&&&&&&&&&ConnectionConfiguration&config&=&new&ConnectionConfiguration(&&
&&&&&&&&&&&&&&&&&&&&&&&&SERVER_HOST,&SERVER_PORT,&SERVER_NAME);&&
&&&&&&&&&&&&&&&&config.setReconnectionAllowed(true);&&
&&&&&&&&&&&&&&&&config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);&&
&&&&&&&&&&&&&&&&config.setSendPresence(true);&//&状态设为离线,目的为了取离线消息&&
&&&&&&&&&&&&&&&&config.setSASLAuthenticationEnabled(false);&//&是否启用安全验证&&
&&&&&&&&&&&&&&&&config.setTruststorePath("/system/etc/security/cacerts.bks");&&
&&&&&&&&&&&&&&&&config.setTruststorePassword("changeit");&&
&&&&&&&&&&&&&&&&config.setTruststoreType("bks");&&
&&&&&&&&&&&&&&&&connection&=&new&XMPPConnection(config);&&
&&&&&&&&&&&&&&&&connection.connect();//&连接到服务器&&
&&&&&&&&&&&&&&&&//&配置各种Provider,如果不配置,则会无法解析数据&&
&&&&&&&&&&&&&&&&configureConnection(ProviderManager.getInstance());&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(XMPPException&xe)&{&&
&&&&&&&&&&&&xe.printStackTrace();&&
&&&&&&&&&&&&connection&=&&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&关闭连接&
&&&&public&void&closeConnection()&{&&
&&&&&&&&if(connection!=null){&&
&&&&&&&&&&&&//移除連接監聽&&
&&&&&&&&&&&&//connection.removeConnectionListener(connectionListener);&&
&&&&&&&&&&&&if(connection.isConnected())&&
&&&&&&&&&&&&&&&&connection.disconnect();&&
&&&&&&&&&&&&connection&=&&&
&&&&&&&&}&&
&&&&&&&&Log.i("XmppConnection",&"關閉連接");&&
&&&&&*&登录&
&&&&&*&@param&account&
&&&&&*&&&&&&&&&&&&登录帐号&
&&&&&*&@param&password&
&&&&&*&&&&&&&&&&&&登录密码&
&&&&&*&@return&
&&&&public&boolean&login(String&account,&String&password)&{&&
&&&&&&&&try&{&&
&&&&&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&getConnection().login(account,&password);&&
&&&&&&&&&&&&//&更改在綫狀態&&
&&&&&&&&&&&&Presence&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&&&&&getConnection().sendPacket(presence);&&
&&&&&&&&&&&&//&添加連接監聽&&
&&&&&&&&&&&&connectionListener&=&new&TaxiConnectionListener();&&
&&&&&&&&&&&&getConnection().addConnectionListener(connectionListener);&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(XMPPException&xe)&{&&
&&&&&&&&&&&&xe.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&注册&
&&&&&*&@param&account&
&&&&&*&&&&&&&&&&&&注册帐号&
&&&&&*&@param&password&
&&&&&*&&&&&&&&&&&&注册密码&
&&&&&*&@return&1、注册成功&0、服务器没有返回结果2、这个账号已经存在3、注册失败&
&&&&public&String&regist(String&account,&String&password)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&"0";&&
&&&&&&&&Registration&reg&=&new&Registration();&&
&&&&&&&&reg.setType(IQ.Type.SET);&&
&&&&&&&&reg.setTo(getConnection().getServiceName());&&
&&&&&&&&//&注意这里createAccount注册时,参数是UserName,不是jid,是"@"前面的部分。&&
&&&&&&&&reg.setUsername(account);&&
&&&&&&&&reg.setPassword(password);&&
&&&&&&&&//&这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!&&
&&&&&&&&reg.addAttribute("android",&"geolo_createUser_android");&&
&&&&&&&&PacketFilter&filter&=&new&AndFilter(new&PacketIDFilter(&&
&&&&&&&&&&&&&&&&reg.getPacketID()),&new&PacketTypeFilter(IQ.class));&&
&&&&&&&&PacketCollector&collector&=&getConnection().createPacketCollector(&&
&&&&&&&&&&&&&&&&filter);&&
&&&&&&&&getConnection().sendPacket(reg);&&
&&&&&&&&IQ&result&=&(IQ)&collector.nextResult(SmackConfiguration&&
&&&&&&&&&&&&&&&&.getPacketReplyTimeout());&&
&&&&&&&&//&Stop&queuing&results停止请求results(是否成功的结果)&&
&&&&&&&&collector.cancel();&&
&&&&&&&&if&(result&==&null)&{&&
&&&&&&&&&&&&Log.e("regist",&"No&response&from&server.");&&
&&&&&&&&&&&&return&"0";&&
&&&&&&&&}&else&if&(result.getType()&==&IQ.Type.RESULT)&{&&
&&&&&&&&&&&&Log.v("regist",&"regist&success.");&&
&&&&&&&&&&&&return&"1";&&
&&&&&&&&}&else&{&//&if&(result.getType()&==&IQ.Type.ERROR)&&
&&&&&&&&&&&&if&(result.getError().toString().equalsIgnoreCase("conflict(409)"))&{&&
&&&&&&&&&&&&&&&&Log.e("regist",&"IQ.Type.ERROR:&"&
&&&&&&&&&&&&&&&&&&&&&&&&+&result.getError().toString());&&
&&&&&&&&&&&&&&&&return&"2";&&
&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&Log.e("regist",&"IQ.Type.ERROR:&"&
&&&&&&&&&&&&&&&&&&&&&&&&+&result.getError().toString());&&
&&&&&&&&&&&&&&&&return&"3";&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&*&更改用户状态&
&&&&public&void&setPresence(int&code)&{&&
&&&&&&&&XMPPConnection&con&=&getConnection();&&
&&&&&&&&if&(con&==&null)&&
&&&&&&&&&&&&&&
&&&&&&&&Presence&&&
&&&&&&&&switch&(code)&{&&
&&&&&&&&case&0:&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置在线");&&
&&&&&&&&&&&&&&
&&&&&&&&case&1:&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&&&&&presence.setMode(Presence.Mode.chat);&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置Q我吧");&&
&&&&&&&&&&&&&&
&&&&&&&&case&2:&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&&&&&presence.setMode(Presence.Mode.dnd);&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置忙碌");&&
&&&&&&&&&&&&&&
&&&&&&&&case&3:&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&&&&&presence.setMode(Presence.Mode.away);&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置离开");&&
&&&&&&&&&&&&&&
&&&&&&&&case&4:&&
&&&&&&&&&&&&Roster&roster&=&con.getRoster();&&
&&&&&&&&&&&&Collection&RosterEntry&&entries&=&roster.getEntries();&&
&&&&&&&&&&&&for&(RosterEntry&entry&:&entries)&{&&
&&&&&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.unavailable);&&
&&&&&&&&&&&&&&&&presence.setPacketID(Packet.ID_NOT_AVAILABLE);&&
&&&&&&&&&&&&&&&&presence.setFrom(con.getUser());&&
&&&&&&&&&&&&&&&&presence.setTo(entry.getUser());&&
&&&&&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&&&&&Log.v("state",&presence.toXML());&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&//&向同一用户的其他客户端发送隐身状态&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.unavailable);&&
&&&&&&&&&&&&presence.setPacketID(Packet.ID_NOT_AVAILABLE);&&
&&&&&&&&&&&&presence.setFrom(con.getUser());&&
&&&&&&&&&&&&presence.setTo(StringUtils.parseBareAddress(con.getUser()));&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置隐身");&&
&&&&&&&&&&&&&&
&&&&&&&&case&5:&&
&&&&&&&&&&&&presence&=&new&Presence(Presence.Type.unavailable);&&
&&&&&&&&&&&&con.sendPacket(presence);&&
&&&&&&&&&&&&Log.v("state",&"设置离线");&&
&&&&&&&&&&&&&&
&&&&&&&&default:&&
&&&&&&&&&&&&&&
&&&&&&&&}&&
&&&&&*&获取所有组&
&&&&&*&@return&所有组集合&
&&&&public&List&RosterGroup&&getGroups()&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&List&RosterGroup&&grouplist&=&new&ArrayList&RosterGroup&();&&
&&&&&&&&Collection&RosterGroup&&rosterGroup&=&getConnection().getRoster()&&
&&&&&&&&&&&&&&&&.getGroups();&&
&&&&&&&&Iterator&RosterGroup&&i&=&rosterGroup.iterator();&&
&&&&&&&&while&(i.hasNext())&{&&
&&&&&&&&&&&&grouplist.add(i.next());&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&获取某个组里面的所有好友&
&&&&&*&@param&roster&
&&&&&*&@param&groupName&
&&&&&*&&&&&&&&&&&&组名&
&&&&&*&@return&
&&&&public&List&RosterEntry&&getEntriesByGroup(String&groupName)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&List&RosterEntry&&Entrieslist&=&new&ArrayList&RosterEntry&();&&
&&&&&&&&RosterGroup&rosterGroup&=&getConnection().getRoster().getGroup(&&
&&&&&&&&&&&&&&&&groupName);&&
&&&&&&&&Collection&RosterEntry&&rosterEntry&=&rosterGroup.getEntries();&&
&&&&&&&&Iterator&RosterEntry&&i&=&rosterEntry.iterator();&&
&&&&&&&&while&(i.hasNext())&{&&
&&&&&&&&&&&&Entrieslist.add(i.next());&&
&&&&&&&&}&&
&&&&&&&&return&E&&
&&&&&*&获取所有好友信息&
&&&&&*&@return&
&&&&public&List&RosterEntry&&getAllEntries()&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&List&RosterEntry&&Entrieslist&=&new&ArrayList&RosterEntry&();&&
&&&&&&&&Collection&RosterEntry&&rosterEntry&=&getConnection().getRoster()&&
&&&&&&&&&&&&&&&&.getEntries();&&
&&&&&&&&Iterator&RosterEntry&&i&=&rosterEntry.iterator();&&
&&&&&&&&while&(i.hasNext())&{&&
&&&&&&&&&&&&Entrieslist.add(i.next());&&
&&&&&&&&}&&
&&&&&&&&return&E&&
&&&&&*&获取用户VCard信息&
&&&&&*&@param&connection&
&&&&&*&@param&user&
&&&&&*&@return&
&&&&&*&@throws&XMPPException&
&&&&public&VCard&getUserVCard(String&user)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&VCard&vcard&=&new&VCard();&&
&&&&&&&&try&{&&
&&&&&&&&&&&&vcard.load(getConnection(),&user);&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&获取用户头像信息&
&&&&&*&@param&connection&
&&&&&*&@param&user&
&&&&&*&@return&
&&&&public&Drawable&getUserImage(String&user)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&ByteArrayInputStream&bais&=&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&VCard&vcard&=&new&VCard();&&
&&&&&&&&&&&&//&加入这句代码,解决No&VCard&for&&
&&&&&&&&&&&&ProviderManager.getInstance().addIQProvider("vCard",&"vcard-temp",&&
&&&&&&&&&&&&&&&&&&&&new&org.jivesoftware.smackx.provider.VCardProvider());&&
&&&&&&&&&&&&if&(user&==&""&||&user&==&null&||&user.trim().length()&&=&0)&{&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&vcard.load(getConnection(),&user&+&"@"&
&&&&&&&&&&&&&&&&&&&&+&getConnection().getServiceName());&&
&&&&&&&&&&&&if&(vcard&==&null&||&vcard.getAvatar()&==&null)&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&bais&=&new&ByteArrayInputStream(vcard.getAvatar());&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&&&&return&FormatTools.getInstance().InputStream2Drawable(bais);&&
&&&&&*&添加一个分组&
&&&&&*&@param&groupName&
&&&&&*&@return&
&&&&public&boolean&addGroup(String&groupName)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&getConnection().getRoster().createGroup(groupName);&&
&&&&&&&&&&&&Log.v("addGroup",&groupName&+&"創建成功");&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&删除分组&
&&&&&*&@param&groupName&
&&&&&*&@return&
&&&&public&boolean&removeGroup(String&groupName)&{&&
&&&&&&&&return&&&
&&&&&*&添加好友&无分组&
&&&&&*&@param&userName&
&&&&&*&@param&name&
&&&&&*&@return&
&&&&public&boolean&addUser(String&userName,&String&name)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&getConnection().getRoster().createEntry(userName,&name,&null);&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&添加好友&有分组&
&&&&&*&@param&userName&
&&&&&*&@param&name&
&&&&&*&@param&groupName&
&&&&&*&@return&
&&&&public&boolean&addUser(String&userName,&String&name,&String&groupName)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&Presence&subscription&=&new&Presence(Presence.Type.subscribed);&&
&&&&&&&&&&&&subscription.setTo(userName);&&
&&&&&&&&&&&&userName&+=&"@"&+&getConnection().getServiceName();&&
&&&&&&&&&&&&getConnection().sendPacket(subscription);&&
&&&&&&&&&&&&getConnection().getRoster().createEntry(userName,&name,&&
&&&&&&&&&&&&&&&&&&&&new&String[]&{&groupName&});&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&删除好友&
&&&&&*&@param&userName&
&&&&&*&@return&
&&&&public&boolean&removeUser(String&userName)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&RosterEntry&entry&=&&&
&&&&&&&&&&&&if&(userName.contains("@"))&&
&&&&&&&&&&&&&&&&entry&=&getConnection().getRoster().getEntry(userName);&&
&&&&&&&&&&&&else&
&&&&&&&&&&&&&&&&entry&=&getConnection().getRoster().getEntry(&&
&&&&&&&&&&&&&&&&&&&&&&&&userName&+&"@"&+&getConnection().getServiceName());&&
&&&&&&&&&&&&if&(entry&==&null)&&
&&&&&&&&&&&&&&&&entry&=&getConnection().getRoster().getEntry(userName);&&
&&&&&&&&&&&&getConnection().getRoster().removeEntry(entry);&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&查询用户&
&&&&&*&@param&userName&
&&&&&*&@return&
&&&&&*&@throws&XMPPException&
&&&&public&List&HashMap&String,&String&&&searchUsers(String&userName)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&HashMap&String,&String&&user&=&&&
&&&&&&&&List&HashMap&String,&String&&&results&=&new&ArrayList&HashMap&String,&String&&();&&
&&&&&&&&try&{&&
&&&&&&&&&&&&new&ServiceDiscoveryManager(getConnection());&&
&&&&&&&&&&&&UserSearchManager&usm&=&new&UserSearchManager(getConnection());&&
&&&&&&&&&&&&Form&searchForm&=&usm.getSearchForm(getConnection()&&
&&&&&&&&&&&&&&&&&&&&.getServiceName());&&
&&&&&&&&&&&&Form&answerForm&=&searchForm.createAnswerForm();&&
&&&&&&&&&&&&answerForm.setAnswer("userAccount",&true);&&
&&&&&&&&&&&&answerForm.setAnswer("userPhote",&userName);&&
&&&&&&&&&&&&ReportedData&data&=&usm.getSearchResults(answerForm,&"search"&
&&&&&&&&&&&&&&&&&&&&+&getConnection().getServiceName());&&
&&&&&&&&&&&&Iterator&Row&&it&=&data.getRows();&&
&&&&&&&&&&&&Row&row&=&&&
&&&&&&&&&&&&while&(it.hasNext())&{&&
&&&&&&&&&&&&&&&&user&=&new&HashMap&String,&String&();&&
&&&&&&&&&&&&&&&&row&=&it.next();&&
&&&&&&&&&&&&&&&&user.put("userAccount",&row.getValues("userAccount").next()&&
&&&&&&&&&&&&&&&&&&&&&&&&.toString());&&
&&&&&&&&&&&&&&&&user.put("userPhote",&row.getValues("userPhote").next()&&
&&&&&&&&&&&&&&&&&&&&&&&&.toString());&&
&&&&&&&&&&&&&&&&results.add(user);&&
&&&&&&&&&&&&&&&&//&若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&修改心情&
&&&&&*&@param&connection&
&&&&&*&@param&status&
&&&&public&void&changeStateMessage(String&status)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&&&
&&&&&&&&Presence&presence&=&new&Presence(Presence.Type.available);&&
&&&&&&&&presence.setStatus(status);&&
&&&&&&&&getConnection().sendPacket(presence);&&
&&&&&*&修改用户头像&
&&&&&*&@param&file&
&&&&public&boolean&changeImage(File&file)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&VCard&vcard&=&new&VCard();&&
&&&&&&&&&&&&vcard.load(getConnection());&&
&&&&&&&&&&&&byte[]&&&
&&&&&&&&&&&&bytes&=&getFileBytes(file);&&
&&&&&&&&&&&&String&encodedImage&=&StringUtils.encodeBase64(bytes);&&
&&&&&&&&&&&&vcard.setAvatar(bytes,&encodedImage);&&
&&&&&&&&&&&&vcard.setEncodedImage(encodedImage);&&
&&&&&&&&&&&&vcard.setField("PHOTO",&"&TYPE&image/jpg&/TYPE&&BINVAL&"&
&&&&&&&&&&&&&&&&&&&&+&encodedImage&+&"&/BINVAL&",&true);&&
&&&&&&&&&&&&ByteArrayInputStream&bais&=&new&ByteArrayInputStream(&&
&&&&&&&&&&&&&&&&&&&&vcard.getAvatar());&&
&&&&&&&&&&&&FormatTools.getInstance().InputStream2Bitmap(bais);&&
&&&&&&&&&&&&vcard.save(getConnection());&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&文件转字节&
&&&&&*&@param&file&
&&&&&*&@return&
&&&&&*&@throws&IOException&
&&&&private&byte[]&getFileBytes(File&file)&throws&IOException&{&&
&&&&&&&&BufferedInputStream&bis&=&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&bis&=&new&BufferedInputStream(new&FileInputStream(file));&&
&&&&&&&&&&&&int&bytes&=&(int)&file.length();&&
&&&&&&&&&&&&byte[]&buffer&=&new&byte[bytes];&&
&&&&&&&&&&&&int&readBytes&=&bis.read(buffer);&&
&&&&&&&&&&&&if&(readBytes&!=&buffer.length)&{&&
&&&&&&&&&&&&&&&&throw&new&IOException("Entire&file&not&read");&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&finally&{&&
&&&&&&&&&&&&if&(bis&!=&null)&{&&
&&&&&&&&&&&&&&&&bis.close();&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&*&删除当前用户&
&&&&&*&@return&
&&&&public&boolean&deleteAccount()&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&getConnection().getAccountManager().deleteAccount();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&修改密码&
&&&&&*&@return&
&&&&public&boolean&changePassword(String&pwd)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&getConnection().getAccountManager().changePassword(pwd);&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&初始化会议室列表&
&&&&public&List&HostedRoom&&getHostRooms()&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&Collection&HostedRoom&&hostrooms&=&&&
&&&&&&&&List&HostedRoom&&roominfos&=&new&ArrayList&HostedRoom&();&&
&&&&&&&&try&{&&
&&&&&&&&&&&&new&ServiceDiscoveryManager(getConnection());&&
&&&&&&&&&&&&hostrooms&=&MultiUserChat.getHostedRooms(getConnection(),&&
&&&&&&&&&&&&&&&&&&&&getConnection().getServiceName());&&
&&&&&&&&&&&&for&(HostedRoom&entry&:&hostrooms)&{&&
&&&&&&&&&&&&&&&&roominfos.add(entry);&&
&&&&&&&&&&&&&&&&Log.i("room",&&
&&&&&&&&&&&&&&&&&&&&&&&&"名字:"&+&entry.getName()&+&"&-&ID:"&+&entry.getJid());&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&Log.i("room",&"服务会议数量:"&+&roominfos.size());&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&创建房间&
&&&&&*&@param&roomName&
&&&&&*&&&&&&&&&&&&房间名称&
&&&&public&MultiUserChat&createRoom(String&user,&String&roomName,&&
&&&&&&&&&&&&String&password)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&MultiUserChat&muc&=&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&//&创建一个MultiUserChat&&
&&&&&&&&&&&&muc&=&new&MultiUserChat(getConnection(),&roomName&+&"@conference."&
&&&&&&&&&&&&&&&&&&&&+&getConnection().getServiceName());&&
&&&&&&&&&&&&//&创建聊天室&&
&&&&&&&&&&&&muc.create(roomName);&&
&&&&&&&&&&&&//&获得聊天室的配置表单&&
&&&&&&&&&&&&Form&form&=&muc.getConfigurationForm();&&
&&&&&&&&&&&&//&根据原始表单创建一个要提交的新表单。&&
&&&&&&&&&&&&Form&submitForm&=&form.createAnswerForm();&&
&&&&&&&&&&&&//&向要提交的表单添加默认答复&&
&&&&&&&&&&&&for&(Iterator&FormField&&fields&=&form.getFields();&fields&&
&&&&&&&&&&&&&&&&&&&&.hasNext();)&{&&
&&&&&&&&&&&&&&&&FormField&field&=&(FormField)&fields.next();&&
&&&&&&&&&&&&&&&&if&(!FormField.TYPE_HIDDEN.equals(field.getType())&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&field.getVariable()&!=&null)&{&&
&&&&&&&&&&&&&&&&&&&&//&设置默认值作为答复&&
&&&&&&&&&&&&&&&&&&&&submitForm.setDefaultAnswer(field.getVariable());&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&//&设置聊天室的新拥有者&&
&&&&&&&&&&&&List&String&&owners&=&new&ArrayList&String&();&&
&&&&&&&&&&&&owners.add(getConnection().getUser());//&用户JID&&
&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_roomowners",&owners);&&
&&&&&&&&&&&&//&设置聊天室是持久聊天室,即将要被保存下来&&
&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_persistentroom",&true);&&
&&&&&&&&&&&&//&房间仅对成员开放&&
&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_membersonly",&false);&&
&&&&&&&&&&&&//&允许占有者邀请其他人&&
&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_allowinvites",&true);&&
&&&&&&&&&&&&if&(!password.equals(""))&{&&
&&&&&&&&&&&&&&&&//&进入是否需要密码&&
&&&&&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_passwordprotectedroom",&&
&&&&&&&&&&&&&&&&&&&&&&&&true);&&
&&&&&&&&&&&&&&&&//&设置进入密码&&
&&&&&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_roomsecret",&password);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&//&能够发现占有者真实&JID&的角色&&
&&&&&&&&&&&&//&submitForm.setAnswer("muc#roomconfig_whois",&"anyone");&&
&&&&&&&&&&&&//&登录房间对话&&
&&&&&&&&&&&&submitForm.setAnswer("muc#roomconfig_enablelogging",&true);&&
&&&&&&&&&&&&//&仅允许注册的昵称登录&&
&&&&&&&&&&&&submitForm.setAnswer("x-muc#roomconfig_reservednick",&true);&&
&&&&&&&&&&&&//&允许使用者修改昵称&&
&&&&&&&&&&&&submitForm.setAnswer("x-muc#roomconfig_canchangenick",&false);&&
&&&&&&&&&&&&//&允许用户注册房间&&
&&&&&&&&&&&&submitForm.setAnswer("x-muc#roomconfig_registration",&false);&&
&&&&&&&&&&&&//&发送已完成的表单(有默认值)到服务器来配置聊天室&&
&&&&&&&&&&&&muc.sendConfigurationForm(submitForm);&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&&*&加入会议室&
&&&&&*&@param&user&
&&&&&*&&&&&&&&&&&&昵称&
&&&&&*&@param&password&
&&&&&*&&&&&&&&&&&&会议室密码&
&&&&&*&@param&roomsName&
&&&&&*&&&&&&&&&&&&会议室名&
&&&&public&MultiUserChat&joinMultiUserChat(String&user,&String&roomsName,&&
&&&&&&&&&&&&String&password)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&//&使用XMPPConnection创建一个MultiUserChat窗口&&
&&&&&&&&&&&&MultiUserChat&muc&=&new&MultiUserChat(getConnection(),&roomsName&&
&&&&&&&&&&&&&&&&&&&&+&"@conference."&+&getConnection().getServiceName());&&
&&&&&&&&&&&&//&聊天室服务将会决定要接受的历史记录数量&&
&&&&&&&&&&&&DiscussionHistory&history&=&new&DiscussionHistory();&&
&&&&&&&&&&&&history.setMaxChars(0);&&
&&&&&&&&&&&&//&history.setSince(new&Date());&&
&&&&&&&&&&&&//&用户加入聊天室&&
&&&&&&&&&&&&muc.join(user,&password,&history,&&
&&&&&&&&&&&&&&&&&&&&SmackConfiguration.getPacketReplyTimeout());&&
&&&&&&&&&&&&Log.i("MultiUserChat",&"会议室【"+roomsName+"】加入成功........");&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&Log.i("MultiUserChat",&"会议室【"+roomsName+"】加入失败........");&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&&
&&&&&*&查询会议室成员名字&
&&&&&*&@param&muc&
&&&&public&List&String&&findMulitUser(MultiUserChat&muc)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&List&String&&listUser&=&new&ArrayList&String&();&&
&&&&&&&&Iterator&String&&it&=&muc.getOccupants();&&
&&&&&&&&//&遍历出聊天室人员名称&&
&&&&&&&&while&(it.hasNext())&{&&
&&&&&&&&&&&&//&聊天室成员名字&&
&&&&&&&&&&&&String&name&=&StringUtils.parseResource(it.next());&&
&&&&&&&&&&&&listUser.add(name);&&
&&&&&&&&}&&
&&&&&&&&return&listU&&
&&&&&*&发送文件&
&&&&&*&@param&user&
&&&&&*&@param&filePath&
&&&&public&void&sendFile(String&user,&String&filePath)&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&&&
&&&&&&&&//&创建文件传输管理器&&
&&&&&&&&FileTransferManager&manager&=&new&FileTransferManager(getConnection());&&
&&&&&&&&//&创建输出的文件传输&&
&&&&&&&&OutgoingFileTransfer&transfer&=&manager&&
&&&&&&&&&&&&&&&&.createOutgoingFileTransfer(user);&&
&&&&&&&&//&发送文件&&
&&&&&&&&try&{&&
&&&&&&&&&&&&transfer.sendFile(new&File(filePath),&"You&won't&believe&this!");&&
&&&&&&&&}&catch&(XMPPException&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&*&获取离线消息&
&&&&&*&@return&
&&&&public&Map&String,&List&HashMap&String,&String&&&&getHisMessage()&{&&
&&&&&&&&if&(getConnection()&==&null)&&
&&&&&&&&&&&&return&&&
&&&&&&&&Map&String,&List&HashMap&String,&String&&&&offlineMsgs&=&&&
&&&&&&&&try&{&&
&&&&&&&&&&&&OfflineMessageManager&offlineManager&=&new&OfflineMessageManager(&&
&&&&&&&&&&&&&&&&&&&&getConnection());&&
&&&&&&&&&&&&Iterator&Message&&it&=&offlineManager.getMessages();&&
&&&&&&&&&&&&int&count&=&offlineManager.getMessageCount();&&
&&&&&&&&&&&&if&(count&&=&0)&&
&&&&&&&&&&&&&&&&return&&&
&&&&&&&&&&&&offlineMsgs&=&new&HashMap&String,&List&HashMap&String,&String&&&();&&
&&&&&&&&&&&&while&(it.hasNext())&{&&
&&&&&&&&&&&&&&&&Message&message&=&it.next();&&
&&&&&&&&&&&&&&&&String&fromUser&=&StringUtils.parseName(message.getFrom());&&
&&&&&&&&&&&&&&&&;&&
&&&&&&&&&&&&&&&&HashMap&String,&String&&histrory&=&new&HashMap&String,&String&();&&
&&&&&&&&&&&&&&&&histrory.put("useraccount",&&
&&&&&&&&&&&&&&&&&&&&&&&&StringUtils.parseName(getConnection().getUser()));&&
&&&&&&&&&&&&&&&&histrory.put("friendaccount",&fromUser);&&
&&&&&&&&&&&&&&&&histrory.put("info",&message.getBody());&&
&&&&&&&&&&&&&&&&histrory.put("type",&"left");&&
&&&&&&&&&&&&&&&&if&(offlineMsgs.containsKey(fromUser))&{&&
&&&&&&&&&&&&&&&&&&&&offlineMsgs.get(fromUser).add(histrory);&&
&&&&&&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&&&&&List&HashMap&String,&String&&&temp&=&new&ArrayList&HashMap&String,&String&&();&&
&&&&&&&&&&&&&&&&&&&&temp.add(histrory);&&
&&&&&&&&&&&&&&&&&&&&offlineMsgs.put(fromUser,&temp);&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&offlineManager.deleteMessages();&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&offlineM&&
&&&&&*&判断OpenFire用户的状态&strUrl&:&&
&&&&&*&url格式&-&:9090/plugins/presence&
&&&&&*&/status?jid=user1@SERVER_NAME&type=xml&&
&&&&&*&返回值&:&0&-&用户不存在;&1&-&用户在线;&2&-&用户离线&&
&&&&&*&说明&:必须要求&OpenFire加载&presence&插件,同时设置任何人都可以访问&
&&&&&*/&&&&
&&&&public&int&IsUserOnLine(String&user)&{&&
&&&&&&&&String&url&=&"http://"+SERVER_HOST+":9090/plugins/presence/status?"&+&&
&&&&&&&&&&&&&&&&"jid="+&user&+"@"+&SERVER_NAME&+"&type=xml";&&
&&&&&&&&int&shOnLineState&=&0;&//&不存在&&
&&&&&&&&try&{&&
&&&&&&&&&&&&URL&oUrl&=&new&URL(url);&&
&&&&&&&&&&&&URLConnection&oConn&=&oUrl.openConnection();&&
&&&&&&&&&&&&if&(oConn&!=&null)&{&&
&&&&&&&&&&&&&&&&BufferedReader&oIn&=&new&BufferedReader(new&InputStreamReader(&&
&&&&&&&&&&&&&&&&&&&&&&&&oConn.getInputStream()));&&
&&&&&&&&&&&&&&&&if&(null&!=&oIn)&{&&
&&&&&&&&&&&&&&&&&&&&String&strFlag&=&oIn.readLine();&&
&&&&&&&&&&&&&&&&&&&&oIn.close();&&
&&&&&&&&&&&&&&&&&&&&System.out.println("strFlag"+strFlag);&&
&&&&&&&&&&&&&&&&&&&&if&(strFlag.indexOf("type=\"unavailable\"")&&=&0)&{&&
&&&&&&&&&&&&&&&&&&&&&&&&shOnLineState&=&2;&&
&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&if&(strFlag.indexOf("type=\"error\"")&&=&0)&{&&
&&&&&&&&&&&&&&&&&&&&&&&&shOnLineState&=&0;&&
&&&&&&&&&&&&&&&&&&&&}&else&if&(strFlag.indexOf("priority")&&=&0&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&||&strFlag.indexOf("id=\"")&&=&0)&{&&
&&&&&&&&&&&&&&&&&&&&&&&&shOnLineState&=&1;&&
&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&&&&&&&}&catch&(Exception&e)&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&shOnLineS&&
&&&&&*&加入providers的函数&ASmack在/META-INF缺少一个smack.providers&文件&
&&&&&*&@param&pm&
&&&&public&void&configureConnection(ProviderManager&pm)&{&&
&&&&&&&&//&Private&Data&Storage&&
&&&&&&&&pm.addIQProvider("query",&"jabber:iq:private",&&
&&&&&&&&&&&&&&&&new&PrivateDataManager.PrivateDataIQProvider());&&
&&&&&&&&//&Time&&
&&&&&&&&try&{&&
&&&&&&&&&&&&pm.addIQProvider("query",&"jabber:iq:time",&&
&&&&&&&&&&&&&&&&&&&&Class.forName("org.jivesoftware.smackx.packet.Time"));&&
&&&&&&&&}&catch&(ClassNotFoundException&e)&{&&
&&&&&&&&&&&&Log.w("TestClient",&&
&&&&&&&&&&&&&&&&&&&&"Can't&load&class&for&org.jivesoftware.smackx.packet.Time");&&
&&&&&&&&}&&
&&&&&&&&//&Roster&Exchange&&
&&&&&&&&pm.addExtensionProvider("x",&"jabber:x:roster",&&
&&&&&&&&&&&&&&&&new&RosterExchangeProvider());&&
&&&&&&&&//&Message&Events&&
&&&&&&&&pm.addExtensionProvider("x",&"jabber:x:event",&&
&&&&&&&&&&&&&&&&new&MessageEventProvider());&&
&&&&&&&&//&Chat&State&&
&&&&&&&&pm.addExtensionProvider("active",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/chatstates",&&
&&&&&&&&&&&&&&&&new&ChatStateExtension.Provider());&&
&&&&&&&&pm.addExtensionProvider("composing",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/chatstates",&&
&&&&&&&&&&&&&&&&new&ChatStateExtension.Provider());&&
&&&&&&&&pm.addExtensionProvider("paused",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/chatstates",&&
&&&&&&&&&&&&&&&&new&ChatStateExtension.Provider());&&
&&&&&&&&pm.addExtensionProvider("inactive",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/chatstates",&&
&&&&&&&&&&&&&&&&new&ChatStateExtension.Provider());&&
&&&&&&&&pm.addExtensionProvider("gone",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/chatstates",&&
&&&&&&&&&&&&&&&&new&ChatStateExtension.Provider());&&
&&&&&&&&//&XHTML&&
&&&&&&&&pm.addExtensionProvider("html",&"http://jabber.org/protocol/xhtml-im",&&
&&&&&&&&&&&&&&&&new&XHTMLExtensionProvider());&&
&&&&&&&&//&Group&Chat&Invitations&&
&&&&&&&&pm.addExtensionProvider("x",&"jabber:x:conference",&&
&&&&&&&&&&&&&&&&new&GroupChatInvitation.Provider());&&
&&&&&&&&//&Service&Discovery&#&Items&&
&&&&&&&&pm.addIQProvider("query",&"http://jabber.org/protocol/disco#items",&&
&&&&&&&&&&&&&&&&new&DiscoverItemsProvider());&&
&&&&&&&&//&Service&Discovery&#&Info&&
&&&&&&&&pm.addIQProvider("query",&"http://jabber.org/protocol/disco#info",&&
&&&&&&&&&&&&&&&&new&DiscoverInfoProvider());&&
&&&&&&&&//&Data&Forms&&
&&&&&&&&pm.addExtensionProvider("x",&"jabber:x:data",&new&DataFormProvider());&&
&&&&&&&&//&MUC&User&&
&&&&&&&&pm.addExtensionProvider("x",&"http://jabber.org/protocol/muc#user",&&
&&&&&&&&&&&&&&&&new&MUCUserProvider());&&
&&&&&&&&//&MUC&Admin&&
&&&&&&&&pm.addIQProvider("query",&"http://jabber.org/protocol/muc#admin",&&
&&&&&&&&&&&&&&&&new&MUCAdminProvider());&&
&&&&&&&&//&MUC&Owner&&
&&&&&&&&pm.addIQProvider("query",&"http://jabber.org/protocol/muc#owner",&&
&&&&&&&&&&&&&&&&new&MUCOwnerProvider());&&
&&&&&&&&//&Delayed&Delivery&&
&&&&&&&&pm.addExtensionProvider("x",&"jabber:x:delay",&&
&&&&&&&&&&&&&&&&new&DelayInformationProvider());&&
&&&&&&&&//&Version&&
&&&&&&&&try&{&&
&&&&&&&&&&&&pm.addIQProvider("query",&"jabber:iq:version",&&
&&&&&&&&&&&&&&&&&&&&Class.forName("org.jivesoftware.smackx.packet.Version"));&&
&&&&&&&&}&catch&(ClassNotFoundException&e)&{&&
&&&&&&&&&&&&//&Not&sure&what's&happening&here.&&
&&&&&&&&}&&
&&&&&&&&//&VCard&&
&&&&&&&&pm.addIQProvider("vCard",&"vcard-temp",&new&VCardProvider());&&
&&&&&&&&//&Offline&Message&Requests&&
&&&&&&&&pm.addIQProvider("offline",&"http://jabber.org/protocol/offline",&&
&&&&&&&&&&&&&&&&new&OfflineMessageRequest.Provider());&&
&&&&&&&&//&Offline&Message&Indicator&&
&&&&&&&&pm.addExtensionProvider("offline",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/offline",&&
&&&&&&&&&&&&&&&&new&OfflineMessageInfo.Provider());&&
&&&&&&&&//&Last&Activity&&
&&&&&&&&pm.addIQProvider("query",&"jabber:iq:last",&new&LastActivity.Provider());&&
&&&&&&&&//&User&Search&&
&&&&&&&&pm.addIQProvider("query",&"jabber:iq:search",&new&UserSearch.Provider());&&
&&&&&&&&//&SharedGroupsInfo&&
&&&&&&&&pm.addIQProvider("sharedgroup",&&
&&&&&&&&&&&&&&&&"http://www.jivesoftware.org/protocol/sharedgroup",&&
&&&&&&&&&&&&&&&&new&SharedGroupsInfo.Provider());&&
&&&&&&&&//&JEP-33:&Extended&Stanza&Addressing&&
&&&&&&&&pm.addExtensionProvider("addresses",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/address",&&
&&&&&&&&&&&&&&&&new&MultipleAddressesProvider());&&
&&&&&&&&//&FileTransfer&&
&&&&&&&&pm.addIQProvider("si",&"http://jabber.org/protocol/si",&&
&&&&&&&&&&&&&&&&new&StreamInitiationProvider());&&
&&&&&&&&pm.addIQProvider("query",&"http://jabber.org/protocol/bytestreams",&&
&&&&&&&&&&&&&&&&new&BytestreamsProvider());&&
&&&&&&&&//&Privacy&&
&&&&&&&&pm.addIQProvider("query",&"jabber:iq:privacy",&new&PrivacyProvider());&&
&&&&&&&&pm.addIQProvider("command",&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider());&&
&&&&&&&&pm.addExtensionProvider("malformed-action",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider.MalformedActionError());&&
&&&&&&&&pm.addExtensionProvider("bad-locale",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider.BadLocaleError());&&
&&&&&&&&pm.addExtensionProvider("bad-payload",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider.BadPayloadError());&&
&&&&&&&&pm.addExtensionProvider("bad-sessionid",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider.BadSessionIDError());&&
&&&&&&&&pm.addExtensionProvider("session-expired",&&
&&&&&&&&&&&&&&&&"http://jabber.org/protocol/commands",&&
&&&&&&&&&&&&&&&&new&AdHocCommandDataProvider.SessionExpiredError());&&
调用该工具类的方法很简单,用了一个单例模式,里面的方法都可以用相同的方法调用
XmppConnection.getInstance().login(username,password)
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 ios xmpp 创建房间 的文章

 

随机推荐