generated from root/miduo_server
自动开服修改
parent
bba5494d83
commit
87ce1a2bd2
|
|
@ -267,6 +267,7 @@ public class ServerInfoController {
|
|||
serverInfoDao.updateOpenServerTime(vo.getServer_id(),vo.getOpenTime());
|
||||
// 重启服务器
|
||||
GMHandler.sendGm(info.getServer_id(),"reloadserverconfig");
|
||||
autoServerManager.restartServer2(info.getServer_id());
|
||||
}else {
|
||||
updateGmGroupId(vo.getServer_id(),vo.getCrossGroupId());
|
||||
}
|
||||
|
|
@ -274,6 +275,46 @@ public class ServerInfoController {
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量修改服务器状态
|
||||
* @param request
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value = "/serverListEdit", method = {RequestMethod.POST, RequestMethod.GET})
|
||||
public @ResponseBody int serverListEdit(HttpServletRequest request) throws Exception {
|
||||
// f服务器列表
|
||||
String serverId = request.getParameter("serverId");
|
||||
String[] serverIds = serverId.split(",");
|
||||
|
||||
String status = request.getParameter("status");
|
||||
String crossIdStr = request.getParameter("crossId");
|
||||
String patch = "[-]?[0-9]+?";
|
||||
boolean matches = patch.matches(crossIdStr);
|
||||
|
||||
Map<String, ServerInfo> allServerMap = serverInfoDao.getAllServerMap();
|
||||
for (String id : serverIds) {
|
||||
ServerInfo info = allServerMap.get(id);
|
||||
if (info == null){
|
||||
LoginController.addQueue("无法在数据库内找到对应的服务器id,操作失败,服务器id:"+id);
|
||||
continue;
|
||||
}
|
||||
// 存在未运行状态的服务器不能批量修改
|
||||
if (Integer.parseInt(info.getStatus()) == ServerStatusEnum.NOT_OPERATE.getId()){
|
||||
LoginController.addQueue("服务器未处于《未运营》状态,无法修改,服务器id:"+id);
|
||||
continue;
|
||||
}
|
||||
// 修改服务器信息
|
||||
serverInfoDao.updateServerInfo(id, status);
|
||||
// 修改跨服id,空或者非整数不做修改
|
||||
if (matches){
|
||||
updateGmGroupId(id,Integer.parseInt(crossIdStr));
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 清库
|
||||
* @return
|
||||
|
|
@ -303,46 +344,6 @@ public class ServerInfoController {
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量修改服务器状态
|
||||
* @param request
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value = "/serverListEdit", method = {RequestMethod.POST, RequestMethod.GET})
|
||||
public @ResponseBody int serverListEdit(HttpServletRequest request) throws Exception {
|
||||
// f服务器列表
|
||||
String serverId = request.getParameter("serverId");
|
||||
String[] serverIds = serverId.split(",");
|
||||
|
||||
String status = request.getParameter("status");
|
||||
String crossIdStr = request.getParameter("crossId");
|
||||
String patch = "[-]?[0-9]+?";
|
||||
boolean matches = patch.matches(crossIdStr);
|
||||
|
||||
Map<String, ServerInfo> allServerMap = serverInfoDao.getAllServerMap();
|
||||
for (String id : serverIds) {
|
||||
ServerInfo info = allServerMap.get(id);
|
||||
if (info == null){
|
||||
LOGGER.error("存在");
|
||||
LoginController.addQueue("无法在数据库内找到对应的服务器id,操作失败,服务器id:"+id);
|
||||
continue;
|
||||
}
|
||||
// 存在未运行状态的服务器不能批量修改
|
||||
if (Integer.parseInt(info.getStatus()) == ServerStatusEnum.NOT_OPERATE.getId()){
|
||||
LoginController.addQueue("无法在数据库内找到对应的服务器id,操作失败,服务器id:"+id);
|
||||
continue;
|
||||
}
|
||||
// 修改服务器信息
|
||||
serverInfoDao.updateServerInfo(id, status);
|
||||
// 修改跨服id,空或者非整数不做修改
|
||||
if (matches){
|
||||
updateGmGroupId(id,Integer.parseInt(crossIdStr));
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/serverNumberInfo", method = {RequestMethod.POST, RequestMethod.GET})
|
||||
public String serverNumberInfo(ModelMap map) throws Exception {
|
||||
List<ServerInfo> serverInfos = serverInfoDao.getAllServerInfo();
|
||||
|
|
|
|||
|
|
@ -238,9 +238,11 @@ public class ServerInfo implements Comparable,Cloneable {
|
|||
@Override
|
||||
public int compareTo(Object o) {
|
||||
ServerInfo info = (ServerInfo) o;
|
||||
if (info.get_id() == this.get_id()) {
|
||||
int id1 = Integer.parseInt(info.getServer_id());
|
||||
int id2 = Integer.parseInt(this.getServer_id());
|
||||
if (id1 == id2) {
|
||||
return 0;
|
||||
} else if (this.get_id() > info.get_id()) {
|
||||
} else if (id2 > id1) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
|
|
@ -66,6 +67,14 @@ public class AutoServerManager {
|
|||
return autoServerSetting != null && "1".equals(autoServerSetting.getState());
|
||||
}
|
||||
|
||||
private static ServerInfo getServerIndex(List<ServerInfo> infoList, int num){
|
||||
ServerInfo info = null;
|
||||
try {
|
||||
info = infoList.get(num);
|
||||
}catch (Exception ignored){}
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 开服
|
||||
*/
|
||||
|
|
@ -75,69 +84,77 @@ public class AutoServerManager {
|
|||
// 当前时间
|
||||
long now = DateUtil.now();
|
||||
// 获取全部服务器列表,排除非未运营和准备中的服务器,正序排列
|
||||
List<ServerInfo> allServerInfo = serverInfoDao.getAllServerInfo();
|
||||
allServerInfo.removeIf(v -> Integer.parseInt(v.getStatus()) != ServerStatusEnum.NOT_OPERATE.getId());
|
||||
Stream<ServerInfo> sorted = allServerInfo.stream().sorted();
|
||||
Optional<ServerInfo> first = sorted.findFirst();
|
||||
if (!first.isPresent()) {
|
||||
List<ServerInfo> infoList = serverInfoDao.getAllServerInfo().stream().sorted().collect(Collectors.toList());
|
||||
if (infoList.isEmpty()) {
|
||||
LOGGER.error("自动开服,服务器列表获取为空");
|
||||
return;
|
||||
}
|
||||
ServerInfo newServer = first.get();
|
||||
// 自动开服配置
|
||||
AutoServerSetting setting = RedisUtil.getInstence().getMapValue(RedisUserKey.AUTO_START_SERVER_SETTING, "1", "1", AutoServerSetting.class, -1);
|
||||
// 注册人数
|
||||
if (REGISTER.equals(setting.getChoose())) {
|
||||
// 注册人数3分钟检查一次
|
||||
if (now >= (date + TIME)) {
|
||||
// 获取服务器id
|
||||
String serverId = String.valueOf(Integer.parseInt(newServer.getServer_id()) - 1);
|
||||
// 注册人数
|
||||
long registerNum = serverInfoDao.getRegisterNum(serverId);
|
||||
LOGGER.info("自动开服,注册人数判断,条件值:{},当前服务器人数:{}:{}", setting.getNum(), serverId, registerNum);
|
||||
if (registerNum >= Integer.parseInt(setting.getNum())) {
|
||||
startServers(newServer);
|
||||
for (int i = 0; i < infoList.size(); i++) {
|
||||
ServerInfo newServer = infoList.get(i);
|
||||
if (newServer.getStatusInt() != ServerStatusEnum.NOT_OPERATE.getId()){
|
||||
continue;
|
||||
}
|
||||
// 自动开服配置
|
||||
AutoServerSetting setting = RedisUtil.getInstence().getMapValue(RedisUserKey.AUTO_START_SERVER_SETTING, "1", "1", AutoServerSetting.class, -1);
|
||||
// 注册人数
|
||||
if (REGISTER.equals(setting.getChoose())) {
|
||||
// 注册人数3分钟检查一次
|
||||
if (now >= (date + TIME)) {
|
||||
ServerInfo oldServer = getServerIndex(infoList, i - 1);
|
||||
if (oldServer == null){
|
||||
startServers(null, newServer);
|
||||
}else {
|
||||
// 注册人数
|
||||
long registerNum = serverInfoDao.getRegisterNum(oldServer.getServer_id());
|
||||
LOGGER.info("自动开服,注册人数判断,条件值:{},当前服务器人数:{}:{}", setting.getNum(), oldServer.getServer_id(), registerNum);
|
||||
if (registerNum >= Integer.parseInt(setting.getNum())) {
|
||||
startServers(oldServer, newServer);
|
||||
}
|
||||
}
|
||||
// 更新时间
|
||||
date = now;
|
||||
}
|
||||
// 更新时间
|
||||
date = now;
|
||||
}
|
||||
}
|
||||
// 时间开服,每分钟
|
||||
else if (AUTOTIME.equals(setting.getChoose())) {
|
||||
// 比较时间是否一致,精确到分
|
||||
boolean compareTime = DateUtil.compareTime(setting.getTime());
|
||||
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},结果:{}", setting.getTime(), DateUtil.nowString(), compareTime);
|
||||
if (compareTime) {
|
||||
startServers(newServer);
|
||||
// 时间开服,每分钟
|
||||
if (AUTOTIME.equals(setting.getChoose())) {
|
||||
ServerInfo oldServer = getServerIndex(infoList, i - 1);
|
||||
// 比较时间是否一致,精确到分
|
||||
boolean compareTime = DateUtil.compareTime(setting.getTime());
|
||||
LOGGER.info("自动开服,时间判断,条件值:{},当前时间:{},结果:{}", setting.getTime(), DateUtil.nowString(), compareTime);
|
||||
if (compareTime) {
|
||||
startServers(oldServer, newServer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
LOGGER.error("自动开服报错:::");
|
||||
LOGGER.error("自动开服报错:::{}",e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动开服封装
|
||||
* @param serverInfo
|
||||
* @param oldServer
|
||||
* @param newServer
|
||||
* @throws Exception
|
||||
*/
|
||||
public void startServers(ServerInfo serverInfo) throws Exception {
|
||||
private void startServers(ServerInfo oldServer, ServerInfo newServer) throws Exception {
|
||||
// 停服脚本
|
||||
AutoServerManager.getInstance().delUser(serverInfo);
|
||||
AutoServerManager.getInstance().delUser(newServer);
|
||||
// 间隔30秒再获取开服数据
|
||||
Thread.sleep(DateUtil.ONE_SECOND * 30);
|
||||
// 验证
|
||||
boolean serverStatus = verifyServerStatus(serverInfo);
|
||||
boolean serverStatus = verifyServerStatus(newServer);
|
||||
if (serverStatus){
|
||||
// 旧服务器状态更新
|
||||
String serverId = String.valueOf(Integer.parseInt(serverInfo.getServer_id()) - 1);
|
||||
ServerInfo oldServer = serverInfoDao.getServerInfo(serverId);
|
||||
updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, serverId);
|
||||
if (oldServer != null){
|
||||
updateServer(oldServer, ServerStatusEnum.CROWDING.getId(), 0, oldServer.getServer_id());
|
||||
}
|
||||
// 新服务器状态更新
|
||||
updateServer(serverInfo, ServerStatusEnum.FLUENT.getId(), 1, serverInfo.getServer_id());
|
||||
LoginController.addQueue("自动开服,服务器:" + serverInfo.getServer_id() +"清库重启完毕");
|
||||
updateServer(newServer, ServerStatusEnum.FLUENT.getId(), 1, newServer.getServer_id());
|
||||
LoginController.addQueue("自动开服,服务器:" + newServer.getServer_id() +" 清库重启完毕");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -152,8 +169,6 @@ public class AutoServerManager {
|
|||
int i = 0;
|
||||
String content = GMHandler.getCmdContent("serverstatus", serverId);
|
||||
do {
|
||||
// 间隔30秒再获取开服数据
|
||||
Thread.sleep(DateUtil.ONE_SECOND * 30);
|
||||
// 发送rpc到游戏服
|
||||
Result result1 = RPCClient.sendCmd(Integer.parseInt(serverId),content);
|
||||
if (result1 == null) {
|
||||
|
|
@ -201,6 +216,7 @@ public class AutoServerManager {
|
|||
e.printStackTrace();
|
||||
}
|
||||
// 发送钉钉
|
||||
LOGGER.error(cont);
|
||||
// dingTalkLogic.sendDingTalk(serverInfo,cont,false);
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ public class DateUtil {
|
|||
}
|
||||
|
||||
/**
|
||||
* 日期转换为时间戳
|
||||
* 比较时间
|
||||
* @param timers
|
||||
* @return
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -129,15 +129,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row cl">
|
||||
<label class="form-label col-xs-4 col-sm-2">
|
||||
<label class="form-label col-xs-4 col-sm-2" title="未运营状态下修改立刻生效,其他状态周一零点生效">
|
||||
<span class="c-red">*</span>
|
||||
跨服分组id:</label>
|
||||
跨服分组id:
|
||||
</label>
|
||||
<div class="formControls col-xs-8 col-sm-9">
|
||||
<input type="number" name="groupId" placeholder="<=0表示不进行分组" th:value="*{getCrossGroupId()}" class="input-text"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row cl">
|
||||
<label class="form-label col-xs-4 col-sm-2">
|
||||
<label class="form-label col-xs-4 col-sm-2" title="未运营状态下修改立刻生效,其他状态修改不生效">
|
||||
<span class="c-red">*</span>
|
||||
开服时间:</label>
|
||||
<div class="formControls col-xs-8 col-sm-9">
|
||||
|
|
|
|||
Loading…
Reference in New Issue