수신되는 패킷을 처리하는데 두가지 방식을 지원한다.
- org.jivesoftware.smack.PacketCollector -- 새로운 패킷이 올때까지 동기적으로 대기하는 클래스
- org.jivesoftware.smack.PacketListener -- 수신되는 패킷을 비동기적으로 받는 인터페이스
org.jivesoftware.smack.filter.PacketFilter인터페이스는 패킷리스너와 패킷콜렉터가 전달받을킷을러주는 역할을 한다. org.jivesoftware.smack.filter패키지에 미리정의된 많은 사용가능한 필터들이 정의되어 있다.
아래 코드는 패킷리스너와 패킷콜렉터를 모두 사용하는 데모이다.
// Create a packet filter to listen for new messages from a particular // user. We use an AndFilter to combine two other filters.
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class),
new FromContainsFilter("mary@jivesoftware.com"));
// Assume we've created an XMPPConnection name "connection".
// First, register a packet collector using the filter we created.
PacketCollector myCollector = connection.createPacketCollector(filter);
// Normally, you'd do something with the collector, like wait for new packets.
// Next, create a packet listener. We use an anonymous inner class for brevity.
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
// Do something with the incoming packet here.
}
};
// Register the listener.
connection.addPacketListener(myListener, filter);
Standard Packet Filters
- PacketTypeFilter -- 클래스타입을 지정할 수 있다.
- PacketIDFilter -- 패킷 ID별로 지정할 수 있다.
- ThreadFilter -- 메세지패킷의 스레드 ID별로 지정할 수 있다.
- ToContainsFilter -- 받는 주소로 지정할 수 있다.
- FromContainsFilter -- 보내는 주소로 지정할 수 있다.
- PacketExtensionFilter -- 패킷의 확장부분을 지정할 수 있다.
- AndFilter -- 논리적 AND 연산을 두개이상의 필터로 지정할 수 있도록 해준다.
- OrFilter -- 논리적 OR 연산을 두개이상의 필터로 지정할 수 있도록 해준다.
- NotFilter -- 논리적 NOT 연산을 두개이상의 필터로 지정할 수 있도록 해준다.