openfire 实现自己的插件plugin类

你的 plugin 可以走四条路:

1.       拦截器方式 ,在你的插件中添加包拦截器,在拦截器中实现你的功能。通过 InterceptorManager.getInstance().addInterceptor() 添加。

 

2.       component 方式 ,在插件中添加 component 。通过 ComponentManager.getInstance().addComponent ()添加。

 Components可以接收一个特定子域(sub-domain)的所有包。比如test_componet.example.com。所以,一个发送给joe@www.isansui.com 的包将被转发给这个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 方式


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值