自动开服功能修改

master
PC-202302260912\Administrator 2023-08-16 10:58:23 +08:00
parent 35b289ff97
commit 4f50faaf6d
5 changed files with 57 additions and 48 deletions

View File

@ -517,14 +517,15 @@ public class ServerInfoController {
/**
*
*/
@RequestMapping(value = "/updateAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
@RequestMapping(value = "/uporsetAutoStartServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody
int updateAutoServerSetting(@RequestBody AssSetting setting) throws Exception {
int uporsetAutoStartServerSetting(@RequestBody AssSetting setting) throws Exception {
AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId());
if (info == null){
return 0;
serverInfoDao.insertAssSettingInfo(setting);
}else {
serverInfoDao.updateAssSettingInfo(setting);
}
serverInfoDao.updateAssSettingInfo(setting);
AutoServerManager.initAssSettingMap();
return 1;
}
@ -547,24 +548,24 @@ public class ServerInfoController {
return 1;
}
/**
*
*/
@RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody
int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception {
Set<String> set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet());
if (!set.contains(setting.getId())){
return 2;// 子渠道不存在
}
AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId());
if (info != null){
return 0;// 渠道已配置自动开服
}
serverInfoDao.insertAssSettingInfo(setting);
AutoServerManager.initAssSettingMap();
return 1;
}
// /**
// * 新增自动开服配置
// */
// @RequestMapping(value = "/addAutoServerSetting", method = {RequestMethod.POST, RequestMethod.GET})
// public @ResponseBody
// int addAutoServerSetting(@RequestBody AssSetting setting) throws Exception {
// Set<String> set = serverInfoDao.getAllServerMap().values().stream().map(ServerInfo::getSub_channel).collect(Collectors.toSet());
// if (!set.contains(setting.getId())){
// return 2;// 子渠道不存在
// }
// AssSetting info = serverInfoDao.findAssSettingInfo(setting.getId());
// if (info != null){
// return 0;// 渠道已配置自动开服
// }
// serverInfoDao.insertAssSettingInfo(setting);
// AutoServerManager.initAssSettingMap();
// return 1;
// }
/**
*

View File

@ -2,6 +2,7 @@ package com.jmfy.utils;
import com.jmfy.controller.LoginController;
import com.jmfy.dao.ServerInfoDao;
import com.jmfy.handler.GMHandler;
import com.jmfy.model.AssSetting;
import com.jmfy.model.CServerOpenTime;
import com.jmfy.model.ServerInfo;
@ -62,7 +63,7 @@ public class AutoServerManager {
AutoServerManager.redisPwd = redisPwd;
}
private static long date = 0;
private static Map<String, Long> dateMap = new HashMap<>();
private static final long TIME = DateUtil.ONE_MINUTE * 3;
@ -139,7 +140,7 @@ public class AutoServerManager {
// 获取全部服务器列表,排除非未运营和准备中的服务器,正序排列
List<ServerInfo> infoList = getServerInfoMap().values().stream().filter(v->v.getSub_channel().equals(setting.getId())).sorted().collect(Collectors.toList());
if (infoList.isEmpty()) {
return;
continue;
}
for (int i = 0; i < infoList.size(); i++) {
ServerInfo newServer = infoList.get(i);
@ -149,20 +150,22 @@ public class AutoServerManager {
// 注册人数
if (REGISTER == setting.getType()) {
// 注册人数3分钟检查一次
if (now >= (date + TIME)) {
long time = dateMap.getOrDefault(setting.getId(), 0L) + TIME;
if (now >= time) {
ServerInfo oldServer = getServerIndex(infoList, i - 1);
if (oldServer == null){
startServers(null, newServer);
TaskKit.scheduleWithFixedOne(()-> startServers(null, newServer),0);
}else {
// 注册人数
long registerNum = serverInfoDao.getRegisterNum(oldServer.getServer_id());
LOGGER.info("自动开服,人数判断,条件值:{},当前服务器人数:{}-{},将开服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id());
if (registerNum >= Integer.parseInt(setting.getValue())) {
LOGGER.info("自动开服,注册人数判断,条件值:{},当前服务器人数:{}-{},下一台服务器:{}", setting.getValue(), oldServer.getServer_id(), registerNum, newServer.getServer_id());
startServers(oldServer, newServer);
TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0);
}
}
// 更新时间
date = now;
dateMap.put(setting.getId(), now);
}
}
// 时间开服,每分钟
@ -170,9 +173,9 @@ public class AutoServerManager {
ServerInfo oldServer = getServerIndex(infoList, i - 1);
// 比较时间是否一致,精确到分
boolean compareTime = DateUtil.compareTime(setting.getValue());
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},将开服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id());
if (compareTime) {
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},下一台服务器:{}", setting.getValue(), DateUtil.nowString(), newServer.getServer_id());
startServers(oldServer, newServer);
TaskKit.scheduleWithFixedOne(()-> startServers(oldServer, newServer),0);
}
}
break;
@ -187,21 +190,26 @@ public class AutoServerManager {
/**
*
*/
private static void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception {
// 停服脚本
delUser(newServer);
// 间隔30秒再获取开服数据
Thread.sleep(DateUtil.ONE_SECOND * 30);
// 验证
boolean serverStatus = verifyServerStatus(newServer);
if (serverStatus){
// 旧服务器状态更新
if (oldServer != null){
updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, oldServer.getServer_id());
private static void startServers(ServerInfo oldServer, ServerInfo newServer) {
try {
// 停服脚本
delUser(newServer);
// 间隔30秒再获取开服数据
Thread.sleep(DateUtil.ONE_SECOND * 30);
// 验证
boolean serverStatus = verifyServerStatus(newServer);
if (serverStatus){
// 旧服务器状态更新
if (oldServer != null){
updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, oldServer.getServer_id());
}
// 新服务器状态更新
updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id());
LOGGER.info("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
// LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
}
// 新服务器状态更新
updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id());
LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
}catch (Exception e){
LOGGER.error("自动开服报错,{}",e.getMessage(),e);
}
}

View File

@ -42,7 +42,7 @@ public class JsonUtil {
String[] paramValues = request.getParameterValues(paramName);
String paramValue = paramValues[0];
map.put(paramName, paramValue);
LOGGER.info("parameter : " + paramName + "=" + paramValue);
// LOGGER.info("parameter : " + paramName + "=" + paramValue);
}
return map;
}

View File

@ -192,7 +192,7 @@ public abstract class TaskKit {
}
catch (Throwable e) {
// 异常发生时姑且返回10个任务线程池
count = 5;
count = 10;
}
LOGGER.info("定时器线程启动,线程数量:{}",count);
return count;

View File

@ -199,7 +199,7 @@
"value": values
})
,
url: "/addAutoServerSetting",
url: "/uporsetAutoStartServerSetting",
dataType: "json",
contentType: 'application/json',