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

插件下载:发送消息插件

[url]http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值