📄 onlineserviceimpl.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 + -