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

获取好友列表和加入好友都是 XMPP 协议中常见的操作,可以使用 XMPP 客户端库来实现。 获取好友列表: 获取好友列表需要先建立与服务器的连接,然后向服务器发送获取好友列表的请求,服务器会返回当前用户的好友列表。 在使用 XMPP 客户端库时,可以通过调用 `getRoster()` 方法来获取好友列表: ```java Roster roster = connection.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); for (RosterEntry entry : entries) { System.out.println(entry.getName() + " (" + entry.getUser() + ")"); } ``` 这段代码会输出当前用户的好友列表,每个好友的名称和 JID。 加入好友: 加入好友需要知道好友的 JID,然后向服务器发送加入好友的请求,服务器会向好友发送一个订阅请求,好友同意后就成为了当前用户的好友。 在使用 XMPP 客户端库时,可以通过调用 `sendPacket()` 方法来发送加入好友的请求: ```java Presence subscribe = new Presence(Presence.Type.subscribe); subscribe.setTo(buddyJID); connection.sendPacket(subscribe); ``` 这段代码会向好友发送一个订阅请求,其中 `buddyJID` 是好友的 JID。 好友同意后,当前用户会收到一个订阅通知,可以通过监听 `RosterListener` 的 `entriesAdded()` 方法来处理: ```java roster.addRosterListener(new RosterListener() { public void entriesAdded(Collection<String> addresses) { for (String address : addresses) { System.out.println("New buddy added: " + address); } } // ... }); ``` 这段代码会在当前用户的好友列表中添加新的好友,并输出好友的 JID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值