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:
- IQProvider: 将IQ请求解析到Java对象中。(PS:IQ--Info/Query,即信息与查询,它为XMPP通信提供请求与响应机制。它与HTTP协议的基本工作原理非常相似,允许获取和设置查询,与HTTP 的GET 和POST 动作类似。每个iq都必须有一个响应,通过必需的id 属性将响应与导致该响应的请求关联起来。主要由Get/Set/Result/Error四个节点属性)。
- 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 (不要打扰).