Smack提供灵活的框架来通过两种构造处理收到的 packet:
// 首先,用我们创建的过滤器注册一个packet收集器。PacketCollector myCollector = connection.createPacketCollector(filter); // 通常,您应该用收集器来些什么,像等待新的packet。 // 接下来,创建一个packet监听器。我们可以简便地使用匿名内部类。PacketListener myListener = new PacketListener() { public void processPacket(Packet packet) { // 在这里用收到的packet做些什么。 } }; // 注册这个监听器。connection.addPacketListener(myListener, filter);
- org.jivesoftware.smack.PacketCollector —— 一个让您同步等待新packet的类。
- org.jivesoftware.smack.PacketListener —— 一个异步通知您引入的packet的接口。
// 首先,用我们创建的过滤器注册一个packet收集器。PacketCollector myCollector = connection.createPacketCollector(filter); // 通常,您应该用收集器来些什么,像等待新的packet。 // 接下来,创建一个packet监听器。我们可以简便地使用匿名内部类。PacketListener myListener = new PacketListener() { public void processPacket(Packet packet) { // 在这里用收到的packet做些什么。 } }; // 注册这个监听器。connection.addPacketListener(myListener, filter);
标准Packet过滤器。
Smack包括丰富的packet 过滤器集,当然您可以通过实现
PacketFilter接口创建自己的过滤器。 默认的过滤器集包括:
- PacketTypeFilter ——特定类的packet过滤器。
- PacketIDFilter ——含有特定packet ID的packet过滤器。
- ThreadFilter ——含有特定线程ID的消息packet过滤器。
- ToContainsFilter ——发送到特定地址的packet过滤器。
- FromContainsFilter ——来自特定地址的packet过滤器。
- PacketExtensionFilter ——含有特定packet扩充的packet过滤器 filters for s that have a particular extension.
- AndFilter ——实现两个过滤器的逻辑“与”操作。
- OrFilter —— 实现两个过滤器的逻辑“或”操作。
- NotFilter ——实现一个过滤器的逻辑“非”操作。