Xmpp学习之Asmack取经-asmack入门(一)

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入门(一),布布扣,bubuko.com

时间: 2024-08-01 21:27:19

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

nodejs学习笔记之安装、入门

由于项目需要,最近开始学习nodejs.在学习过程中,记录一些必要的操作和应该注意的点. 首先是如何安装nodejs环境?(我用的是windows 7环境,所以主要是windows 7的例子.如果想看linux下的安装可以参考http://www.cnblogs.com/meteoric_cry/archive/2013/01/04/2844481.html) 1. nodejs提供了一些安装程序,可以去官网(http://nodejs.org/download/)按照自己的机器进行下载,下载完

Python学习(一):入门篇:python中的一些数据结构

Python里的一些基本知识点总结 Last Edit 2014/5/2 这里记录的是Python2.7版本的语法特征,部分与Python3.0是不一样的. 一,关于开发环境 在windows下可以直接在官网下载相关的版本,然后默认安装.使用直带的IDLE编辑器. IDLE中两个有用的快捷键: ALT+P:重复历史命令(从最近到最老) ALT+N:   重复历史命令(从最老到最近) IDLE中没有清屏功能. 在cmd中进行: 1,首先要在环境变量的path中添加相关的路径: C:\Python2

卷积神经网络(CNN)学习笔记1:基础入门

卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Views 概述 卷积神经网络(Convolutional Neural Network, CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN的.CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

深入学习:Windows下Git入门教程(下)

声明:由于本人对于Git的学习还处于摸索阶段,对有些概念的理解或许只是我断章取义,有曲解误导的地方还请见谅指正! 一.分支 1.1分支的概念. 对于的分支的理解,我们可以用模块化这个词来解释:在日常工作中,一个项目的开发模式往往是模块化,团队协作式的开发.这样我们项目的进度可以称得上多核并发式的开发了.这种模块化的开发要求我们尽可能的高内聚低耦合以免造成一只胳膊没了整个人都废了的局面.因此在所有的版本控制器对代码进行管理的时候都引入了分支这个概念.那么分支是什么呢? 分支是相对于主干来说的,或者

Python学习(三):入门篇:Python中怎么编写类

Python中怎么编写类 Last Edit 2013/5/2 先看一个例子: #person.py class person: """class to representaion a person""" def __init__(self,name,age): self.name=name if 0<age<=150: self.age=age else: print 'age is no valid!' def display(s

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal

Maven学习系列一5分钟入门教程

Maven是基于项目对象模型的一个Apache开源项目.Maven的主要配置文件pom.xml就是项目模型的意思(Project Oriented Model),它是Apache Ant的衍生扩展. 安装 Maven是一个Java工具,所以你必须首先安装Java所需运行环境. 1.解压apache-maven-3.2.1-bin.zip到你想要安装maven的目录,例如,我解压文件到D:\apache-maven-3.2.1. 2.添加M2_HOME环境变量,(WinKey+Pause)快捷键调

Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)

笔记来自<Node入门>@2011 Manuel Kiessling JavaScript与Node.js Node.js事实上既是一个运行时环境,同时又是一个库. 使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器. 一个基础的HTTP服务器 server.js:一个可以工作的HTTP服务器 var http = require("http"); http.createServer(function(request, response) { r