From b3b8da2ba9fdc63b46255011a95d8ce6efe6ffe7 Mon Sep 17 00:00:00 2001 From: jiahuiwen Date: Tue, 9 Nov 2021 22:59:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=88=E8=BF=98=E5=8E=9F=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/dao/UserManager.java | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 77fb6caf9..0508e1b34 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -62,25 +62,42 @@ public class UserManager { //离线清除逻辑 public static void checkOffline(){ +// try { +// Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); +// if (OnlineUserManager.sessionMap.entrySet().isEmpty() && ChampionshipLogic.getProgress() == -1) { +// userMap.clear(); +// userMapPutTime.clear(); +// LOGGER.info("checkOffline no online clear all {}", userMap.keySet().size()); +// return; +// } +// long now = System.currentTimeMillis(); +// for (User integerUserEntry : collect) { +// Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), LIVE_TIME); +// if (now - addTime >= LIVE_TIME) { +// userMap.remove(integerUserEntry.getId()); +// userMapPutTime.remove(integerUserEntry.getId()); +// } +// } +// LOGGER.info("checkOffline left count={}", userMap.keySet().size()); +// }catch (Exception e){ +// LOGGER.error("Exception离线清除逻辑err={}",e.toString()); +// } try { Set collect = userMap.entrySet().stream().filter(integerUserEntry -> !OnlineUserManager.checkUidOnline(integerUserEntry.getKey())).map(Map.Entry::getValue).collect(Collectors.toSet()); - if (OnlineUserManager.sessionMap.entrySet().isEmpty() && ChampionshipLogic.getProgress() == -1) { - userMap.clear(); - userMapPutTime.clear(); - LOGGER.info("checkOffline no online clear all {}", userMap.keySet().size()); - return; - } - long now = System.currentTimeMillis(); - for (User integerUserEntry : collect) { - Long addTime = userMapPutTime.getOrDefault(integerUserEntry.getId(), LIVE_TIME); - if (now - addTime >= LIVE_TIME) { + long l = System.currentTimeMillis(); + collect.forEach(integerUserEntry -> { + long offLineTime = integerUserEntry.getPlayerInfoManager().getOffLineTime(); + if (offLineTime < integerUserEntry.getPlayerInfoManager().getOnlineTime()) { + return; + } + if (l - offLineTime > 12 * 60 * 60 * 1000 && userMapPutTime.getOrDefault(integerUserEntry.getId(), 0L) > 12 * 60 * 60 * 1000) { userMap.remove(integerUserEntry.getId()); userMapPutTime.remove(integerUserEntry.getId()); } - } + }); LOGGER.info("checkOffline left count={}", userMap.keySet().size()); - }catch (Exception e){ - LOGGER.error("Exception离线清除逻辑err={}",e.toString()); + } catch (Exception e) { + LOGGER.error("Exception离线清除逻辑err={}", e.toString()); } }