zoukankan      html  css  js  c++  java
  • XMPP通讯开发-服务器好友获取以及监听状态变化

    在 XMPP通讯开发-好友获取界面设计   我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据。

    这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentation/roster.html,这个是官方的文档,介绍了我们可以使用Roster来获取,同时我们还可以注册监听器,当用户的状态信息发生变化的时候可以通知UI进行更新。

    获取好友实体

    Roster是一个集合,我们看一下集合中的实体是由什么组成的。

    Every user in a roster is represented by a RosterEntry, which consists of:

    • An XMPP address (e.g.jsmith@example.com).
    • A name you've assigned to the user (e.g. "Joe").
    • The list of groups in the roster that the entry belongs to. If the roster entry belongs to no groups, it's called an "unfiled entry".

    简单的说就是XMPP地址,用户名,用户组

     

     public void getRoster(){
            if(conn != null){
                roster = conn.getRoster();
                Collection<RosterEntry> entries = roster.getEntries();
                for(RosterEntry entry : entries){
                    System.out.println(entry);
                }
            }
       }

    我调试的打印信息如下,可以看到格式里面分别包含用户名,XMPP地址,用户组

    dfffff: dfff@zhangjie [Friends]
    sdfsdf:
    sdf@zhangjie [Friends]
    123:
    123@zhangjie [Friends]

    获取好友的分组

    代码如下:

     

      Collection<RosterGroup> groups = roster.getGroups();
               for(RosterGroup group : groups){
                   System.out.println(group.getName());
               }

    终端的调试信息:

    客户
    好友
    Friends

    当然我们还可以添加用户组和用户同时也可以删除

    createGroup

    createEntry

    removeEntry

    监听好友状态变化

    Roster还能够监听状态变化,方法如下:

     

    /**
         * 注册监听状态变化
         */
        public void getRosterPresenceChange(){
            if(roster != null){
                roster.addRosterListener(new RosterListener(){
                    @Override
                    public void entriesAdded(Collection<String> addresses) {
                        
                    }
    
                    @Override
                    public void entriesUpdated(Collection<String> addresses) {
                        
                    }
    
                    @Override
                    public void entriesDeleted(Collection<String> addresses) {
                        
                    }
    
                    @Override
                    public void presenceChanged(Presence prsnc) {
                        System.out.println("Change: "+ prsnc.getFrom()+" status :"+prsnc.getStatus());
                    }
                    
                });
            }
        }


    将好友中的123登出:

    Change: 123@zhangjie/Spark 2.6.3 status :null

    然后登陆123:

    Change: 123@zhangjie/Spark 2.6.3 status :在线

    下一章会将界面和后台数据结合起来,实现用户列表功能


    源码项目:https://github.com/jwzhangjie/IChat_PC.git

  • 相关阅读:
    站立会议第四天
    站立会议第三天
    站立会议第二天
    站立会议第一天
    团队项目估算
    团队计划会议
    《人月神话》阅读笔记01
    《构建之法》阅读笔记06
    微软买书问题
    找水王2
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3341903.html
Copyright © 2011-2022 走看看