openfire開發(四)消息攔截器

    大家好,我是LD,今天給大家介紹openfire的消息攔截器。通常,我們在開發插件的過程中會有一種需求,需要對客戶端發送的消息來做一些我們自己的處理,比如保存數據等等。這裏我們就會使用到攔截器,

    在openfire中,自定義攔截器需要實現PacketInterceptor接口。下面我們寫一個簡單的攔截器來介紹一下。

import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Packet;

public class TestPacketInterceptor implements PacketInterceptor {

	@Override
	public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException {
		// TODO Auto-generated method stub
		
		
	}

}

這裏我們需要重寫interceptPacket方法,在這個方法裏面我們就可以做自己的操作了,比如保存消息等等。

    這裏要說的主要是incoming和processed參數的含義。

我們可以看下openfire源碼裏面是如何調用攔截器的

wKiom1UuLrvwwWDxAAViwdU2wiI161.jpg這裏我摘的是PresenceRouter裏面的消息處理函數,我們可以看到消息在被處理之前和處理之後都被攔截了一次,因此在處理之前processed=false,處理之後就爲processed=true;由於這是服務器收消息,因此incoming都爲true,同樣在消息往客戶端傳送的時候也會被攔截兩次,incoming=false。最後通過InterceptorManager.getInstance().addInterceptor將攔截器加到openfire中,就可以生效了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章