From 205481e8abd6001e7c006577fedea700e1d633d2 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 4 Nov 2019 18:25:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=BC=80=E6=9C=8D=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 20 ++++++++++++++++ .../main/java/com/ljsd/GameApplication.java | 18 ++++++++++++++- .../jieling/config/json/ServerProperties.java | 10 ++++++++ .../com/ljsd/jieling/db/redis/RedisKey.java | 1 + .../com/ljsd/jieling/db/redis/RedisUtil.java | 23 +++++++++++++++++++ 5 files changed, 71 insertions(+), 1 deletion(-) diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 0ffd275a3..b3b3ede55 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -1238,6 +1238,26 @@ public class TimeUtils { return now(); } + public static long DifferMintFromLast(Object object){ + try { + String time; + if(null!=object){ + try { + time = String.valueOf(object); + }catch (Exception e1){ + return 1; + } + }else { + return 1; + } + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return (simpleDateFormat.parse(time).getTime()-now())/(60*1000); + } catch (ParseException e) { + LOGGER.error("", e); + } + return 1; + } + /** * 判断两个时间是否隔开周几的几点 * @param lastTime diff --git a/serverlogic/src/main/java/com/ljsd/GameApplication.java b/serverlogic/src/main/java/com/ljsd/GameApplication.java index 0da92f667..d0237958c 100644 --- a/serverlogic/src/main/java/com/ljsd/GameApplication.java +++ b/serverlogic/src/main/java/com/ljsd/GameApplication.java @@ -86,7 +86,7 @@ public class GameApplication { //http线程池初始化 // HttpPool.init(); //todo 设置开服时间 - setRegisterTime(); + setRegisterTime();// might loop GuilidManager.init(); STableManager.initialize("config"); @@ -142,6 +142,22 @@ public class GameApplication { ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class); if( null == serverConfigTmp ){ serverConfigTmp = new ServerConfig(); + if (GameApplication.serverProperties.isAutoOpen()) { + int startbefore = 0; //开服白名单时间 + long needtime = TimeUtils.DifferMintFromLast(RedisUtil.getInstence().getObject(GameApplication.serverId + RedisKey.Delimiter_colon + RedisKey.AUTOOPENTIME ,"",String.class,-1)); + while (needtime - startbefore > 0) { + long sleepTime = needtime - startbefore; + try { + LOGGER.error("预计" + sleepTime + "分钟后开服"); + Thread.sleep(1000 * 60); + } catch (Exception e) { + LOGGER.error("休眠异常", e.getMessage(), e); + } + needtime = TimeUtils.DifferMintFromLast(RedisUtil.getInstence().getObject(GameApplication.serverId + RedisKey.Delimiter_colon + RedisKey.AUTOOPENTIME ,"",String.class,-1)); + } + } + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long serverOenTime = TimeUtils.getAppointTime(0); String format = simpleDateFormat.format(serverOenTime); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/json/ServerProperties.java b/serverlogic/src/main/java/com/ljsd/jieling/config/json/ServerProperties.java index 3d1286ae8..7b9139584 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/json/ServerProperties.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/json/ServerProperties.java @@ -26,6 +26,8 @@ public class ServerProperties { private int areaId; + private boolean autoOpen; + public int getId() { return id; } @@ -98,6 +100,14 @@ public class ServerProperties { this.areaId = areaId; } + public boolean isAutoOpen() { + return autoOpen; + } + + public void setAutoOpen(boolean autoOpen) { + this.autoOpen = autoOpen; + } + @Override public String toString() { return "ServerProperties{" + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 2d8e4f25d..d654ed6c6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -187,6 +187,7 @@ public class RedisKey { public static final String LOGIC_SERVER_INFO = "LOGIC_SERVER_INFO"; public static final String BLOODY_SERVER_INFO = "BLOODY_SERVER_INFO"; public static final String SYSMSG = "SYSMSG"; + public static final String AUTOOPENTIME = "AUTOOPENTIME"; public final static String CDKEY = "CDKEY"; public static Set familyKey = new HashSet<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 52c18f455..2d352c966 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -3,6 +3,7 @@ package com.ljsd.jieling.db.redis; import com.google.gson.Gson; import com.ljsd.GameApplication; import com.ljsd.common.mogodb.util.GlobalData; +import org.springframework.data.redis.RedisConnectionFailureException; import util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -162,6 +163,28 @@ public class RedisUtil { return gson.fromJson(source,clazz); } + /** + * 获取Object + * + * @param key + * @return + */ + public T getObject(String type, String key, Class clazz, int expireTime) { + try { + String valueStr = redisTemplate.opsForValue().get(type + RedisKey.Delimiter_colon + key); + if (valueStr == null) { + return null; + } + if (expireTime > 0) { + redisTemplate.expire(type + key, expireTime, TimeUnit.SECONDS); + } + return gson.fromJson(valueStr, clazz); + } catch (RedisConnectionFailureException e) { + LOGGER.error("------------------Redis 连接失败------------------msg={}", e); + } + return null; + } + /** * 普通缓存放入并设置时间 *