diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/LjsdMongoTemplate.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/LjsdMongoTemplate.java index b7ceaf718..85bae5a5e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/LjsdMongoTemplate.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/LjsdMongoTemplate.java @@ -105,6 +105,9 @@ public class LjsdMongoTemplate implements MongoUpdateImp { public T findById(String collectionName, String id, Class clazz) throws Exception { int serverIdByUid = AreaManager.getInstance().getServerIdByUid(Integer.parseInt(id), GameApplication.serverId); MongoTemplate otherMonogTemplate = getMongoTemplate(serverIdByUid); + if(otherMonogTemplate==null){ + return null; + } return otherMonogTemplate.findById(id,clazz,collectionName); } @@ -112,6 +115,9 @@ public class LjsdMongoTemplate implements MongoUpdateImp { public T findById(String collectionName, int id, Class clazz) throws Exception { int serverIdByUid = AreaManager.getInstance().getServerIdByUid(id, GameApplication.serverId); MongoTemplate otherMonogTemplate = getMongoTemplate(serverIdByUid); + if(otherMonogTemplate==null){ + return null; + } return otherMonogTemplate.findById(id,clazz,collectionName); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index 7a0ef51b1..e4ded4822 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -82,7 +82,8 @@ public class StoreLogic implements IEventHandler { if(session.getFiveReady() == 1){ User user = UserManager.getUser(session.getUid()); if(user==null){ - OnlineUserManager.sessionMap.remove(session.getUid()); + LOGGER.info("user null removeid=>{}",session.getUid()); + OnlineUserManager.userOffline(session.getUid()); continue; } long userCreateTime = user.getPlayerInfoManager().getCreateTime(); @@ -109,7 +110,8 @@ public class StoreLogic implements IEventHandler { if(session.getFiveReady() == 1){ User user = UserManager.getUser(session.getUid()); if(user==null){ - OnlineUserManager.sessionMap.remove(session.getUid()); + LOGGER.info("user null removeid=>{}",session.getUid()); + OnlineUserManager.userOffline(session.getUid()); continue; } if(!user.getStoreManager().getStoreInfoMap().containsKey(sStoreTypeConfig.getId())){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RetrySendIndicationThread.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RetrySendIndicationThread.java index dc79db877..e114ed49d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RetrySendIndicationThread.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/RetrySendIndicationThread.java @@ -37,6 +37,8 @@ public class RetrySendIndicationThread extends Thread{ Map sessionMap = new ConcurrentHashMap<>(OnlineUserManager.sessionMap); long now = TimeUtils.now(); Set removeIds = new HashSet<>(); + + for(ISession session : sessionMap.values()){ if(session == null){ continue; @@ -65,7 +67,18 @@ public class RetrySendIndicationThread extends Thread{ } } for(Integer removeId:removeIds ){ - OnlineUserManager.sessionMap.remove(removeId); + LOGGER.info("close channel removeid=>{}",removeId); + OnlineUserManager.userOffline(removeId); + } + + for(Map.Entry sessionEntry:sessionMap.entrySet()){ + if(sessionEntry.getValue() == null){ + continue; + } + if(sessionEntry.getValue().getUid()!=sessionEntry.getKey()){ + LOGGER.error("Exception: map key value 不一致key{},sessionUid{}",sessionEntry.getKey(),sessionEntry.getValue().getUid()); + OnlineUserManager.userOffline(sessionEntry.getKey()); + } } } }