好友花名册官方解析:

ofRoster (buddy rosters or lists)Column Name Type Length Description

rosterID NUMBER n/a ID of roster (Primary Key)
username VARCHAR 32 User Name
jid 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

字段的具体分析:

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.

代码操作:

PacketListener myListener = new PacketListener() {      
             public void processPacket(Packet packet) {  
              if(packet instanceof Message) {
               Message message = (Message) packet;
               String type = message.getType().toString();
               if(type.equals("chat")) {
                //接收消息
                if(message.getBody()!=null){
                 //保存信息到客户端数据库
                                     }
                }  
               }
              } else if(packet instanceof Presence) {
               Presence presence = (Presence) packet;
               String type = presence.getType().toString();
               boolean b= TalkService.this.roster.contains(packet.getFrom());
               Log.i(tag, b+"");
      
               Roster roster = connection.getRoster();
            RosterEntry rosterEntry = roster.getEntry(presence.getFrom());    
             
            String itemType="";
            
            if(rosterEntry!=null){
             Log.e(tag, "PacketListener Presence: rosterEntry.getName()= "+rosterEntry.getName()+
               " - rosterEntry.getUser()="+rosterEntry.getUser()+
               " - rosterEntry.getStatus()="+rosterEntry.getStatus()+
               "  -rosterEntry.getType()= "+rosterEntry.getType());
             itemType=rosterEntry.getType().toString();
            }
            Log.e(tag, "itemType=="+itemType);
               if(type.equals("subscribe")) {//我收到对方的加好友的请求
                //添加好友请求
                FriendRelationParam param = new FriendRelationParam();
                TalkCallback callback = new TalkCallback();
                callback.from = getUId(presence.getFrom());
                callback.to = getUId(presence.getTo());
                try {
        param.callbackStr = callback.toJsonObject().toString();
       } catch (Exception e) {
        e.printStackTrace();
       }
                param.userId = Long.parseLong(callback.to);
                param.friendUid = Long.parseLong(callback.from);
                
                startFriendRelation(param);
                
                if("none".equals(itemType)){//收到对方的加好友的请求
                 Log.i(tag, "type="+type+"  我收到对方的加好友的请求");
                }
                
                if("to".equals(itemType)){//我加对方好友后,对方同意,给我发回的交友请求
                 Log.i(tag, "type="+type+"  我加对方好友后,对方同意,给我发回的交友请求");
                }
                
                
               }else if("subscribed".equals(type)){//对方同意加我为好友 
                
                
                if("both".equals(itemType)){//双方互为好友关系建立
                 Log.i(tag, "type="+type+"  双方互为好友关系建立!");
                }
                
                
                Log.e("TalkService"+Thread.currentThread().getName(), presence.getFrom()+"同意了我["+packet.getTo()+"]的加好友请求 ");
               }else if(type.equals("unsubscribe")) {//对方发起了把我删除了||或者拒绝    //拒绝的时候只会走这A
                
                if("none".equals(itemType)){//拒绝
                 Log.i(tag, "type="+type+"  我被拒绝!!!");
                }
                if("to".equals(itemType)){//我收到被对方删除
                 Log.i(tag, "type="+type+"  我收到被对方删除");
                }
                
                
               }else if(type.equals("unsubscribed")) {//对方把我删除了   //删除的时候 会走A,同时再走一次这
                
                if("none".equals(itemType)){// 我被删除  ,双方关系解除**************************
                 Log.i(tag, "type="+type+"  我被删除的!!!");
                }
                
                
               }else if(type.equals("available")) {//对方告诉我他在线
//                presence = new Presence(Presence.Type.available);
//                presence.setTo(presence.getFrom());
//                connection.sendPacket(presence);
               }
               
               
              }else if(packet instanceof AuthMechanism) {
               
               
              }
              
             }      
         };

openfire--好友管理各种状态纠结相关推荐

  1. 连接好友服务器失败 无法显示,不显示好友的网络状态

    不显示好友的网络状态 内容精选 换一换 首先请确保您的集群已经成功启用Istio,在"总览 > 网络总览"处可以查看,然后确认已经在服务列表页面创建了一个服务,至少包含一个组 ...

  2. 微信好友管理软件哪个最好? 求靠谱的

    管理微信客户对于企业而言是可以解决企业一系列难题的,毕竟员工管控不当会让企业工作效率持续低下.客户资源不断流失.因此管理微信客户是一个重大的问题,如何管理微信客户是管理员们急切想要解决一个难题.管理微 ...

  3. XMPP协议 好友管理(协议)

    XMPP协议 好友管理(协议) 标签: c语言xmpp好友管理 2015-11-11 14:43 260人阅读 评论(0) 收藏 举报  分类: XMPP协议(1)  XMPP好友管理-名册管理(RF ...

  4. Android开发好友管理,好友管理

    好友管理 获取好友列表 获取好友的 username list,开发者需要根据 username 去自己服务器获取好友的详情. List usernames = EMClient.getInstanc ...

  5. Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态

    使用 Vuex 管理应用状态 1. 引入背景 像先前我们是有导航菜单栏收缩和展开功能的,但是因为组件封装的原因,隐藏按钮在头部组件,而导航菜单在导航菜单组件,这样就涉及到了组件收缩状态的共享问题.收缩 ...

  6. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...

  7. Java使用cookie和session管理用户状态

    一个做移动端的,要做服务端的一些工作,没办法,工作还的继续,这就是生活,废话不说,总结一下这一天的东西,逆水行舟,努力,努力. Java什么是状态管理 一般我们会将浏览器与服务器之间多次的交互当作一个 ...

  8. 校园BBS+校园贴吧 发帖 评论 点赞 回复 用户管理 好友管理 聊天的实现

    这个项目是今年7月在校实习期间写的,因为前段时间复习秋招,没来的及分享,现在补上~~~ 因为7个人一组,剩余6个人考研,也不会写Android,就让他们去写文档了.我一个人加班加点 花了10天撸完了, ...

  9. 【5G NR】NAS连接管理—CM状态

      目录 NAS连接管理 CM-IDLE状态 CM-CONNECTED状态 5GS CM状态模型 NAS连接管理 NAS连接管理包括通过N1接口在UE和AMF之间建立和释放NAS信令连接的功能.NAS ...

最新文章

  1. mysql中如何设置过滤器_mysql 如何动态修改复制过滤器
  2. 旅行售货员 java_JAVA旅行商售货TSP
  3. 人类已无法阻挡AI?围棋后AI再破最强人类堡垒,通杀智力比赛
  4. 算法系列之五 希尔排序
  5. ARCGIS开发中类型XXX在未被引用的程序集中定义的解决办法
  6. iTween基础之功能简介
  7. 疯子的算法总结(二) STL Ⅰ 算法 ( algorithm )
  8. 表格存储技术方案实践及客户案例分享
  9. 三维重建 几何方法 深度学习_基于深度学习的视觉三维重建研究总结
  10. 云付认证已通过可以支付吗_海科融通丨刷新支付日常问题【附交易操作步奏】...
  11. C# Winform 窗体美化(九、嵌入窗体)
  12. AssetManager asset的使用
  13. jsapi支付签名_小程序开发之微信支付
  14. 【转】Java的package和import机制
  15. 加密软件pgp 使用教程
  16. win10修改dns服务器命令,Win10怎么更改首选DNS服务器地址?
  17. cs1.6服务器修改游戏类型,如何自己架设CS1.6服务器?
  18. 小小屋影视全网搜索在线播放工具
  19. python中int函数_int()函数以及Python中的示例
  20. 快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)

热门文章

  1. 10个顶级Python实用库,推荐你试试!
  2. 如何从excel的多行中随机选出n行
  3. html 颜色镂空,【前端】canvas应该怎么做镂空(透明色)文字呢?
  4. java网店源码_java 的电商系统的完整源码
  5. python题目-统计出字符串中各字符出现的次数并以字典形式保存并排序
  6. Java常量池的一点理解
  7. java生成excel/zip压缩文件下载
  8. Java Web快速开发框架 ---- JSPX
  9. FPGA第四节(一):AD7606时序图分析以及接口模块编译
  10. 《The Wiley Handbook of Human Computer Interaction》Part V Input / Output 以身体为中心的听觉反馈设计原则 翻译