XMPP客户端库Smack 4.1.4版官方开发文档之五

2023-11-15

本文转载自:博客主页: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包。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XMPP客户端库Smack 4.1.4版官方开发文档之五 的相关文章

  • 区块链系统架构图_区块链模型架构

    一般说来 区块链系统由数据层 网络层 共识层 激励层 合约层和应用层组成 其中 数据层封装了底层数据区块以及相关的数据加密和时间戳等技术 网络层则包括分布式组网机制 数据传播机制和数据验证机制等 共识层主要封装网络节点的各类共识算法 激励层
  • 如何成为一名合格的互联网大厂Python工程师?

    Python开发工程师 是一个在IT行业圈子里一直都很热门的话题 无论是像腾讯 百度这样的大型公司 还是刚刚起步的初创公司 都会招python开发工程师 python已成为越来越多开发者的开发语言选择 而python开发工程师工资基本上都高
  • 投影矩阵的推导(Deriving Projection Matrices)

    本文乃 lt 投影矩阵的推导 gt 译文 原文地址为 http www codeguru com cpp misc misc math article php c10123 1 Deriving Projection Matrices ht
  • ibmmq生产事故

    ibmmq生产事故 在代码中创建了一个没使用的mq的连接对象 也没有进行资源释放 上生产前最好确保连接队列管理器的资源在流程结束后都得到了释放 disconnect 或者进行大批量报文测试 至少需要一百笔 因为ibmmq默认通道连接数是10
  • Neo4j 5的自治图数据库集群

    原文作者 John Stegeman 图数据库产品专家 Neo4j 基于原文翻译并补充整理而成 新近发布的Neo4j 版本5推出了自治集群 Autonomous Cluster 以支持易于部署 可扩展 自容错等重要特性 下面我们就来一睹自治
  • chromedp模拟键盘回车事件

    chromedp 的 SendKeys 可以模拟各种键盘事件 并且支持组合使用 假设以下场景 有一个输入框 我们想模拟键盘输入内容并回车
  • Vuforia VirtualButtons 虚拟按键

    Vuforia VirtualButtons 虚拟按键 注意 1 不介意使用Unity自带的Vuforia 引擎 否则下载商场里的示例项目时可能会因为版本问题产生报错 推荐直接从商店下载示例的引擎使用 2 不推荐下载目前最新9 2版引擎 导

随机推荐

  • Matlab 函数进阶:使用匿名函数和内嵌函数处理多变量传递问题(Matlab 7.0以上)

    from http asc 2dark org node 70 Matlab 函数进阶 使用匿名函数 Anonymous Function 和内嵌函数 Nested Function 处理多变量传递问题 Matlab 7 0以上 问题 有一
  • WPF工控组态软件之温度计

    WPF以其丰富灵活的控件样式设计 相较于WinForm而言 一直是工控组态软件的宠儿 经过前两文章的学习 已经对WPF开发工控组态软件有了一个基本的了解 今天继续学习温度计的开发 仅供学习分享使用 如有不足之处 还请指正 涉及知识点 在本示
  • NotePad++遇到电脑重启或者突然崩溃,已经打开的文件信息和未保存的文件没了怎么办?

    1 崩溃前打开的文件列表信息可以在如下文件中找到 C Users 你当前用户的用户名 AppData Roaming Notepad session xml 里面存放了文件打开列表 2 崩溃前未保存的文件可以在如下路径进行恢复 C User
  • Node.js Buffer的简单使用

    Node js 目前支持的字符编码包括 ascii 仅支持 7 位 ASCII 数据 如果设置去掉高位的话 这种编码是非常快的 utf8 多字节编码的 Unicode 字符 许多网页和其他文档格式都使用 UTF 8 utf16le 2 或
  • JVM 垃圾回收

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡 两种方法 简单的介绍一下强引用 软引用 弱引用 虚引用 虚引用与软引用和弱引用的区别 使用软引用能带来的好处 如何判断一个常量是废弃常量 如何判断一个
  • Linux基线检查( 一)

    什么是基线 即安全基线配置 诸如操作系统 中间件和数据库的一个整体配置 这个版本中各项配置都符合安全方面的标准 比如在系统安装后需要按安全基线标准 将新机器中各项配置调整到一个安全 高效 合理的数值 风险分类 系统 等保三级 CentOS
  • linux 普通用户 Cannot create VM thread. Out of system resources.

    在linux系统下开发 使用普通用户进行应用部署 出现JVM内存问题如下 Error occurred during initialization of VM Cannot create VM thread Out of system re
  • Basic Level 1023 组个最小数 (20分)

    题目 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 10015558 现给定数字 请
  • Python学习笔记第六十四天(Matplotlib 网格线)

    Python学习笔记第六十四天 Matplotlib 网格线 普通网格线 样式网格线 后记 Matplotlib 网格线 我们可以使用 pyplot 中的 grid 方法来设置图表中的网格线 grid 方法语法格式如下 matplotlib
  • 系统架构设计师(第二版)学习笔记----信息系统基础

    原文链接 系统架构设计师 第二版 学习笔记 信息系统基础 文章目录 一 信息系统概述 1 1 信息系统的5个基本功能 1 2 信息系统发展阶段 1 3 初始阶段的主要特点 1 4 传播阶段的主要特点 1 5 控制阶段的主要特点 1 6 集成
  • lock_guard和unique_lock

    锁 锁用来在多线程访问同一个资源时防止数据竞险 保证数据的一致性访问 多线程本来就是为了提高效率和响应速度 但锁的使用又限制了多线程的并行执行 这会降低效率 但为了保证数据正确 不得不使用锁 它们就是这样纠缠 本文主要讨论 c 11 中的两
  • 网络安全工程师的职责 103.219.28.X

    网络安全工程师是专门从事网络安全防护 攻击和事故处理等工作的技术人员 其主要职责包括 评估和分析网络漏洞和威胁情况 制定网络安全策略和方案 开发和实施安全解决方案 监控和维护网络安全系统 应对网络攻击和事故等 他们需要掌握网络安全技术 网络
  • DateTime关于时区的学习

    一 时区的概念 首先来了解时区的概念 为了解决世界不同各地在时间上的差异 人们定义了时区 时区是地球上的区域使用同一个时间定义 人们将时区分为24个 它们是中时区 零时区 东1 12区 西1 12区 每个时区横跨经度15度 时间正好是1小时
  • SQL Server临时表

    创建临时表 方法一 create table 临时表名 字段1 约束条件 字段2 约束条件 create table 临时表名 字段1 约束条件 字段2 约束条件 方法二 select into 临时表名 from 你的表 select i
  • 【JAVA设计模式】之桥接模式(BridgePattern)

    桥接模式的作用是将两样东西连接起来 比如桥梁把河的两岸连接起来 桥接模式把 类的功能层次结构 和 类的实现层次结构 连接起来 类的层次结构 类的功能层次 父类通过定义抽象方法来定义接口API 类的实现层次 子类通过实现具体方法来实现接口AP
  • FP64、FP32、FP16、FP8简介

    目录 1 单精度浮点数FP32的表示 2 半精度浮点数FP16的表示 3 双精度浮点数FP64的表示 4 FP8 5 写在最后 1 单精度浮点数FP32的表示 浮点数由三部分组成 符号位 指数部分 尾数部分 以单精度浮点数为例 如图所示 符
  • 好多粉使用百度OCPC api提交后如何手动选择有效咨询回传?

    推广每天会有复制 虽然绝大部分是正常的数据 但也有可能有的是同行刷的 有的是没有添加成功的数据 如果不处理 会造成无效数据上传 只能投放的AI可能就要被某些别有用心的人玩坏了 所以我们为解决这个痛点 开发了手动回传功能 并且系统自动帮你标识
  • VS2019现有项目添加Qt界面

    目录 Qt安装教程 Qt下载 Qt安装 VS Qt插件 配置Qt插件 配置包含目录及链接器 添加QT界面 添加UI界面 配置文件属性 编译UI文件 添加 h和 cpp文件 简单运行测试 双击ui文件打开Qt Designer闪退问题 与VS
  • c++实现霍夫曼编码

    c 实现霍夫曼编码 计算信源的熵 平均码长 编码效率 冗余度与压缩比 考虑到指针可能对新手不太友好 这里用的是vector容器 用法类似数组 可以动态扩容 存储树形结构 大致原理就是n号结点的左右子树分别是2n和2n 1号结点 Huffma
  • XMPP客户端库Smack 4.1.4版官方开发文档之五

    本文转载自 博客主页 http blog csdn net chszs 五 名单Roster和在线状态Presence 名单可以让你跟踪其他用户是否在线 而且名单可以让你把用户组织到群组 比如朋友群或工作群 而其它的即时通信IM系统则把名单