openfire 實現自己的插件plugin類
你的plugin可以走四條路:
1. 攔截器方式,在你的插件中添加包攔截器,在攔截器中實現你的功能。通過InterceptorManager.getInstance().addInterceptor()添加。
2. component方式,在插件中添加component。通過ComponentManager.getInstance().addComponent()添加。
Components可以接收一個特定子域(sub-domain)的所有包。比如test_componet.example.com。所以,一個發送給[email protected]的包將被轉發給這個componet.
3. Handler方式,通過XMPPServer.getInstance().getIQRouter().addHandler(yourHandler);
IQ handlers相應包中特定的元素名或命名空間。
4. PropertyEventListener方式:通過 PropertyEventDispatcher.addListener(yourPropertyEventListner)添加。
使用JiveGlobals.getProperty(String) 和 JiveGlobals.setProperty(String, String) 方法將我們的插件設置爲openfire的一個全局屬性。通過實現org.jivesoftware.util.PropertyEventListener方法可以將我們的插件做成一個屬性監聽器監聽任何屬性的變化。通過 PropertyEventDispatcher.addListener(PropertyEventListener)方法可以註冊監聽。要注意的一點是,一定要在destroyPlugin()方法中將註冊的監聽註銷。
=====================================================
1, 簡單攔截器方式示例:
public class ArtWeaverPlugin implements Plugin
{
private PacketInterceptor ic = null;
@Override
public void initializePlugin(PluginManager pluginManager, File pluginDirectory)
{
ic = new PresenceSignatureInterceptor();
InterceptorManager.getInstance().addInterceptor(ic);
}
@Override
public void destroyPlugin()
{
if(ic != null)
{
InterceptorManager.getInstance().removeInterceptor(ic);
}
}
private class PresenceSignatureInterceptor implements PacketInterceptor
{
@Override
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException
{
if(!processed && packet instanceof Presence && incoming)
{
//在這添加你自己的對packet的處理
}
}
}
=============================================
2, component方式
=========================
3, Handler方式
public class MYPlugin implements Plugin {
private XMPPServer server;
private UserManager userManager;
public void initializePlugin(PluginManager manager, File pluginDirectory) {
Log.debug("==========SNSPlugin.initializePlugin=======");
try{
server = XMPPServer.getInstance();
userManager = server.getUserManager();
server.getIQRouter().addHandler(new MyHandler(server));
}catch(Exception e){
Log.error(e);
}
}
}
public class MyHandler extends IQHandler {
private static final String MODULE_NAME = "my handler";
private static final String ELEMENTNAME = "myhandler-card";
private static final String NAMESPACE = "http://www.isansui.com/my";
private XMPPServer server;
private static final String USERID = "userid";
public MyHandler(XMPPServer server) {
super(MODULE_NAME);
info = new IQHandlerInfo(ELEMENTNAME, NAMESPACE);
this.server = server;
}
private IQHandlerInfo info;
public IQHandlerInfo getInfo() {
return info;
}
public void process(Packet packet) throws PacketException {
IQ iq = (IQ) packet;
try {
IQ.Type type = iq.getType();
Element element = iq.getChildElement();
Node node = element.element(USERID);
Long userid = parserUserid(node.getText());
if(type.equals(IQ.Type.get)){}
}else if(type.equals(IQ.Type.set)){
IQ reply = IQ.createResultIQ(iq);
deliverer.deliver(reply);
}else if(type.equals(IQ.Type.result)){
}
}catch (org.jivesoftware.openfire.auth.UnauthorizedException e) {
}catch (Exception e) {
}
}
}
=========================================
4, PropertyEventListener方式
原文來自
http://cache.baidu.com/c?m=9d78d513d99e03f804b9cf3e5a01d7170e2582744cdcc76509c3e54287231b1f483ca5fd65351177ced82c395cfa5e5c9da177246b1420c0c79fce579be8cc7f73ce27377201d501548848f19c5b739666c301b7ee04e0bff03796add3&p=8b2a9315d9c542b301a7c26f5f59&user=baidu&fm=sc&query=openfire+%C0%B9%BD%D8&qid=f4d9b1df04624aea&p1=2