⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onlineserviceimpl.java

📁 这是一款最新的野蔷薇论坛源码,有需要的朋友可以尽情下载
💻 JAVA
字号:
/* 
 * Created on 2007-6-11
 * Last modified on 2007-6-20
 * Powered by GamVan.com
 */
package com.yeqiangwei.club.service.user;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.model.OnlineModel;
import com.yeqiangwei.club.service.model.UserModel;
import com.yeqiangwei.club.service.util.BasicInfoService;
import com.yeqiangwei.club.util.BeanUtils;
import com.yeqiangwei.club.view.model.UserView;
import com.yeqiangwei.util.FormatDateTime;
import com.yeqiangwei.util.ParamUtils;
import com.yeqiangwei.util.Validator;

public class OnlineServiceImpl implements OnlineService{
	
	private static final Logger logger = Logger.getLogger(OnlineServiceImpl.class);
	
	public static Map<String,OnlineModel> ONLINE_MAP;
	
	public static Map<String,UserModel> ONLINE_USER_MAP;
	
	private static int USERS = 0; //在线总数
	
	private static int MEMBERS = 0; //在线会员总数
	
	private static long TIMEOUT = 0;
	
	private static boolean ISRUNNING = false; //清理正在执行
	
	static {
		if(ONLINE_MAP==null){
			ONLINE_MAP = new HashMap<String, OnlineModel>();
		}
		if(ONLINE_USER_MAP==null){
			ONLINE_USER_MAP = new HashMap<String, UserModel>();
		}
		if(TIMEOUT==0){
			TIMEOUT = getTimeOut();
		}
	}
	
	public boolean online(UserModel model) {
		if(Validator.isEmpty(ONLINE_USER_MAP.get(this.onlinekey(model)))){
			return false;
		}else{
			return true;
		}
	}
	

	public boolean online(UserView view) {
		if(Validator.isEmpty(view)){
			return false;
		}
		UserModel model = new UserModel();
		BeanUtils.copyProperties(model,view);
		return this.online(model);
	}

	
	private static long getTimeOut(){
		int refreshTime = getBasicInfoService().findOnly().getRefreshTime();
		String temp = FormatDateTime.dateAdd(FormatDateTime.SECOND,refreshTime,"yyyyMMddHHmmss");
		return FormatDateTime.formatDateTimeToLong(temp);
	}
	
	public void timedOut(){
		if(TIMEOUT >= FormatDateTime.now()||ISRUNNING){
			logger.info(TIMEOUT+" >= "+FormatDateTime.now());
			return ;
		}else{
			logger.info(TIMEOUT+" < "+FormatDateTime.now());
			ISRUNNING = true;
			TIMEOUT = getTimeOut();
		}
		Set<String> set =  ONLINE_MAP.keySet();   
		Iterator<String> it = set.iterator();   
		while(it.hasNext()){
			String key = it.next();
			OnlineModel model = ONLINE_MAP.get(key);
			if(model.getTimeout()<FormatDateTime.now()){
				it.remove();
				USERS--;
				if(model.getUserModel()!=null){
					MEMBERS--;
					ONLINE_USER_MAP.remove(this.onlinekey(model.getUserModel()));
				}
			}
		}
		logger.info("清理超时在线用户结束...");
		ISRUNNING = false;
	}
	
	public List<OnlineModel> results() {
		List<OnlineModel> list = new ArrayList<OnlineModel>();
		Set<String> set =  ONLINE_MAP.keySet();   
		Iterator<String> it = set.iterator();   
		while(it.hasNext()){
			String key = it.next();
			OnlineModel model = ONLINE_MAP.get(key);
			if(!Validator.isEmpty(model.getUserModel())){
				list.add(model);
			}
		}
		Comparator<OnlineModel> comp = new OnlineComparator();
		Collections.<OnlineModel>sort(list,comp);
		return list;
	}

	public void utils(HttpServletRequest request) {
		if(ISRUNNING){
			return;
		}
		String ip = request.getRemoteAddr();
		long timeout = getTimeOut();
		OnlineModel model = new OnlineModel();
		model.setUrl(request.getRequestURI());
		model.setIp(ip);
		model.setTimeout(timeout);
		model.setDatetime(FormatDateTime.now());
		model.setUserModel(ParamUtils.<UserModel>getSessionObject(request,"User", null));
		if(Validator.isEmpty(ONLINE_MAP.get(ip))){
			ONLINE_MAP.put(ip,model);
			if(!Validator.isEmpty(model.getUserModel())){
				MEMBERS++;
				ONLINE_USER_MAP.put(this.onlinekey(model.getUserModel()), model.getUserModel());
			}
			USERS++;
		}else{
			if(Validator.isEmpty(ONLINE_MAP.get(ip).getUserModel())
					&&!Validator.isEmpty(model.getUserModel()))
			{
				MEMBERS++;
				ONLINE_USER_MAP.put(this.onlinekey(model.getUserModel()), model.getUserModel());
			}
			else if(!Validator.isEmpty(ONLINE_MAP.get(ip).getUserModel())
					&&Validator.isEmpty(model.getUserModel()))
			{
				ONLINE_USER_MAP.remove(this.onlinekey(ONLINE_MAP.get(ip).getUserModel()));
				MEMBERS--;
			}
			else if(!Validator.isEmpty(model.getUserModel())){
				ONLINE_USER_MAP.put(this.onlinekey(model.getUserModel()), model.getUserModel());
			}
			ONLINE_MAP.put(ip,model);
		}
	}

	private String onlinekey(UserModel user){
		if(Validator.isEmpty(user)){
			return null;
		}else{
			return "online: "+user.getUserId();
		}
	}
	
	public static BasicInfoService getBasicInfoService() {
		return ServiceWrapper.<BasicInfoService>getSingletonInstance(ServiceLocator.BASICINFO);
	}

	public int getUsers() {
		return USERS;
	}

	public int getMembers() {
		return MEMBERS;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -