// Path: brent-pusher-core/src/main/java/cn/brent/pusher/IPlugin.java
// public interface IPlugin {
// 
// 	void start();
// 	
// 	void stop();
// 
// }
// 
// Path: brent-pusher-core/src/main/java/cn/brent/pusher/core/IPusherClient.java
// public interface IPusherClient {
// 	
// 	/**
// 	 * 正常关闭
// 	 */
// 	public static final int NORMAL = 1000;
// 	
// 	/**
// 	 * 服务器拒绝
// 	 */
// 	public static final int REFUSE = 1003;
// 	
// 	
// 	/**
// 	 * 关闭连接
// 	 * @param code 状态码
// 	 * @param reason 原因
// 	 */
// 	void close(int code,String reason);
// 
// 	/**
// 	 * 获取属性值
// 	 * @param key
// 	 * @return
// 	 */
// 	Object getAttr(String key);
// 
// 	/**
// 	 * 新增属性值
// 	 * @param key
// 	 * @param val
// 	 */
// 	void addAttr(String key, Object val);
// 
// 	/**
// 	 * 移除属性值
// 	 * @param key
// 	 */
// 	void removeAttr(String key);
// 
// 	/**
// 	 * 获取key
// 	 * @return
// 	 */
// 	String getKey();
// 
// 	/**
// 	 * 获取Topic
// 	 * @return
// 	 */
// 	String getTopic();
// 
// 	/**
// 	 * 保存key
// 	 * @param key
// 	 */
// 	void setKey(String key);
// 
// 	/**
// 	 * 保存Topic
// 	 * @param topic
// 	 */
// 	void setTopic(String topic);
// 
// 	/**
// 	 * 获取创建时间
// 	 * @return
// 	 */
// 	long getCreateTime();
// 
// 	/**
// 	 * 发送消息
// 	 * @param message
// 	 */
// 	void send(String message);
// 	
// 	/**
// 	 * 发送消息
// 	 * @param message
// 	 * @param close 发送成功后是否关闭连接
// 	 */
// 	void send(String message,boolean close);
// 	
// 
// 	/**
// 	 * 获取超时时间
// 	 * @return
// 	 */
// 	Long getTimeOut();
// 	
// 	/**
// 	 * 设置超时时间
// 	 */
// 	void setTimeOut(Long timeout);
// 	
// }
// 
// Path: brent-pusher-core/src/main/java/cn/brent/pusher/session/ISessionManager.java
// public interface ISessionManager {
// 
// 	/** 连接队列 */
// 	final List<IPusherClient> clientQueue = new CopyOnWriteArrayList<IPusherClient>();
// 	
// 	/**
// 	 * 保存client
// 	 * @param client
// 	 */
// 	void saveConnect(IPusherClient client);
// 	
// 	/**
// 	 * 移除client
// 	 * @param client
// 	 */
// 	void removeConnect(IPusherClient client);
// 	
// 	/**
// 	 * 根据业务编码和key获取Session
// 	 * @param topic
// 	 * @param key
// 	 * @return
// 	 */
// 	Session getSession(String topic, String key);
// 	
// 	/**
// 	 * 移除Session
// 	 * @param topic
// 	 * @param key
// 	 */
// 	void removeSession(String topic, String key);
// 	
// 	/**
// 	 * 移除Session
// 	 * @param Session
// 	 */
// 	void removeSession(Session session);
// 	
// }


import java.util.Iterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.brent.pusher.IPlugin;
import cn.brent.pusher.core.IPusherClient;
import cn.brent.pusher.session.ISessionManager;

package cn.brent.pusher.plugin;




public class CleanUpPlugin implements IPlugin {

	protected Logger logger = LoggerFactory.getLogger(this.getClass());

	protected Thread cleanUpThead;

	/** 超时时间 毫秒 为空时永不超时*/
	protected final Long timeout;
	
	/** 检查间隔 毫秒 */
	protected final long checkInterval;

	public CleanUpPlugin(Long timeout, long checkInterval) {
		this.timeout = timeout;
		this.checkInterval = checkInterval;
	}

	/**
	 * 清扫任务
	 * 
	 * @param timeout
	 * @param checkInterval
	 * @param handler
	 */
	protected void cleanUp() {
		logger.debug("start cleanUp...");
		long startTime = System.currentTimeMillis();
		
		Iterator<IPusherClient> it = ISessionManager.clientQueue.iterator();
		
		while (it.hasNext()) {

// Path: brent-pusher-core/src/main/java/cn/brent/pusher/IPlugin.java
// public interface IPlugin {
// 
// 	void start();
// 	
// 	void stop();
// 
// }
// 
// Path: brent-pusher-core/src/main/java/cn/brent/pusher/core/IPusherClient.java
// public interface IPusherClient {
// 	
// 	/**
// 	 * 正常关闭
// 	 */
// 	public static final int NORMAL = 1000;
// 	
// 	/**
// 	 * 服务器拒绝
// 	 */
// 	public static final int REFUSE = 1003;
// 	
// 	
// 	/**
// 	 * 关闭连接
// 	 * @param code 状态码
// 	 * @param reason 原因
// 	 */
// 	void close(int code,String reason);
// 
// 	/**
// 	 * 获取属性值
// 	 * @param key
// 	 * @return
// 	 */
// 	Object getAttr(String key);
// 
// 	/**
// 	 * 新增属性值
// 	 * @param key
// 	 * @param val
// 	 */
// 	void addAttr(String key, Object val);
// 
// 	/**
// 	 * 移除属性值
// 	 * @param key
// 	 */
// 	void removeAttr(String key);
// 
// 	/**
// 	 * 获取key
// 	 * @return
// 	 */
// 	String getKey();
// 
// 	/**
// 	 * 获取Topic
// 	 * @return
// 	 */
// 	String getTopic();
// 
// 	/**
// 	 * 保存key
// 	 * @param key
// 	 */
// 	void setKey(String key);
// 
// 	/**
// 	 * 保存Topic
// 	 * @param topic
// 	 */
// 	void setTopic(String topic);
// 
// 	/**
// 	 * 获取创建时间
// 	 * @return
// 	 */
// 	long getCreateTime();
// 
// 	/**
// 	 * 发送消息
// 	 * @param message
// 	 */
// 	void send(String message);
// 	
// 	/**
// 	 * 发送消息
// 	 * @param message
// 	 * @param close 发送成功后是否关闭连接
// 	 */
// 	void send(String message,boolean close);
// 	
// 
// 	/**
// 	 * 获取超时时间
// 	 * @return
// 	 */
// 	Long getTimeOut();
// 	
// 	/**
// 	 * 设置超时时间
// 	 */
// 	void setTimeOut(Long timeout);
// 	
// }
// 
// Path: brent-pusher-core/src/main/java/cn/brent/pusher/session/ISessionManager.java
// public interface ISessionManager {
// 
// 	/** 连接队列 */
// 	final List<IPusherClient> clientQueue = new CopyOnWriteArrayList<IPusherClient>();
// 	
// 	/**
// 	 * 保存client
// 	 * @param client
// 	 */
// 	void saveConnect(IPusherClient client);
// 	
// 	/**
// 	 * 移除client
// 	 * @param client
// 	 */
// 	void removeConnect(IPusherClient client);
// 	
// 	/**
// 	 * 根据业务编码和key获取Session
// 	 * @param topic
// 	 * @param key
// 	 * @return
// 	 */
// 	Session getSession(String topic, String key);
// 	
// 	/**
// 	 * 移除Session
// 	 * @param topic
// 	 * @param key
// 	 */
// 	void removeSession(String topic, String key);
// 	
// 	/**
// 	 * 移除Session
// 	 * @param Session
// 	 */
// 	void removeSession(Session session);
// 	
// }


// Path: brent-pusher-core/src/main/java/cn/brent/pusher/plugin/CleanUpPlugin.java
import java.util.Iterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.brent.pusher.IPlugin;
import cn.brent.pusher.core.IPusherClient;
import cn.brent.pusher.session.ISessionManager;

package cn.brent.pusher.plugin;




public class CleanUpPlugin implements IPlugin {

	protected Logger logger = LoggerFactory.getLogger(this.getClass());

	protected Thread cleanUpThead;

	/** 超时时间 毫秒 为空时永不超时*/
	protected final Long timeout;
	
	/** 检查间隔 毫秒 */
	protected final long checkInterval;

	public CleanUpPlugin(Long timeout, long checkInterval) {
		this.timeout = timeout;
		this.checkInterval = checkInterval;
	}

	/**
	 * 清扫任务
	 * 
	 * @param timeout
	 * @param checkInterval
	 * @param handler
	 */
	protected void cleanUp() {
		logger.debug("start cleanUp...");
		long startTime = System.currentTimeMillis();
		
		Iterator<IPusherClient> it = ISessionManager.clientQueue.iterator();
		
		while (it.hasNext()) {

			IPusherClient conn = (IPusherClient) it.next();
