generated from root/miduo_server
自动开服功能修改
parent
35b289ff97
commit
4f50faaf6d
|
@ -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;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 删除自动开服配置
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -192,7 +192,7 @@ public abstract class TaskKit {
|
|||
}
|
||||
catch (Throwable e) {
|
||||
// 异常发生时姑且返回10个任务线程池
|
||||
count = 5;
|
||||
count = 10;
|
||||
}
|
||||
LOGGER.info("定时器线程启动,线程数量:{}",count);
|
||||
return count;
|
||||
|
|
|
@ -199,7 +199,7 @@
|
|||
"value": values
|
||||
})
|
||||
,
|
||||
url: "/addAutoServerSetting",
|
||||
url: "/uporsetAutoStartServerSetting",
|
||||
dataType: "json",
|
||||
contentType: 'application/json',
|
||||
|
||||
|
|
Loading…
Reference in New Issue