1、XMPPConnection:它主要是用来创建一个跟XMPP服务端的Socket连接。它是与Jabber服务端的默认连接并且已经在RFC 3920中精确定义过了。示例如下:

    XMPPConnection connection=new XMPPConnection(configuration);

    connection.connect();

2、ConnectionConfiguration:当我们要建立跟服务端的连接时通过它来进行一些配置一些连接参数。例如,你可以通过它来配置trustore文件(保持信任的CA根证书)的存放路径。也可以启用和关闭一系列服务端证书验证的校验步骤。示例如下:

    ConnectionConfiguration cf =new ConnectionConfiguration(SERVER_HOST,SERVER_PORT);

    config.setReconnectionAllowed(true);

    config.setSendPresence(true);

    config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);

    config.setSASLAuthenticationEnabled(false);

    File file =new File("/mnt/sdcard/security/");

    file.mkdirs();

    config.setTruststorePath("/mnt/sdcard/security/cf.bks");

    config.setTruststorePassword("123456");

    config.setTruststoreType("bks");

    config.setSASLAuthenticationEnabled(true);

3、ProviderManager: 主要是管理解析XMPP packets自定义XML子文档的providers,主要存在两种providers:

  1. IQProvider: 将IQ请求解析到Java对象中。(PS:IQ--Info/Query,即信息与查询,它为XMPP通信提供请求与响应机制。它与HTTP协议的基本工作原理非常相似,允许获取和设置查询,与HTTP 的GET 和POST 动作类似。每个iq都必须有一个响应,通过必需的id 属性将响应与导致该响应的请求关联起来。主要由Get/Set/Result/Error四个节点属性)。
  2. PacketExtension:将依附于packets的XML子文档解析到PacketExtension实例中,主要是作扩展用,以后再补充。

  如果你想提供一个你自己定义的provider manager,你必须要在创建连接之前,即调用connection.connect()之前通过setInstance(ProviderManager)静态方法设置你的 provider manager。因为在创建连接之后再试图改变provider manager会报IllegalStateException异常。

4、Registration:代表一个注册的packets,其中,可以通过一个空的GET查询来获取服务端的所支持的注册信息;也可以通过一个SET来创建账号或者更新账号信息。账号一般应包括以下几个属性(不是必须的,你也可以添加你自己的属性):

  1、name -- the user's name.

  2、first -- the user's first name.

  3、last -- the user's last name.

  4、email -- the user's email address.

  5、city -- the user's city.

  6、state -- the user's state.

  7、zip -- the user's ZIP code.

  8、phone -- the user's phone number.

  9、url -- the user's website.

  10、date -- the date the registration took place.

  11、misc -- other miscellaneous information to associate with the account.

  12、text -- textual information to associate with the account.

  13、remove -- empty flag to remove account.

5、PacketFilter:通过一个boolean accept(Packet packet)方法来过滤packet的一些特殊属性,如packetID、packetType等。当我们要创建一个listeners或者collectors,就可以通过PacketFilter来过滤我们不需要关注的packet。Smack已经为我们已经预定义了一些PacketFilter,如果想多个PacketFilter组合使用,那就要使用AndFilter(即满足所有过滤条件才处理)和OrFilter(满足其中一个过滤条件就处理)了。当然,我们也可以自定义自己的PacketFilter,只要实现PacketFilter接口即可。

6、PacketListener:提供了通过一个特定的PacketFilter来监听packets的机制。它基于事件的编程风格,每当一个新的packet被发现,processPacket(Packet)方法就会被触发。

7、PacketCollector:提供了通过PacketFilter将一个或多个特定packets收集到一个结果队列中的机制。通过它可以实现阻塞和轮询结果队列。因此,当我们要等待一个更为具体的结果时,PacketCollector比PacketListener更好一些。需要注意的是,每一个PacketCollector的结果队列的限制是2~16,如果大于16,那第一个将被自动移除。

8、Roster:代表了一个用户的花名册,即一个用户收到的一系列其他用户的存在(Presence)。花名册通过分组可以更为容易管理。一个用户可以通过订阅另外一个用户通过一个请求,主要由以下三个请求模式:

  1、Accept al--接收所有。

  2、Reject all--拒绝所有。

  3、Manual-----自动处理所有请求。订阅请求将会被忽视,如果你要处理,需要注册一个listener去监听存在的packets.

9、Presence:代表XMPP存在的packets,使用它主要有两个目的:1、让服务端知道客户端当前的状态,2、从花名册(Roster)中订阅与取消订阅用户,每一个存在的packet都有一个类型,如:

  1、available -- (默认) 用户可以接受和发送消息

  2、unavailable –用户不可以接受和发送消息

  3、subscribe --请求订阅的收件人的存在。

  4、subscribed –允许订阅的发件人的存在。

  5、unsubscribe --请求移除订阅的收件人的存在。

  6、unsubscribed --允许移除订阅的发件人的存在。

  7、error – 包含错误信息的存在。

  下面的属性是可选的:

  1、Status--一个用来描述用户存在格式自由的文本,如“在线”、“离线”、“我不在“….

  2、Priority—发件人的优先级,值越大优先级越高,该值不能为负数。

  3、Mode—有available (默认), chat, away, xa (扩展的away), and dnd (不要打扰).

Xmpp学习之Asmack取经-asmack入门(一)的更多相关文章

  1. Xmpp学习之Android-smack入门指导

    Xmpp学习之Android-smack入门指导 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/69404 ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. Openfire/XMPP学习之——一个简单的Smack样例

    昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...

  4. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...

  5. XMPP学习——3、XMPP协议学习补充

    流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...

  6. JavaWeb学习总结(一)——JavaWeb开发入门

    http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...

  7. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  8. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  9. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

随机推荐

  1. jquery小技巧:使用jquery.confirm和PNotify实现弹出提示和消息提示

    在从UIKIT前端换到BOOSTRAP前端时,一些转换的技巧. https://myclabs.github.io/jquery.confirm/ http://sciactive.github.io ...

  2. 微信小程序之视图容器(swiper)组件创建轮播图

    一.视图容器(Swiper) 1.swiper:滑块视图容器 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swi ...

  3. Hibernate游记——装备篇《三》(连接池的使用)

    这里介绍几种最常见的连接池配置: [说明:在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有BUG,在某些种情 ...

  4. Xamarin.Forms支持的地图显示类型

    Xamarin.Forms支持的地图显示类型   在Xamarin.Forms中,专门提供了一个Map视图,用来显示地图.根据用户的需求不同,该视图支持三种地图显示类型,用户可以通过Map视图提供的M ...

  5. Leetcode总结之Backtracking

    本文我们就Leetcode中的一个类型的题目backtracking进行一系列的总结和归纳.backtracking这个方法本质是建立在递归的基础上,不断尝试新的路径,这里关键是每次尝试完以后需要退回 ...

  6. 用AntRun插件测试Maven的生命周期

    在用AntRun插件之前,需要了解以下几个知识点: 1.Maven的生命周期,参考:http://www.cnblogs.com/EasonJim/p/6816340.html,主要是要知道生命周期里 ...

  7. TDDL-剖析淘宝TDDL

    TDDL-剖析淘宝TDDL 学习了:https://blog.csdn.net/sumj7011/article/details/78286741 Taobao Distribute Data Lay ...

  8. cocos2d-x-3.x bringToFront & sendToBack实现

    void Node::bringToFront(void) { auto parent = this->getParent(); if (parent != nullptr && ...

  9. shell脚本编写-自动部署及监控

    1.编写脚本自动部署反向代理.web.nfs: I.部署nginx反向代理两个web服务,调度算法使用加权轮询 II.所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性: ...

  10. 基于bootstrap的纯静态网站目录

    一.博客页面 二.登陆页面 三.信息采集 四.管理后台 五.网站汇总(基于上边四个功能) 因为样式统一采用bootstrap的样式,所以不做介绍 样式导入可以将bootstrap下载至本地(有自动补齐 ...