下线清除
parent
47595e498f
commit
9aef38cdc7
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ljsd.jieling.logic;
|
package com.ljsd.jieling.logic;
|
||||||
|
|
||||||
|
import com.ljsd.jieling.logic.dao.UserManager;
|
||||||
import com.ljsd.jieling.network.session.ISession;
|
import com.ljsd.jieling.network.session.ISession;
|
||||||
import org.springframework.data.redis.support.collections.DefaultRedisMap;
|
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 Map<Integer, ISession> sessionMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
public static void checkOnline(){
|
||||||
|
UserManager.checkOffline();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void userOffline(int uid) {
|
public static void userOffline(int uid) {
|
||||||
sessionMap.remove(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.globals.BIReason;
|
||||||
import com.ljsd.jieling.ktbeans.KtEventUtils;
|
import com.ljsd.jieling.ktbeans.KtEventUtils;
|
||||||
import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
|
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.ActivityLogic;
|
||||||
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
|
import com.ljsd.jieling.logic.activity.event.NewWelfareEvent;
|
||||||
import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum;
|
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.hero.HeroLogic;
|
||||||
import com.ljsd.jieling.logic.mission.GameEvent;
|
import com.ljsd.jieling.logic.mission.GameEvent;
|
||||||
import com.ljsd.jieling.logic.player.PlayerLogic;
|
import com.ljsd.jieling.logic.player.PlayerLogic;
|
||||||
|
import com.ljsd.jieling.network.server.SessionManager;
|
||||||
import com.ljsd.jieling.util.ItemUtil;
|
import com.ljsd.jieling.util.ItemUtil;
|
||||||
import config.SGameSetting;
|
import config.SGameSetting;
|
||||||
import config.SPlayerLevelConfig;
|
import config.SPlayerLevelConfig;
|
||||||
import manager.STableManager;
|
import manager.STableManager;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import util.TimeUtils;
|
import util.TimeUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class UserManager {
|
public class UserManager {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(UserManager.class);
|
||||||
private static Map<Integer, User> userMap = new ConcurrentHashMap<>();
|
private static Map<Integer, User> userMap = new ConcurrentHashMap<>();
|
||||||
|
private static Map<Integer,Long> userMapPutTime = new ConcurrentHashMap<>(); //离线读入
|
||||||
|
|
||||||
public static void addUser(User user) {
|
public static void addUser(User user) {
|
||||||
userMap.put(user.getId(), user);
|
userMap.put(user.getId(), user);
|
||||||
|
userMapPutTime.put(user.getId(),TimeUtils.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUserExist(int uid) {
|
public static boolean isUserExist(int uid) {
|
||||||
return userMap.containsKey(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 {
|
public static User userLogin(int uid,String openId,String channel,int pid,int gid) throws Exception {
|
||||||
User user = null;
|
User user = null;
|
||||||
if (!UserManager.isUserExist(uid)){
|
if (!UserManager.isUserExist(uid)){
|
||||||
|
|
@ -131,7 +158,7 @@ public class UserManager {
|
||||||
if(canNull){
|
if(canNull){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
throw new Exception("UserManager::getUser null exception");
|
throw new Exception("UserManager::getUser null exception"+user.getId());
|
||||||
}
|
}
|
||||||
UserManager.addUser(user);
|
UserManager.addUser(user);
|
||||||
return 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()));
|
RedisUtil.getInstence().set(RedisKey.ONLINE_NUM+RedisKey.Delimiter_colon+GameApplication.serverId, String.valueOf(OnlineUserManager.sessionMap.entrySet().size()));
|
||||||
DeathPathLogic.getInstance().statusCheck();
|
DeathPathLogic.getInstance().statusCheck();
|
||||||
GuildFightLogic.minuteCheckForCarFight();
|
GuildFightLogic.minuteCheckForCarFight();
|
||||||
|
OnlineUserManager.checkOnline();
|
||||||
LOGGER.info("MinuteTask end...");
|
LOGGER.info("MinuteTask end...");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("e",e);
|
LOGGER.error("e",e);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue