openfire发送消息插件(说明和源码)

实现功能:

对用户发送消息,如果在线就直接发送,不在线时存为离线消息

对组发送消息,如果在线就直接发送,不在线时存为离线消息

以下是插件配置:

说明参考:http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <class>org.jivesoftware.openfire.plugin.Msger</class>
    <name>${msger.plugin.name}</name>
    <description>${msger.plugin.description}</description>
    <author>leon</author>
    <version>1.0.0</version>
    <date>2/20/2009</date>
    <url>http://hi.baidu.com/jyleon</url>
    <minServerVersion>3.6.3</minServerVersion>
                          
<adminconsole>
        <tab id="tab-session">      
            <sidebar id="sidebar-tools" description="${msger.sidebar.name}">
               <item id="msger-send" name="${msger.sendToUser}" description="${msger.sendToUser.title}" url="msger-send.jsp"/>                   
               <item id="msger-sendGroup" name="${msger.sendToGroup}" description="${msger.sendToGroup.title}" url="msger-sendGroup.jsp"/>                    
            </sidebar>
        </tab>
    </adminconsole>
</plugin>

要注意的是:

1、<sidebar id="sidebar-tools" description="${msger.sidebar.name}">   
      id="sidebar-tools"   是把这个插件放到openfire导航的“会话”的“工具”下面。(openfire导航标签参考admin-sidebar.xml ),${msger.sidebar.name} 国际化设置,如果不设置的话,只能用英文

2、 <item id="msger-send" name="${msger.sendToUser}" description="${msger.sendToUser.title}" url="msger-send.jsp"/> 

      功能是新加一个连接“对用户发送消息”,连接到msger-send.jsp

      注意:openfire使用的是:Sitemesh 页面装饰框架,插件标签中定义 id="msger-send" ,那么msger- send.jsp 必须要在head里添加:<meta name="pageID" content="msger-send"/>,否则将无法正常显示。

3、 <minServerVersion>3.6.3</minServerVersion> 插件定义openfire服务的版本,不能上传低于3.6.3的版本。如低于3.6.3,将此处改成与 openfire 对应的版本号即可。

4. jsp 代码 msger-send.jsp

<%@page import="org.jivesoftware.openfire.XMPPServer"%>
<%@ page import="java.util.*" %>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/style/global.css">
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<title><fmt:message key="msger.sendToUser.title"/></title>
<meta name="pageID" content="msger-send"/>
</head>
<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager" />
<body>
<%@ page import="org.jivesoftware.openfire.PresenceManager,
                 org.jivesoftware.openfire.group.Group,
                 org.jivesoftware.openfire.group.GroupManager,
                 org.jivesoftware.openfire.user.User,
                 org.jivesoftware.openfire.user.UserManager,
                 org.jivesoftware.openfire.user.UserNotFoundException,
                 org.jivesoftware.util.ParamUtils,
                 org.jivesoftware.openfire.SessionManager,
                 org.xmpp.packet.JID,
                 org.xmpp.packet.Message,
                 java.util.Collection"
    errorPage="error.jsp"
%>

<%  
    boolean send = ParamUtils.getBooleanParameter(request,"send");
    String toUser = ParamUtils.getParameter(request,"toUser");
    String fromUser = ParamUtils.getParameter(request,"fromUser");
    String message = ParamUtils.getParameter(request,"message");
  
String success=null;

    if (send) {
   //send to user
   SessionManager sessionManager = webManager.getSessionManager();
   PresenceManager presenceManager = webManager.getPresenceManager();
   UserManager userManager = webManager.getUserManager();
   String serverDomainName =XMPPServer.getInstance().getServerInfo().getXMPPDomain();
 
 
   User user=null;
   JID toUserJid= null;
   JID fromUserJid= null;
 
   if(fromUser!=null)
    fromUserJid=new JID(fromUser+"@"+serverDomainName);
   else
    fromUserJid=new JID("admin@"+serverDomainName);  
 
   if(toUser!=null&&message!=null&&userManager.isRegisteredUser(toUser)==true){
      
         try {
             user = userManager.getUser(toUser);
                 
         
         if (presenceManager.isAvailable(user)) {
         // online messages
      toUserJid = presenceManager.getPresence(user).getFrom();
      sessionManager.sendServerMessage(toUserJid , null, message);    
    
      success="true";
     }else{
     // offline message
      toUserJid =new JID(toUser+"@"+serverDomainName);   
    
      if(toUserJid!=null){
       Message msg = new Message();
       msg.setBody(message);
       msg.setTo(toUserJid);
       msg.setFrom(fromUserJid);
       XMPPServer.getInstance().getOfflineMessageStrategy().storeOffline(msg);
      }
      success="true";
     }
         }
         catch (UserNotFoundException e) {
         success="fail";
         e.printStackTrace();
         }
        }else{
        success="fail";
      
        }
}
      


%>

<% if (success=="true") { %>

    <div class="jive-success">
    <table cellpadding="0" cellspacing="0" border="0">
    <tbody>
        <tr><td class="jive-icon"><img src="images/success-16x16.gif" width="16" height="16" border="0" alt=""></td>
        <td class="jive-icon-label">
        <fmt:message key="msger.sendReault.success" />
        </td></tr>
    </tbody>
    </table>
    </div><br>

<% }if(success=="fail"){ %>
<div class="jive-success">
    <table cellpadding="0" cellspacing="0" border="0">
    <tbody>
        <tr><td class="jive-icon"><img src="images/error-16x16.gif" width="16" height="16" border="0" alt=""></td>
        <td class="jive-icon-label">
        <fmt:message key="msger.sendReault.fail" />! <fmt:message key="msger.sendReault.fail.nouser" /> , <fmt:message key="msger.sendReault.fail.noContent" />
        </td></tr>
    </tbody>
    </table>
    </div><br>
<%}%>

<table cellpadding="3">
<form action="msger-send.jsp" id="sendMsg" method="post">
<tr>
   <td><fmt:message key="msger.sendToUser"/></td>
      <td><input type="text" name="toUser" id="toUser"></td>
</tr>

   <tr>
    <td> <fmt:message key="msger.sendContent"/></td>
    <td><textarea rows="10" name="message" cols="60"></textarea></td>
   <tr>
   <td></td>
       <td>
    <input type="submit" value="<fmt:message key="msger.send.submit"/>"><input type="hidden" name="send" value="true">
       </td>
</tr>
</form>
</table>
 

</body>
</html>

openfire的插件开发,是一件很有意思的事情,这只是在初期学的时候的一些总结和经验,适合新手。希望更多的人参与进来,大家共同研究。

群:28588322

插件下载:发送消息插件

http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html

你可能感兴趣的:(html,jsp,xml,框架,sun)