下线清除
parent
47595e498f
commit
9aef38cdc7
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue