下线清除

back_recharge
zhangshanxue 2020-07-08 19:27:13 +08:00
parent 47595e498f
commit 9aef38cdc7
3 changed files with 36 additions and 3 deletions

View File

@ -1,5 +1,6 @@
package com.ljsd.jieling.logic;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.network.session.ISession;
import org.springframework.data.redis.support.collections.DefaultRedisMap;
@ -15,6 +16,10 @@ public class OnlineUserManager {
public static Map<Integer, ISession> sessionMap = new ConcurrentHashMap<>();
public static void checkOnline(){
UserManager.checkOffline();
}
public static void userOffline(int uid) {
sessionMap.remove(uid);

View File

@ -7,6 +7,7 @@ import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.ktbeans.KtEventUtils;
import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum;
@ -15,30 +16,56 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.server.SessionManager;
import com.ljsd.jieling.util.ItemUtil;
import config.SGameSetting;
import config.SPlayerLevelConfig;
import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
public class UserManager {
private static final Logger LOGGER = LoggerFactory.getLogger(UserManager.class);
private static Map<Integer, User> userMap = new ConcurrentHashMap<>();
private static Map<Integer,Long> userMapPutTime = new ConcurrentHashMap<>(); //离线读入
public static void addUser(User user) {
userMap.put(user.getId(), user);
userMapPutTime.put(user.getId(),TimeUtils.now());
}
public static boolean isUserExist(int uid) {
return userMap.containsKey(uid);
}
//离线清除逻辑
public static void checkOffline(){
try {
Set<User> collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet());
long l = System.currentTimeMillis();
collect.forEach(integerUserEntry -> {
long offLineTime = integerUserEntry.getPlayerInfoManager().getOffLineTime();
if(offLineTime<integerUserEntry.getPlayerInfoManager().getOnlineTime()){
return;
}
if(l-offLineTime>7*60*1000&& userMapPutTime.getOrDefault(integerUserEntry.getId(),0L)>7*60*100){
userMap.remove(integerUserEntry.getId());
userMapPutTime.remove(integerUserEntry.getId());
}
});
}catch (Exception e){
LOGGER.error(e.toString());
}
}
public static User userLogin(int uid,String openId,String channel,int pid,int gid) throws Exception {
User user = null;
if (!UserManager.isUserExist(uid)){
@ -131,7 +158,7 @@ public class UserManager {
if(canNull){
return null;
}
throw new Exception("UserManager::getUser null exception");
throw new Exception("UserManager::getUser null exception"+user.getId());
}
UserManager.addUser(user);
return user;

View File

@ -84,6 +84,7 @@ public class MinuteTask extends Thread {
RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size()));
DeathPathLogic.getInstance().statusCheck();
GuildFightLogic.minuteCheckForCarFight();
OnlineUserManager.checkOnline();
LOGGER.info("MinuteTask end...");
} catch (Exception e) {
LOGGER.error("e",e);