XMPP客户端关于用户组排序的一个可能的实现方法

来源:互联网 发布:8787端口 编辑:程序博客网 时间:2024/05/22 12:18

group的存放格式

SDK将group list存放在storage:groups namespace中,group的位置就是其在list中的顺序。也就是说,在下面举的例子中,group0的位置是0,SH的位置是1...。
SDK会将Personal group和LDAP group都存在storage中,type='ldap'说明这个group是LDAP group,否则是Personal group(因为LDAP和Personal的group名称有可能相同,因此我们必须要区分是LDAP还是Personal的group)。

SDK在Login的过程中,会向UI fire OnListGroup回调,这时候必须要过滤掉LDAP类型的group(LDAP的group会有专门的回调)。

<iq id='conid27' type='set'>  <query xmlns='jabber:iq:private'>    <storage xmlns='http://jabber.com/jabber/storage:groups'>      <group type='ldap'>ldap group id</group>   //position is 0      <group>SH</group>   //position is 1      <group>Team</group> //pos is 2      <group>Test Users</group> //pos is 3      <group>US</group> //pos is 4      <group>SZ</group>  //pos is 5      <group>HZ</group>  //pos is 6      <group>HF</group> //pos is 7    </storage>  </query></iq>

SDK和UI之间的接口

UI在现实group list之前,调用SDK的GetGroupPos方法获取每个group的position,然后排序显示。
用户拖动一个group时,UI调用SDK的MoveGroup方法,SDK将重新排好序的Group list存到storage中,同时向UI fire OnGroupMoved回调,UI收到回调以后,调用SDK的GetGroupPos方法获取所有group的position,然后重新排序显示。