您的位置:首页 > 运维架构

openfire聊天历史记录插件的制作

2012-12-11 10:45 471 查看
因为工作需要做了一个聊天历史记录的插件,一开始找国外的插件,不好用,需要java客户端插件,而且始终不能够将聊天内容保存在服务器的数据库上。

鉴于此,自己写了一个聊天记录的插件,可以客户端调用,通过访问URL,其实是一个servlet地址,也可以通过页面来查看聊天的历史记录。

插件的下载地址:http://download.csdn.net/detail/dragonrxl/4871601

是用的Mysql的数据库,其他数据库我没测试,大家可以试一下。

具体使用很简单,把插件放到openfire的安装目录下的plugins下面,然后重启openfire,就可以看到了

在openfire的页面里面可以查看聊天记录哈

废话少说,直接上代码:

首先是插件类

package org.jivesoftware.openfire.plugin;

import java.io.File;

import org.jivesoftware.openfire.container.Plugin;

import org.jivesoftware.openfire.container.PluginManager;

import org.jivesoftware.openfire.interceptor.InterceptorManager;

public class ChatPlugin implements Plugin {

private chatInterceptor chatInter = null;

@Override

public void destroyPlugin() {

// TODO Auto-generated method stub

if(chatInter != null)

{

InterceptorManager.getInstance().removeInterceptor(chatInter);

}

}

@Override

public void initializePlugin(PluginManager manager, File pluginDirectory) {

chatInter = new chatInterceptor();

InterceptorManager.getInstance().addInterceptor(chatInter);

}

}

package org.jivesoftware.openfire.plugin;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.text.SimpleDateFormat;

import org.jivesoftware.database.DbConnectionManager;

import org.jivesoftware.openfire.interceptor.PacketInterceptor;

import org.jivesoftware.openfire.interceptor.PacketRejectedException;

import org.jivesoftware.openfire.session.Session;

import org.xmpp.packet.Message;

import org.xmpp.packet.Packet;

import org.xmpp.packet.Message.Type;

public class chatInterceptor implements PacketInterceptor{

private static final String CREATE_CHATMESSAGE_ITEM =

"INSERT INTO ofChatHistory (fromJID, toJID, message, messagetime) " +

"VALUES (?, ?, ?, ?)";

private static Connection con = null;

@Override

public void interceptPacket(Packet packet, Session session,

boolean incoming, boolean processed) throws PacketRejectedException {

// TODO Auto-generated method stub

if(!processed && packet instanceof Message)

{

if(incoming && Type.chat == ((Message)packet).getType())

{

PreparedStatement pstmt = null;

try {

if(con == null || con.isClosed())

con = (Connection) DbConnectionManager.getConnection();

pstmt = (PreparedStatement) con.prepareStatement(CREATE_CHATMESSAGE_ITEM);

pstmt.setString(1, ((Message)packet).getFrom().toBareJID());

pstmt.setString(2, ((Message)packet).getTo().toBareJID());

pstmt.setString(3, ((Message)packet).getBody());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String ly_time = sdf.format(new java.util.Date());

pstmt.setString(4, ly_time);

pstmt.executeUpdate();

}

catch (Exception ex) {

System.out.println(ex.getMessage());

DbConnectionManager.closeConnection(pstmt, con);

con = null;

}

finally {

}

}

}

}

}

package org.jivesoftware.openfire.plugin.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.jivesoftware.admin.AuthCheckFilter;

import org.jivesoftware.database.DbConnectionManager;

public class chatRecordServlet extends HttpServlet {

/**

*

*/

private static final long serialVersionUID = 1L;

public chatRecordServlet() {

// TODO Auto-generated constructor stub

}

@Override

public void init(ServletConfig servletConfig) throws ServletException {

super.init(servletConfig);

AuthCheckFilter.addExclude("chatRecord/history");

}

@Override

public void destroy() {

super.destroy();

AuthCheckFilter.removeExclude("chatRecord/history");

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

String fromJid = request.getParameter("fromjid");

String toJid = request.getParameter("tojid");

response.setContentType("text/xml");

response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();

out.println("<result>");

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

con = (Connection) DbConnectionManager.getConnection();

pstmt = (PreparedStatement) con.prepareStatement("select * from ofchathistory "

+ "where (fromJID = ? and toJID = ?) OR (fromJID = ? and toJID = ?) ORDER BY id");

pstmt.setString(1, fromJid);

pstmt.setString(2, toJid);

pstmt.setString(3, toJid);

pstmt.setString(4, fromJid);

rs = (ResultSet) pstmt.executeQuery();

out.print("<messagehistory>");

while (rs.next()) {

String fromJID = rs.getString("fromJID");

String toJID = rs.getString("toJID");

String message = rs.getString("message");

String messagetime = rs.getString("messagetime");

out.print("<message>");

out.print("<fromjid>" + fromJID + "</fromjid>");

out.print("<tojid>" + toJID + "</tojid>");

out.print("<body>" + message + "</body>");

out.print("<time>" + messagetime + "</time>");

out.print("</message>");

}

out.print("</messagehistory></result>");

}

catch (Exception ex) {

System.out.println(ex.getMessage());

}

finally {

DbConnectionManager.closeConnection(rs, pstmt, con);

}

out.flush();

//out.close();

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}

}

package org.jivesoftware.openfire.plugin.servlet;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.HashMap;

import java.util.Map;

import java.util.Vector;

import org.jivesoftware.database.DbConnectionManager;

import org.jivesoftware.util.JiveGlobals;

public class chatUtils {

public static String fJid = "";

public static String tJid = "";

public static Vector<Map<String, String>> getHistory(String fromJid, String toJid)

{

if(fromJid != null)

fJid = fromJid;

if(toJid != null)

tJid = toJid;

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String xmppdomain = "@" + JiveGlobals.getProperty("xmpp.domain");

Vector<Map<String, String>> vec = new Vector<Map<String, String>>();

try {

con = (Connection) DbConnectionManager.getConnection();

pstmt = (PreparedStatement) con.prepareStatement("select * from ofchathistory "

+ "where (fromJID = ? and toJID = ?) OR (fromJID = ? and toJID = ?) ORDER BY id");

pstmt.setString(1, fJid+xmppdomain);

pstmt.setString(2, tJid+xmppdomain);

pstmt.setString(3, tJid+xmppdomain);

pstmt.setString(4, fJid+xmppdomain);

rs = (ResultSet) pstmt.executeQuery();

while (rs.next()) {

String fromJID = rs.getString("fromJID");

String toJID = rs.getString("toJID");

String message = rs.getString("message");

String messagetime = rs.getString("messagetime");

Map<String, String> map = new HashMap<String, String>();

map.put("fromjid", fromJID);

map.put("tojid", toJID);

map.put("body", message);

map.put("time", messagetime);

vec.add(map);

}

}

catch (Exception ex) {

System.out.println(ex.getMessage());

}

finally {

DbConnectionManager.closeConnection(rs, pstmt, con);

}

return vec;

}

public static Vector<String> getUserJid()

{

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

Vector<String> vec = new Vector<String>();

try {

con = (Connection) DbConnectionManager.getConnection();

pstmt = (PreparedStatement) con.prepareStatement("select * from ofuser");

rs = (ResultSet) pstmt.executeQuery();

while (rs.next()) {

vec.add(rs.getString("username"));

}

}

catch (Exception ex) {

System.out.println(ex.getMessage());

}

finally {

DbConnectionManager.closeConnection(rs, pstmt, con);

}

return vec;

}

}

希望对大家有帮助,这个可以直接用,代码都有了,就不用我解释了。这个是通用的,后期还需要我自己根据自己需要改一些东西,改完就不通用啦,所以先拿出来记录下来啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: