openfire推送离线聊天信息插件

转载地址:http://blog.csdn.net/newjueqi/article/details/18032925

/**
 * Copyright (C) 2004-2008 Jive Software. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hyh.offlinemessage.plugin;

import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import org.jivesoftware.database.SequenceManager;
import org.jivesoftware.openfire.PresenceManager;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.InterceptorManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
import org.xmpp.packet.Presence;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.PresenceManager;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.Log;

/**
 * send offline msg plugin
 */
public class OfflineMsg implements PacketInterceptor, Plugin {
	private static final Logger log = LoggerFactory.getLogger(OfflineMsg.class);
	// Hook for intercpetorn
	private InterceptorManager interceptorManager;
	private static PluginManager pluginManager;
	private UserManager userManager;
	private PresenceManager presenceManager;

	public OfflineMsg() {
	}

	public void debug(String str) {
		if (true) {
			// System.out.println(str);
		}
	}

	public void initializePlugin(PluginManager manager, File pluginDirectory) {
		interceptorManager = InterceptorManager.getInstance();
		interceptorManager.addInterceptor(this);
		XMPPServer server = XMPPServer.getInstance();
		userManager = server.getUserManager();
		presenceManager = server.getPresenceManager();
		pluginManager = manager;
		this.debug("start offline 1640");
	}

	public void destroyPlugin() {
		this.debug("start offline 1640");
	}

	/**
	 * intercept message
	 */
	@Override
	public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException {
		JID recipient = packet.getTo();
		if (recipient != null) {
			String username = recipient.getNode();
			// if broadcast message or user is not exist
			if (username == null
					|| !UserManager.getInstance().isRegisteredUser(recipient)) {
				return;
			} else if (!XMPPServer.getInstance().getServerInfo()
					.getXMPPDomain().equals(recipient.getDomain())) {
				// not from the same domain
				return;
			} else if ("".equals(recipient.getResource())) {
			}
		}
		this.doAction(packet, incoming, processed, session);
	}

	/**
	 * send offline msg from this function
	 */
	private void doAction(Packet packet, boolean incoming, boolean processed,
			Session session) {
		Packet copyPacket = packet.createCopy();
		if (packet instanceof Message) {
			Message message = (Message) copyPacket;
			if (message.getType() == Message.Type.chat) {
				if (processed || !incoming) {
					return;
				}
				Message sendmessage = (Message) packet;
				String content = sendmessage.getBody();
				JID recipient = sendmessage.getTo();
				// get message
				try {
					if (recipient.getNode() == null
							|| !UserManager.getInstance().isRegisteredUser(
									recipient.getNode())) {
						// Sender is requesting presence information of an
						// anonymous user
						throw new UserNotFoundException("Username is null");
					}
					Presence status = presenceManager.getPresence(userManager
							.getUser(recipient.getNode()));
					if (status != null) {
						this.debug(recipient.getNode() + " online111"
								+ ",message: " + content);
					} else {
						this.debug(recipient.getNode() + " offline111"
								+ ",message: " + content);
						/*
						 * add your code here to send offline msg
						 * recipient.getNode() : receive's id,for example,if
						 * receive's jid is "23@localhost", receive's id is "23"
						 * content: message content
						 */
					}// end if
				} catch (UserNotFoundException e) {
					this.debug("exceptoin " + recipient.getNode() + " not find"
							+ ",full jid: " + recipient.toFullJID());
				}
			} else if (message.getType() == Message.Type.groupchat) {
				List<?> els = message.getElement().elements("x");
				if (els != null && !els.isEmpty()) {
				} else {
				}
			} else {
			}
		} else if (packet instanceof IQ) {
			IQ iq = (IQ) copyPacket;
			if (iq.getType() == IQ.Type.set && iq.getChildElement() != null
					&& "session".equals(iq.getChildElement().getName())) {
			}
		} else if (packet instanceof Presence) {
			Presence presence = (Presence) copyPacket;
			if (presence.getType() == Presence.Type.unavailable) {
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值