openfire中实现好友添加及分组管理。

主要基于两张table实现:ofroster,ofrostergroups。

ofroster:用于记录好友关系(一对好友关系用两条记录来实现)

ofrostergroups:用于记录好友分组

特别说明:openfire中用户的主键是自然主键,也就是username。没有使用自增ID。

我们先来看一下官方(http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database-guide.html)对 两张表的描述:

ofRoster (buddy rosters or lists)Column Name Type Length Description rosterIDNUMBERn/aID of roster (Primary Key)usernameVARCHAR32User Namejid
TEXT
n/a
The address of the roster entry
sub
NUMBER
n/a
The subscription status of the entry
ask
NUMBER
n/a
The ask status of the entry
recv
NUMBER
n/a
Flag indicating the entry is a roster request that was received
nick
VARCHAR
255
The nickname assigned to this roster entry

ofRosterGroups (Groups of buddy entries in a roster)Column Name Type Length Description rosterIDNUMBERn/aRoster ID (Primary Key)rankNUMBERn/aPosition of the entry (Primary Key)groupNameVARCHAR255The user defined name for this roster group

看不太明白?不要着急,我们慢慢分析。

假设有用户A,用户B。

当A申请加B为好友时(例如:A将B加入好亲人的分组中)。会在ofroster表中插入两条记录,

rosterID username jid sub ask recv nick

1 A 0 0 -1 B
2 B 0 -1 1 null

同时往ofrostergroups表中插入一条记录

rosterID rank groupName

1 0 亲人

这时B同意将A加为好友,并设置为家人分组中,那么会修改ofroster表中刚插入的两条记录,如下所示:

rosterID username jid sub ask recv nick

1 A 1 -1 1 B
2 B 2 0 -1 null

同时往ofrostergroups表中插入一条记录.

rosterID rank groupName

2 0 家人

到此为止,双方的好友关系便建立起来。

疑问:1.若B不同意呢?则不做任何操作。下一次,若B加A为好友,将等同于执行同意的操作。

2.如何查询某个人所有好友,和分组?

在ofroster中根据username便可获得某个用户的所有好友信息。然后根据每条记录的rosterid去ofrostergroups表中查找分组的名称即可。

3.当用户添加一个空的好友分组时,ofrostergroups表是否插入一条记录?

不插,测试发现并没有实质的插入一条记录,但用户可以看到这个分组名称,怎么回事?推测可能是存放在session中。测试发现当用户创建一个空的好友分组,然后下线,再上线时,发现该好友分组已消失。充分说明当好友分组为空时,并没有插库。

Notice the different status types? Here is a list of all of the different status types, witha brief description, also from the plugin's readme file.

askstatus

-1—  没有挂起的添加好友请求。

The roster item has no pending subscription requests.

0— 有挂起的添加好友请求。

The roster item has been asked for permission to subscribe to its presence but no response has been received.

1— 估计是有没有回复的删除请求吧

The roster owner has asked the roster item to be unsubscribed from its presence notifications but hasn't yet received confi rmation.

recvstatus

-1— 已经回复添加好友请求

There are no subscriptions that have been received but not presented to the user.

1— 接收到好友请求但是没有给好友回复

The server has received a subscribe request, but has not forwarded it to the user.

2— 估计是没有回复删除请求吧

The server has received an unsubscribe request, but has not forwarded it to the user.

substatus

-1—  应该删除这个好友

Indicates that the roster item should be removed.

0—  没有建立好友关系

No subscription is established.

1—  用户已经发出好友请求

The roster owner has a subscription to the roster item’s presence.

2—  收到好友请求并且加对方好友

The roster item has a subscription to the roster owner’s presence.

3—  好友已经相互添加

The roster item and the owner have a mutual subscription.

openfire--好友管理实现好友添加及分组管理相关推荐

  1. 微信php开发用户分组,asp.net微信开发用户分组管理的示例代码

    这篇文章主要介绍了asp.net微信开发中有关用户分组管理的相关内容,需要的朋友可以参考下 上一篇已讲解到新建用户分组,移动用户到分组的功能,这一章主要讲解修改分组名称和删除分组 直接上代码,废话不多 ...

  2. Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些操作

    下面就一起来学习一下,如何查询分组和添加分组等! 一.查询所有分组 通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到. /*** 获取所有组* * ...

  3. 领英工具:如何使用领英精灵在领英上有序归类分组管理客户?

    领英精灵专业针对全球最大的职场社交平台LinkedIn领英设计研发,专注于帮助每一位用户正确高效的在LinkedIn领英上积累开发客户. 强大的领英精灵为每一位用户赋能,让每一位用户借助领英精灵最大化 ...

  4. 腾讯QQ分组管理小分析——陌生人加入讨论组

    今天在想分组管理的问题,无意间看到了QQ的分组,感觉QQ的分组管理的挺方便的,想学习学习,于是就做了一次实验测试了一番,哈哈,发现了QQ讨论组的"陌生人加入"问题.这绝对是个问题, ...

  5. qq好友克隆-转好友

    如果您不是QQ会员: 从一个QQ中把好友克隆到另一个QQ中去,就本来是QQ会员才有的权利,但是你通过下面的方法一样也能完成的,你试试吧: 普通QQ号照样可以克隆QQ好友 相信大家手头都有几个备用的QQ ...

  6. android qq分组展开,Android仿qq分组管理的第三方库

    本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...

  7. mysql有3个共同好友_共同好友mysql

    1. 好友关系 传统:uid. friendId 缺陷:对于海量数据,100w用户,每人50个好友,则有 100w * 50的数据,数据量颇大 改进1:分表 根据uid hash成多个数据表,这样保障 ...

  8. 资源组 —— 助你轻松解决单账户内的资源分组管理难题

    最近,阿里云ResourceManager服务新增了"资源组管理"功能,以帮助客户解决企业内部多用户.多项目的资源分级管理难题.使用资源组管理,您可以对单个云账号下多个地域.多种资 ...

  9. 分享本地视频到微信好友和QQ好友

    最近在做一个项目,需要分享本地视频到微信好友和QQ好友,这里总结一下分享本地视频的方法. 一.分享到微信 刚开始分享到微信时,没有自己申请appid,而是使用了之前一个项目的appid,并修改包名,改 ...

最新文章

  1. Servlet,过滤器,监听器,拦截器的区别
  2. 冲向大牛之安卓---2014.11月面试经常碰到的一些问题
  3. 深入理解JMM(Java内存模型) --(六)final
  4. hadoop(9)--MapReduce入门WordCount
  5. Android-JSNative交互的几种可行性方案H5白屏问题解决方式
  6. except的实践经验
  7. cocos2dX 之数据存储
  8. 5G毫米波通信中一些量化的概念
  9. Modbus通信协议 【 初识 Modbus】
  10. 中等职业学校计算机专业定位,中等职业学校计算机专业教学探讨
  11. 快手上市首日涨近161% 两大创始人身家破千亿
  12. java用for打印正方形_java.java
  13. sql联接查询_SQL联接
  14. ask调制流程图_ASK调制解调系统设计与仿真MATLAB课程设计
  15. 【分享】李涛ps入门教程视频全集及精心整理包含素材
  16. 使用ENVI对遥感图像进行图像镶嵌、图像裁剪。
  17. windows设置定时任务并运行python脚本(windows任务计划)
  18. android的usb热插拔,Android M能让外部存储变成内部存储 支持U盘热插拔
  19. js颜色加深或者减淡
  20. ubuntu 18.04 VSCode沙绿色主题设置

热门文章

  1. 使用nginx设置代理服务器
  2. xammp1.9.2 mysql密码_xampp用mysql数据库密码
  3. Python制作一个自动发送弹幕的工具,让你看直播不冷场
  4. 一建证挂出去一年多少钱?
  5. 海伦司和奈雪,必有一战
  6. ANSYS静力学分析实例入门一
  7. MacOS下ohmyzsh安装
  8. Linux内核基础——Linux中断的概念
  9. input绑定的jedate日期控件的值改变时触发事件问题
  10. 华为4g模块在Linux怎么配置,linux2.6.30添加华为ME909S-821 4G模块驱动