'packetListener'에 해당되는 글 1건

  1. 2010.10.06 XMPP opensource library SMACK #2 - Processing Incoming Packets 1
Android/XMPP2010. 10. 6. 16:55
http://www.igniterealtime.org/builds/smack/docs/latest/documentation/processing.html
Processing Incoming Packets 

수신되는 패킷을 처리하는데 두가지 방식을 지원한다.

  • org.jivesoftware.smack.PacketCollector -- 새로운 패킷이 올때까지 동기적으로 대기하는 클래스
  • org.jivesoftware.smack.PacketListener -- 수신되는 패킷을 비동기적으로 받는 인터페이스
패킷리스너는 이벤트스타일의 프로그래밍이다. 반면에 패킷콜렉터는 당신이 폴링으로 수집한 데이터를 큐잉하여 받게되며 그 동작은 블럭된다. 패킷리스너는 수신중에 언제든지 다른 작업이 가능하며 콜렉터는 원하는 패킷이 올때가지 대기할때 유용하다. 이 두가지는 모두 XMPPConnection의 인스턴스로부터 얻을수 있다.

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

아래는 Smack에서 제공하는 패킷필터들의 셋이다. PacketFilter인터페이스로 새로운 필터를 정의할수도 있다. 디폴트셋은 아래와 같다.
  • PacketTypeFilter -- 클래스타입을 지정할 수 있다. 
  • PacketIDFilter -- 패킷 ID별로 지정할 수 있다.
  • ThreadFilter -- 메세지패킷의 스레드 ID별로 지정할 수 있다.
  • ToContainsFilter -- 받는 주소로 지정할 수 있다.
  • FromContainsFilter -- 보내는 주소로 지정할 수 있다.
  • PacketExtensionFilter -- 패킷의 확장부분을 지정할 수 있다.
  • AndFilter -- 논리적 AND 연산을 두개이상의 필터로 지정할 수 있도록 해준다.
  • OrFilter -- 논리적 OR 연산을 두개이상의 필터로 지정할 수 있도록 해준다.
  • NotFilter -- 논리적 NOT 연산을 두개이상의 필터로 지정할 수 있도록 해준다.

Posted by 삼스