`
lovebirdegg
  • 浏览: 175024 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

    博客分类:
  • xmpp
阅读更多
实现功能:

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

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

以下是插件配置:

说明参考: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
分享到:
评论

相关推荐

    openfire red5插件 sparkweb源码

    **Openfire、Red5与SparkWeb插件** Openfire是一款开源的即时通讯(IM)服务器,基于XMPP协议,提供实时、双向通信服务。它使用Java编写,易于部署和管理,支持多种客户端,包括Web、桌面应用等。Openfire的核心...

    openfire消息回执插件

    本文将深入探讨“Openfire消息回执插件”,并结合提供的三个关键文件——DbChatLogsManager.java、ChatLogPlugin.java和ChatLogs.java,解析该插件的设计与实现。 1. 消息回执机制: 消息回执是即时通讯中的一种...

    openfire防丢包插件及源码

    在实时通信中,丢包问题常常是影响用户体验的重要因素,为此,开发者们设计了一款专门针对Openfire的防丢包插件,以确保消息的完整性和可靠性。本文将详细介绍该防丢包插件的工作原理,并对源码进行深入解析。 首先...

    openfire聊天记录插件源码包

    这个"openfire聊天记录插件源码包"包含了实现聊天记录存储和查询功能的相关代码,这对于开发者来说是一个宝贵的资源,可以深入理解聊天记录的处理机制,并且可以根据需求进行定制化开发。 首先,我们要了解XMPP...

    openfire服务器开发插件的简单demo

    5. **使用Openfire API**:Openfire提供了丰富的API供插件开发者使用,例如,你可以通过`AdminManager`来管理用户和群组,或者通过`PacketRouter`来发送和接收XMPP消息。理解并熟练运用这些API是开发高效插件的关键...

    Openfire源码分析

    Openfire的核心功能主要包括连接管理、消息解析、消息路由与消息发送。 #### 二、Openfire架构 ##### 2.1 框架结构 Openfire的整体架构主要由多个模块(Module)构成,这些模块实现了Openfire的核心功能。模块的...

    openfire-4.5.0源码

    例如,`xmpp-server`模块包含了处理连接、认证、会话管理和消息路由的类。通过解析XML流,Openfire可以理解客户端的需求,如登录、发送消息或建立多用户聊天室。 三、源码关键模块分析 1. 用户管理:`user`模块是...

    openfire_src3.5.1源码

    4. **路由与传输**:在XMPP中,路由和传输层负责处理消息的发送和接收。Openfire使用Smack库处理XMPP协议,实现数据包的解析、编码和转发。 5. **群组与房间管理**:Openfire支持多用户聊天(MUC)功能,用户可以...

    openfire 插件开发

    在Openfire中,开发者可能需要处理用户离线时的消息存储和发送,这涉及到对Openfire的离线消息API的深入理解和使用。 综上所述,Openfire插件开发涵盖了一系列技术点,包括对XMPP协议的理解,Java编程技能,Maven...

    openfire xmpp协议源码

    实际开发中,可以通过创建Android示例项目,实现注册、登录、发送和接收消息等功能,逐步理解Openfire和XMPP的结合使用。同时,可以参考Openfire的官方文档和社区资源,解决遇到的问题。 总之,Openfire和XMPP协议...

    openfire4.2.3源码

    源码中的`plugins`目录包含了默认的插件源码,学习这部分可以了解如何开发新的插件。 9. **日志和监控**:Openfire使用Log4j进行日志记录,并且有监控服务器性能的机制。源码中会有相关配置和实现。 10. **国际化...

    Openfire JSP Plugin 开发源码

    在本案例中,“Openfire JSP Plugin 开发源码”显然是一份关于如何开发Openfire平台上的JSP插件的源代码,可能包含了用于Android、iPhone和iPad设备的接口,特别地,这个插件实现了对TVBox终端的管理和控制。...

    openfire记录在线统计人数插件

    "openfire记录在线统计人数插件"就是这样一个工具,它能够帮助管理员实时监控和记录系统中的在线用户数量,对于系统管理和运营分析具有重要意义。 在线统计人数插件的主要功能包括: 1. **实时在线用户统计**:...

    openfire推送

    该模块实现的功能和broadcast(广播)插件类似,都允许服务器向所有或特定用户发送消息。Broadcast插件实际上是XMPP协议中的广播消息,它使用了特殊的XML命名空间。broadcast源码插件用于加载控制用户广播信息权限的...

    Openfire开发资料

    "openfire处理消息流程,及openfire详细信息.doc"和"openfire消息、监听、启动流程分析.docx"详细解释了Openfire的消息处理流程,包括连接建立、消息发送、接收和监听等环节。理解这些流程有助于优化性能和调试问题。...

    openfire相关代码

    4. **发送消息**:创建`Message`对象,设置目标JID(用户名@服务器名)和消息内容,然后使用`connection.sendStanza()`发送。 ```java Message message = new Message("recipient@your-openfire-server.com", ...

    openfire二次开发问题分析及解决

    本文针对使用Openfire服务器进行二次开发时可能遇到的问题,结合实际需求,提出了一系列解决方案,并着重介绍了Openfire服务器插件开发和源码修改等方面的设计与实现。 #### 二、Openfire插件开发问题分析与解决 #...

    openfire-restAPI-plugin:允许通过RESTful API进行Openfire管理

    REST API插件自述文件REST API插件通过向服务器发送REST / HTTP请求来提供管理Openfire的能力。 该插件的功能对于需要在Openfire管理控制台之外管理Openfire的应用程序很有用。功能清单获取所有或特定用户的概述,并...

Global site tag (gtag.js) - Google Analytics