openfire 實現自己的插件plugin類

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




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