/** 迁移当前机子的数据到其他机子 */ public String updateCfgToOtherServer(ChangeServerVo changeServerVo) { String result = "success"; try { WorldServer worldServer = CacheService.getWorldServerById(changeServerVo.getId()); changeServerVo.setRemark("修改" + worldServer.getName() + "数据库配置中"); if (changeServerVo.getServerId() == worldServer.getServerId()) { changeServerVo.setRemark("服务已在当前服务器,请确认目标服务器是否正确"); result = "服务已在当前服务器,请确认目标服务器是否正确"; return result; } int serverId = changeServerVo.getServerId(); // 迁移目标serverId Server server = CacheService.getServerById(serverId); String publicip = server.getServerName().trim(); // 目标机子公共ip // 获取排好序的world列表(port倒序) List<WorldServer> worldServerList = worldServerDao.getWorldServerListByServerId(serverId); if (worldServerList != null && worldServerList.size() > 0) { WorldServer worldServerTemp = worldServerList.get(0); // 获取port最大的WorldServer // 判断目标机子上是否已经存在改端口 if (worldServerDao.get( new String[] {"port", "serverId"}, new Object[] {worldServerTemp.getPort() + 1, serverId}) != null) { result = "world存在相同的port,生成失败"; System.out.println("world存在相同的port,生成失败"); return result; } worldServer.setPort(worldServerTemp.getPort() + 1); worldServer.setAdminport(worldServerTemp.getAdminport() + 1); worldServer.setHttpport(worldServerTemp.getHttpport() + 1); } else { // 如果该机子没有记录,则设置初设值 worldServer.setPort(6860); worldServer.setAdminport(28960); worldServer.setHttpport(6660); } worldServer.setServerId(serverId); worldServer.setAccountId(CacheService.getAccountServerByServerId(serverId).getId()); worldServer.setPublicip(publicip); this.saveOrUpdate(worldServer); CacheService.initWorldServer(); } catch (Exception e) { e.printStackTrace(); } return result; }
public void exce(int type, Server server, String fromLocalDir, String toServerDir) { SSHExec sshExec = null; try { SSHExec.setOption(IOptionName.HALT_ON_FAILURE, true); sshExec = ConnectionPoolManager.getInstance().getConnection(server.getServerIp()); if (type == CommanConstant.STATE_UPLOAD_SINGLE) { sshExec.uploadSingleDataToServer(fromLocalDir, toServerDir); } else { sshExec.uploadAllDataToServer(fromLocalDir, toServerDir); } } catch (TaskExecFailException e) { System.out.println(e.getMessage()); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { ConnectionPoolManager.getInstance().close(server.getServerIp(), sshExec); } }
/** 生成worldServer对象 */ public String createWorldServer(WorldServer worldServers, String mergeIds) { String createResult = ""; try { String cnType = Application.getConfig("system", "cnType"); // 分区前缀类型 int serverId = worldServers.getServerId(); // 服务器Id(哪台机子) Server server = CacheService.getServerById(serverId); int machinecode = worldServers.getMachinecode(); // 分区号 String publicip = server.getServerName().trim(); // 公网ip String battleip = worldServers.getBattleip(); // 对战服ip int battleport = worldServers.getBattleport(); // 对战服端口 String areaId = cnType + "_" + machinecode; // 加前缀的分编号,如“CN_1” int serverType = worldServers.getServerType(); String path = getWorldPath(worldServers, cnType); String name = getWorldName(worldServers, cnType); List<WorldServer> worldServerListCheck = worldServerDao.getWorldServerByServerTypeAndAreaId(serverType, machinecode); if (worldServerListCheck != null && worldServerListCheck.size() > 0) { createResult = "存在相同類型和分區號的記錄"; return createResult; } WorldServer worldServer = null; List<WorldServer> worldServerList = worldServerDao.getWorldServerListByServerId(worldServers.getServerId()); if (worldServerList != null && worldServerList.size() > 0) { worldServer = new WorldServer(); WorldServer worldServerTemp = worldServerList.get(0); BeanUtils.copyProperties(worldServer, worldServerTemp); if (worldServerDao.get( new String[] {"port", "serverId"}, new Object[] {worldServerTemp.getPort() + 1, serverId}) != null) { createResult = "存在相同的port,生成失败"; return createResult; } worldServer.setId(null); worldServer.setPort(worldServerTemp.getPort() + 1); worldServer.setAdminport(worldServerTemp.getAdminport() + 1); worldServer.setHttpport(worldServerTemp.getHttpport() + 1); worldServer.setAuthport(worldServerTemp.getAuthport()); worldServer.setUpdateTime(null); worldServer.setState(0); worldServer.setIsDeploy(1); worldServer.setMergeIds(""); } else { worldServer = this.getDefaultWorld(); } worldServer.setServerId(serverId); worldServer.setAccountId(CacheService.getAccountServerByServerId(serverId).getId()); worldServer.setName(name); worldServer.setPublicip(publicip); worldServer.setAreaid(areaId); worldServer.setMachinecode(machinecode); worldServer.setBattleport(battleport); worldServer.setBattleip(battleip); worldServer.setPath(path); worldServer.setServerType(worldServers.getServerType()); worldServer.setOrders(this.getMaxOrderByType(serverType, worldServers.getOrders()) + 1); if (worldServers.getIsDeploy() != null) { worldServer.setIsDeploy(worldServers.getIsDeploy()); } // 合服區 if (!StringUtils.isEmpty(mergeIds)) { // String mergeIds = ""; StringBuilder sb = new StringBuilder(); String[] mergeIdArray = mergeIds.split(","); // if (mergeIdArray.length == 2) { for (String id : mergeIdArray) { if (!StringUtils.isNumeric(id)) { createResult = "合服id串格式錯誤"; return createResult; } String mergeId = cnType + "_" + id; sb.append(mergeId).append(","); } mergeIds = sb.substring(0, sb.lastIndexOf(",")); // } else if (mergeIdArray.length == 1) { // mergeIds = cnType + "_" + mergeIdArray[0]; // } else { // createResult = "名稱格式錯誤"; // return createResult; // } worldServer.setMergeIds(mergeIds); } this.saveOrUpdate(worldServer); CacheService.initWorldServer(); createResult = "true"; } catch (Exception e) { e.printStackTrace(); createResult = "遇到未知错误"; } return createResult; }