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. window.getComputedStyle——ref

    componentDidMount() { const LeftHeight = window.getComputedStyle(this.leftDom).height; console.log(L ...

  2. Xamarin.Forms特殊的视图BoxView

    Xamarin.Forms特殊的视图BoxView   BoxView是Xamarin.Forms比较特殊的视图.该视图构建非常简单,其作用也很单一.它的作用就是构成一个特定颜色的色块.在界面设计中, ...

  3. xcode5 asset catalogs 由于图标尺寸错误导致编译问题解决[原创]

    如下图,即使图片尺寸不规范,xcode5也可以正常预览(这里我提供的尺寸是57*57, 而需要的是120*120) 但编译运行失败,报的错是: Images.xcassets: error: The ...

  4. [NSThread sleepForTimeInterval:3.0];

    在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)laun ...

  5. Unable to connect to the MKS : Failed to connect to server XXXXXX:903

    Issue : 通过 vSphere 连接VM控制台的时候, 报错       Unable to connect to the MKS : Failed to connect to server X ...

  6. 为了安全,linux下如何使用某个用户启动某个进程?

    安全里有个原则,叫最小权限原则 根据这个原则,对于启动某个应用或者进程,应该赋予其最小权限,根据应用权限要求,创建一个相应权限的用户,赋予其应用相应的权限,然后使用这个用户启用这个应用 如何使用某个用 ...

  7. gulp安装+一个超简单入门小demo

    gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js. ...

  8. ubuntu 卸载干净软件(包括配置文件)

    var/cache/apt/archives occupying huge space I am in the process of cleaning up my system. And I see ...

  9. npm 安装包无法继续下载? 卡住

    一般是由于package.json配置的项目名不对

  10. Solaris设备管理

    接手一台服务器,如何了解它的软硬件配置 数据库可以装在裸设备上,何为裸设备 知识点: 内核 驱动程序 设备命名 设备访问方式 磁盘的管理 内核: 指挥硬件干活的工具,shell翻译官,将人类语言翻译为 ...