From cd3409f7798d7dd49a977daf1ed23facee737da5 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Tue, 5 Nov 2019 10:57:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=8E=A8=E8=8D=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GetServerListController.java | 51 ++++++++++++++++--- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ljsd/controller/GetServerListController.java b/src/main/java/com/ljsd/controller/GetServerListController.java index ab7bfcb..a6f4193 100644 --- a/src/main/java/com/ljsd/controller/GetServerListController.java +++ b/src/main/java/com/ljsd/controller/GetServerListController.java @@ -13,9 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class GetServerListController extends HttpServlet { @@ -23,6 +21,7 @@ public class GetServerListController extends HttpServlet { private final static String _WHITE_LIST = "white_list"; private static ConcurrentHashMap serverInfosCache = new ConcurrentHashMap<>(); private static volatile DBObject whiteListCache = new BasicDBObject(); + private static volatile String recommend = "";//推荐列表 private static volatile long lastRefreshTime = 0; public GetServerListController() { @@ -55,36 +54,55 @@ public class GetServerListController extends HttpServlet { req.put("plat", plat); List serverList = new ArrayList<>(); + List serverIDList = new ArrayList<>(); long local = System.currentTimeMillis(); if ((local - lastRefreshTime) > 60 * 1000 || serverInfosCache.isEmpty()) { serverInfosCache.clear(); lastRefreshTime = local; + recommend = ""; whiteListCache = BaseGlobal.getInstance().mongoDBPool.findOne(_WHITE_LIST, openId); List serverInfoList = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, req); + SortedSet newServerList = new TreeSet<>(); + String maxNumServerId= ""; + int maxNum = 0; for (DBObject serverInfo : serverInfoList) { int state = Integer.parseInt(serverInfo.get("state").toString()); if (state == 0 || state == -1) { continue; } + + //opentime long time = Long.parseLong(serverInfo.get("open_time").toString()); if (System.currentTimeMillis() < time) { continue; } + + //state + String server_id=serverInfo.get("server_id").toString(); + int num = getOnlineNum(server_id); if (whiteListCache != null && state == 1) { state = 2; } else { if (state == 5) { - state = getState(serverInfo.get("server_id").toString()); + state = getState(server_id,num); } } + if(state==2&&maxNum myServerList = new ArrayList<>(); int time = 0; for (Map.Entry entry : userServerInfoMap.entrySet()) { + if(!serverIDList.contains(entry.getKey())){ + //服务器已清除 + continue; + } myServerList.add(entry.getKey()); if (entry.getValue().getLoginTime() > time) { myLastServer = getDBObject(entry.getKey(), entry.getValue()); } } + DBObject resp = new BasicDBObject(); resp.put("serverList", serverList); resp.put("myServerList", myServerList); if (null != myLastServer) resp.put("lastServer", myLastServer); + if(recommend!=null&&!recommend.equals("")){ + resp.put("recommend", recommend); + } out.print(resp.toString()); } catch (Exception e) { e.printStackTrace(); @@ -143,8 +179,7 @@ public class GetServerListController extends HttpServlet { this.doGet(request, response); } - private int getState(String server_id) throws Exception { - int num = getOnlineNum(server_id); + private int getState(String server_id,int num) throws Exception { int state = 2; Map globalCfgMap = BaseGlobal.getInstance().redisApp.hgetAll(RedisKey.GLOBAL_SYS_PRO, "", String.class, -1, false); int crowdnum = Integer.valueOf(globalCfgMap.getOrDefault("crowdnum", "0"));