开始
这个文档将会向您介绍Smack API,并且简要介绍一些重要的类和概念。
JAR文件和要求
配置
Smack有一个初始化过程,涉及2个阶段。
- 初始化系统属性—初始化所有的系统属性可以通过类SmackConfiguration。这些属性检索的getXXX方法类。
- 初始化启动类——在启动时初始化任何类要积极通过实例化类,然后在继承了SmackInitializer的类中调用初始化方法在该。如果它不继承这个接口,然后初始化必须发生在一个静态的代码块是在加载类时自动执行。
建立连接
XMPPTCPConnection
类是用于创建XMPP服务器的连接。使用以下代码示例进行连接:
// Create a connection to the jabber.org server.
AbstractXMPPConnection conn1 = new XMPPTCPConnection("username", "password" "jabber.org");
conn1.connect();
// Create a connection to the jabber.org server on a specific port.
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("username", "password")
.setServiceName("jabber.org")
.setHost("earl.jabber.org")
.setPort("8222")
.build();
AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
conn2.connect();
注意,最大安全时将使用默认配置连接到服务器(如果可能的话),包括使用TLS加密。ConnectionConfiguration
类提供了先进控制连接创建的,比如禁用或需要加密。
查看完整细节XMPPConnection Management
一旦你已经创建了一个连接,你应该使用 XMPPConnection.login()
方法登录。一旦你登录,你可以创建新的Chat
或 GroupChat
对象与其他用户聊天。
使用 Roster(名单)
Roster 可以让你跟踪其他用户的可用性( presence
:状态)。用户可以分成组,如“朋友”和“同事”,然后你会发现每个用户是否在线或离线。
检索使用Roster.getInstanceFor(XMPPConnection)
方法。roster 类允许您找到所有名册条目,他们属于的组,和每个条目的存在现状。
读和写功能
每个消息到XMPP服务器从客户端称为数据包并以XML方式发送。包 org.jivesoftware.smack.packet
包含的类,封装了所允许的三种不同类型的基本包类型XMPP ( message, presence, and IQ) 。
像Chat
和GroupChat
这样的类提供更高层次的结构,管理自动创建和发送数据包,并且你也可以直接创建和发送数据包。下面是一个代码示例修改你的存在,让人们知道你”不在线”并且是”出去钓鱼”了:
// Create a new presence. Pass in false to indicate we're unavailable._
Presence presence = new Presence(Presence.Type.unavailable);
presence.setStatus("Gone fishing");
// Send the packet (assume we have an XMPPConnection instance called "con").
con.sendStanza(presence);
Smack 提供了两种方式读取传入的数据包:PacketListener
和PacketCollector
。都使用StanzaFilter
实例,以确定哪些数据包应该被处理。数据包监听器是用于事件编程风格,而包收集器有一个结果队列的数据包,你可以查询和阻塞操作。
数据包监听器是有用,当你想采取一些措施当一个数据包发生了进来,而包收集器是有用的,当你想等待一个特定的数据包到达的。Packet collectors 和 listeners 可以创建使用一个连接实例。