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

(2015-04-17 08:16:16)

转载▼
标签:

杂谈

 
转载本站文章请注明,转载自:日积月累[http://www.nlinux.net]
http://blog.sina.com.cn/s/blog_14817d9b60102vmag.html

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 NamejidTEXTn/aThe address of the roster entrysubNUMBERn/aThe subscription status of the entryaskNUMBERn/aThe ask status of the entryrecvNUMBERn/aFlag indicating the entry is a roster request that was receivednickVARCHAR255The 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                B@clover           0      0           -1           B
2                    B                A@clover           0     -1           1           null

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

rosterID            rank                 groupName

1                         0                          Friends

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

rosterID    username          jid                  sub    ask   recv   nick

1                  A                B@clover             1      -1       1        B
2                  B                A@clover            2       0       -1        A

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

rosterID           rank             groupName

2                       0                         Friends

此时,ofrostergroups表中的记录是:

rosterID            rank                 groupName

1                         0                          Friends

2                       0                            Friends

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

疑问: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, with a 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. openfire--好友管理实现好友添加及分组管理

    openfire中实现好友添加及分组管理. 主要基于两张table实现:ofroster,ofrostergroups. ofroster:用于记录好友关系(一对好友关系用两条记录来实现) ofros ...

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

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

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

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

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

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

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

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

  6. qq好友克隆-转好友

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

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

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

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

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

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

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

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

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

最新文章

  1. c语言inline详解
  2. 精通GridView(C#) (二)
  3. Curator-01
  4. 用bat实现自启动程序
  5. Python 技术篇-用PIL库修改图片透明度实例演示,改变png图片色道为RGBA、RGB
  6. CSVN部署安装,实现web管理svn
  7. vue 给url 中文参数 添加编码解码
  8. python请输入_python中的三种输入方式
  9. arm poky linux,Solved: Re: arm-poky-linux - NXP Community
  10. php rabbmq教程_PHP+RabbitMQ实现消息队列的完整代码
  11. php5.6 mongo 扩展,docker php5.6镜像创建,包括常用扩展安装
  12. 尚硅谷大数据开发Day03
  13. 如何快速提升数据分析能力
  14. chrome浏览器Flash版本过低解决方法
  15. 学习电商项目的经验总结(三)
  16. ryu实例---流表的操作
  17. echarts 力导向关系图
  18. 给女友定时发送睡前小故事
  19. index函数python查询所有_Python List index()方法
  20. 上交大计算机科学与技术,上海交通大学计算机科学与工程系(CSE)

热门文章

  1. java jdk 文档下载_Java帮助文档 JDK全系列 官方中英下载地址
  2. 关于Shell脚本执行python代码,出现No such file or directorython: can't open file的问题
  3. Java硬核福利,实战虚拟机+Springboot+缓存,java电子书教材下载
  4. 一个屌丝程序猿的人生(三十九)
  5. Windows 7 纯净版各版本下载
  6. C#开发Android应用程序的流程
  7. dynamipsGUI+VMware
  8. 标准ACL(Standard ACL)
  9. 数字化医院网络终端安全管理
  10. Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-6-写文件writeFile和git SCM