openfire 插件开发

插件分类

  1. 消息等内部插件

    这类插件主要用于对 openfire 内消息,状态等扩展

  2. webUI 插件

    这类插件主要用于对 openfire 控制台扩展

  3. web接口插件

    这类插件主要用于对 openfire 后台接口扩展

插件开发基本流程

  1. 实现 Plugin 类

  2. 添加 plugin.xml 配置插件启动类

  3. 添加 changelog.html, logo_*.png/gif, readme.html 等说明文件及logo

基本的目录结构如下图:

插件目录结构

通常 plugin.xml 是导入 PluginManager 中的默认配置文件,其配置如下所示:




    com.demo.hello.HelloPlugin
    hello
    First Openfire Custom Plugin.
    ilufei
    1.0.0
    11/07/2018
    4.0.2
    
    
    
        
        
            
            
                
                
            
        
    
    


对于 pom.xml 则是在 build 过程中自动打包使用的。

注意: [WEB-INF] 目录下 web-custom.xml 则是对 servlet 等动态注册的配置页面,类似 Tomcat 中的 web.xml 配置,详细参见 Web 接口开发

消息等内部插件

主要在插件主入口处拿到 XMPPServer 对象,并插入相关的回调函数,进行相应的处理即可:

public class HelloPlugin implements Plugin {

    private static final Logger Log = LoggerFactory.getLogger(HelloPlugin.class);

    private XMPPServer mXMPPServer;

    /**
     * Instantiates a new Hello service plugin.
     */
    public HelloPlugin() {
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware
     * .openfire.container.PluginManager, java.io.File)
     */
    public void initializePlugin(PluginManager manager, File pluginDirectory) {
        // 获取 XMPPServer 服务
        mXMPPServer = XMPPServer.getInstance();
    Log.debug(mXMPPServer.getServerInfo().toString());

        // 添加 IQHandler --> mHandler
        mXMPPServer.getIQRouter().addHandler(mHandler);

        // 添加离线消息监听
        mXMPPServer.getOfflineMessageStrategy().addListener(this);

        // TODO 更多
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.jivesoftware.openfire.container.Plugin#destroyPlugin()
     */
    public void destroyPlugin() {
        // 删除 IQHandler --> mHandler
        mXMPPServer.getIQRouter().removeHandler(mHandler);
        // 删除离线消息监听
        mXMPPServer.getOfflineMessageStrategy().removeListener(this);
    }

}

调试过程中,为方便查看日志,将 build/lib/dist/log4j.xml 配置文件中添加如下内容即可:





    
        
            
        
    

    ...
    
        
        
    

    
        
        
        
        
        
        
        
    

webUI 开发

如果所有UI都是界面,则可以通过 jsp 进行,具体进行如下几步即可:

  1. 配置入口

在 plugin.xml 中的 标签中添加相关的 item 即可:

    
    
        
        
            
            
                
                
            
        
    

注意:这里 tab 和 sidebar 中设置的 id 代表 显示的位置, 具体可以查询 openfire_src/src/resources/jar/admin-sidebar.xml 中的id,从而确认相关 tab 和 sidebar 的 id 名称。

  1. 编辑 jsp 文件

注意这里需要导入如下几个标签哦,不然 i18n 可能没法使用...

<%@ page import="org.jivesoftware.util.JiveProperties"
    errorPage="error.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

具体如下:

<%@ page
    import="org.jivesoftware.openfire.container.PluginManager,
                org.jivesoftware.util.JiveProperties"
    errorPage="error.jsp"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.HashMap"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>


<%
    webManager.init(request, response, session, application, out);
%>
<%
    // Get parameters
    boolean update = request.getParameter("update") != null;
    Map errors = new HashMap();
    final JiveProperties mJiveProperties = JiveProperties.getInstance();
    if (update) {
             // TODO update params
    }
%>



<fmt:message key="hello.title" />



    

注意:jsp调试目前没有找到方法,仅能通过日志的方式进行调试.

web接口插件开发

在 [WEB-INF] 目录下 web-custom.xml 则是对 servlet 等动态注册的配置页面,类似 Tomcat 中的 web.xml 配置, 如下两种方式进行配置:

  1. Servlet 注册

比如 Fastpath 插件下的 servlet 配置如下:



    
    
        ImageServlet
        org.jivesoftware.openfire.fastpath.ImageServlet
    
    
        SoundServlet
        org.jivesoftware.openfire.fastpath.SoundServlet
    

    
    
        ImageServlet
        /getimage
    
    
        SoundServlet
        /getsound
    



  1. JerseyWrapper 配置

比如 mucservice 中配置 JerseyWrapper 的方式如下:



    
    
        JerseyWrapper
        org.jivesoftware.openfire.plugin.servlet.JerseyWrapper
    

    
    
        JerseyWrapper
        /*
    



你可能感兴趣的:(openfire 插件开发)