XMPP客户端库Smack 4.0.6版开发之六

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620853 XMPP客户端库Smack 4.0.6版开发之六作者:chszs,转载需注明。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620853

XMPP客户端库Smack 4.0.6版开发之六

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

五、名单Roster和在线状态Presence

名单可以让你跟踪其他用户是否在线,而且名单可以让你把用户组织到群组,比如朋友群或工作群。而其它的即时通信IM系统则把名单Roster视为好友列表、联系人列表等等。

 

1、名单条目

名单中的每一个用户都由RosterEntry来表示,它包括:

1)一个XMPP地址(比如”jsmith@example.com”)

2)你为用户编写的备注姓名(比如”Joe”)

3)名单中的群列表。如果名单的条目不属于任何群组,那么它被称为"unfiledentry"。

下面的代码片段会打印名单中所有的条目:

Rosterroster = connection.getRoster();

Collection<RosterEntry>entries = roster.getEntries();

for(RosterEntryentry : entries){

    System.out.println(entry);

}

 

还有获取单个条目的方法、获取"unfiledentry"的方法,获取一个群或所有群的方法。

 

2、在线状态

名单中的每个条目都有一个与之相关的在线状态。Roster.getPresence(Stringuser)方法会返回一个表示用户是否在线的Presence对象或者为空。为空是你还没有订阅用户是否在线的返回。

注意:通常情况下,在线状态的订阅总是绑定到名单中的用户,但这并不适应所有的情况。

 

一个用户的在线状态要么是在线,要么是离线。当用户在线时,他们的在线状态还可以包含扩展的信息,比如用户当前正在做什么,用户是否愿意被打扰等等。具体参考Presence类。

 

3、监听名单Roster和在线状态Presence的改变

Roster类的典型应用场景是以树状结构显示用户群和列表,并且用户列表中包含用户是否在线的状态。比如,参考下图所示的一个ExodusXMPP客户端的Roster。

 

在线状态的信息可能会经常变化,Roster条目也可能经常修改或删除。要监听Roster和Presence数据的变化,你应该使用RosterListener。要得到Roster改变的所有提醒,那么必须在登录XMPP服务器之前注册RosterListener。下面的代码片段注册了一个Roster的RosterListener,它能够在标准输出中打印任何Presence的改变。一个标准的客户端可以使用类似的代码用变化的信息来更新Roster界面。

Rosterroster = con.getRoster();

roster.addRosterListener(newRosterListener(){

    // 忽略事件public void entriesAdded(Collection<String> addresses){}

    public void entriesDeleted(Collection<String>addresses){}

    public voidentriesUpdated(Collection<String> addresses){}

    public void presenceChanged(Presencepresence){

        System.out.println(“Presencechanged: “+ presence.getFrom() + “ “ + presence);

    }

});

 

4、添加Entries到Roster

Roster和Presence使用一种基于权限的模型,用户必须得到其他人的许可才能把这些人添加到Roster。这样可以保护用户的隐私,确保了只有获得同意的用户才能查看到他们的Presence信息。因此,当你想添加某个用户到你的Roster中,必须得到该用户接受你的请求才可以。

如果有用户请求订阅你的在线状态Presence,这个用户必须先把你添加到他的Roster,因此他会发起请求,你必须选择接受或拒绝该请求。Smack通过以下三种方式来处理Presence的预订请求:

1)自动接受所有Presence的预订请求

2)自动拒绝所有Presence的预订请求

3)手动处理每一个Presence预订请求

这三种方式可以通过Roster.setSubscriptionMode(intsubscriptionMode)方法来设置请求的处理方式。简单的客户端通常使用第一种自动方式处理预订请求,而功能比较全的客户端应该选择第三种手动处理请求的方式,让终端用户自行决定是接受请求或是拒绝请求。如果使用手动方式,应该注册一个PacketListener来监听Presence.Type.SUBSCRIBE类型的Presence包。


目录
相关文章
|
5月前
|
JavaScript 前端开发 网络协议
从理论到实践:全面剖析Python Web应用中的WebSocket实时通信机制
【7月更文挑战第17天】WebSocket在实时Web应用中扮演重要角色,提供全双工通信,减少延迟。本文详述了Python中使用`websockets`库创建服务器的步骤,展示了一个简单的echo服务器示例,监听8765端口,接收并回显客户端消息。客户端通过JavaScript与服务器交互,实现双向通信。了解WebSocket的握手、传输和关闭阶段,有助于开发者有效利用WebSocket提升应用性能。随着实时需求增长,掌握WebSocket技术至关重要。
316 6
|
移动开发 监控 网络协议
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
【转】Cowboy 开源 WebSocket 网络库
原文链接: http://www.cnblogs.com/gaochundong/p/cowboy_websockets.html
1083 0
|
XML 数据格式
XMPP学习——3、XMPP协议学习补充
流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节。这些术语的定义如下。 XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XML元素的交换. XML流的开始明确表达为一个打开的 "流头" (即, 一个包含了适当树形和命名空间声明的 XML &lt;stream&gt; 标签), 而这个XML流
1254 0
XMPP客户端库Smack
原文博客地址:http://blog.csdn.net/chszs/article/details/41576877
858 0
XMPP客户端库Smack 4.0.6版开发之五
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620843 XMPP客户端库Smack 4.0.6版开发之五 作者:chszs,转载需注明。
688 0
|
数据安全/隐私保护 安全
XMPP客户端库Smack 4.0.6版开发之四
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41620825 XMPP客户端库Smack 4.0.6版开发之四 作者:chszs,转载需注明。
891 0
|
数据安全/隐私保护 安全 开发者
XMPP客户端库Smack 4.0.6版开发之三
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/41594855 XMPP客户端库Smack 4.0.6版开发之三 作者:chszs,转载需注明。
751 0

相关实验场景

更多