Smack提供了一个灵活的框架来处理接受到的数据包:
- org.jivesoftware.smack.PacketCollector -- 让你同步等待新的包.
- org.jivesoftware.smack.PacketListener -- 异步通知你包的到来.
一个packet listener在事件风格的程序中使用,packet collector可以做轮循和阻塞操作.它们都可以
使用 XMPPConnection 实例来创建.
使用 XMPPConnection 实例来创建.
org.jivesoftware.smack.filter.PacketFilter 接口定义了那些包会分发到PacketCollector
或者是PacketListener.你可以在 org.jivesoftware.smack.filter 包中找到预定义的filters.
// 创建一个包 filter监听特定用户的消息.我们使用AndFilter来联合两个filters.
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), new FromContainsFilter("mary@jivesoftware.com")); // 假设我们创建了名称为 "connection" XMPPConnection 对象. // 首先使用上面的filter创建PacketCollector对象. PacketCollector myCollector = connection.createPacketCollector(filter); // 接着, 我们创建一个 packet listener. 方便起见我们使用匿名内部类. PacketListener myListener = new PacketListener() { public void processPacket(Packet packet) { // 当包到的时候你做什么. } }; // 注册. connection.addPacketListener(myListener, filter);
标准Packet Filters
我们提供了一系列的filters,你可以实现
PacketFilter 接口来自定义实现.
- PacketTypeFilter -- filters for packets that are a particular Class type.
- PacketIDFilter -- filters for packets with a particular packet ID.
- ThreadFilter -- filters for message packets with a particular thread ID.
- ToContainsFilter -- filters for packets that are sent to a particular address.
- FromContainsFilter -- filters for packets that are sent to a particular address.
- PacketExtensionFilter -- filters for packets that have a particular packet extension.
- AndFilter -- implements the logical AND operation over two filters.
- OrFilter -- implements the logical OR operation over two filters.
- NotFilter -- implements the logical NOT operation on a filter.
用Smack编写jabber客户端的基本知识都够了,更多内容请查阅官方资料和mail list请求帮助.