"正式开放", ServerStatue::InternalOpen => "内部开放", ServerStatue::NotOpen => "不开放", ); } /**服务器运行状态 */ class ServerRunningStatus { const Upkeep = 0; const Light = 1; const Busy = 2; const Full = 3; const PreOpen = 4; static $RunningStatusName = array( ServerRunningStatus::Light => "流畅", ServerRunningStatus::Busy => "繁忙", ServerRunningStatus::Full => "爆满", ServerRunningStatus::PreOpen => "预开服", ServerRunningStatus::Upkeep => "维护", ); } /** * 刷新后台用的渠道服务器列表ini文件,兼容旧版本格式,采用合并数据的方法 */ function RefreshServerListIni($channel) { if (!\DBOper\Find( "GameServers", array("Channel" => $channel), $serverList, array( "ServerID" => 1, "ServerName" => 1, "RegionDomain" => 1, "MainServerID" => 1 ), array("ServerID" => 1) )) { return; } if (!isset($serverList)) { return; } $GameServerWebPort = "80"; if (\CommFunc\Has_option("ServerInfo", "GameServerWebPort_" . $channel)) { \CommFunc\GetConfig("ServerInfo", "GameServerWebPort_" . $channel, $GameServerWebPort, "80"); } \Logging\LogInfo("RefreshServerListIni Channel:" . $channel . " GameServerWebPort:" . $GameServerWebPort); $channelServerIDArray = array(); $channelServerIniArray = array(); $mixServerMap = array(); // 合服映射表 {mainServerID:[serverID, ...], ...} foreach ($serverList as $serverInfo) { $ServerID = $serverInfo["ServerID"]; $ServerName = $serverInfo["ServerName"]; $RegionDomain = $serverInfo["RegionDomain"]; $MainServerID = $serverInfo["MainServerID"]; if ($GameServerWebPort == "80") { $PageUrl = "http://" . $RegionDomain . "/Server/Tool.php"; } else { $PageUrl = "http://" . $RegionDomain . ":" . $GameServerWebPort . "/Server/Tool.php"; } $optinArray = array( "Page" => $PageUrl, "ServerID" => $ServerID ); if ($MainServerID > 0) { $optinArray["MainServer"] = $MainServerID; } if (array_key_exists($ServerName, $channelServerIniArray)) { $channelServerIniArray[$ServerName . "_" . $ServerID] = $optinArray; } else { $channelServerIniArray[$ServerName] = $optinArray; } array_push($channelServerIDArray, $ServerID); // 更新合服映射 $mixMainServerID = $MainServerID > 0 ? $MainServerID : $ServerID; if (!isset($mixServerMap[$mixMainServerID])) { $mixServerMap[$mixMainServerID] = array(); } $mixServerIDList = $mixServerMap[$mixMainServerID]; array_push($mixServerIDList, $ServerID); $mixServerMap[$mixMainServerID] = $mixServerIDList; } // 保存合服服务器映射表 file_put_contents(GetServerMix($channel), json_encode($mixServerMap)); $serverIniFile = dirname(__FILE__) . "\\..\\Account\\Server\\Server_" . $channel . ".ini"; // echo '$serverIniFile:', $serverIniFile, "
"; if (file_exists($serverIniFile)) { $serverIniArray = parse_ini_file($serverIniFile, true); } else { $serverIniArray = array(); } // [chengxukf] // Page=http://vm-chengxukf/Server/Tool.php // [mobile-hzr1] // Page=http://mobile-hzr/Server/Tool.php // ServerID=23 // [mobile-hzr2] // Page=http://mobile-hzr/Server/Tool.php // ServerID=24 // MainServer=23 // 一定有 Page ,不一定有 ServerID 、 MainServer,如跨服可能只有Page,非合服的没有MainServer // 由于服务器名可能改名,这里去除旧ini中已经重复存在的ServerID foreach ($serverIniArray as $serverName => $serverInfo) { if (array_key_exists("ServerID", $serverInfo) && in_array($serverInfo["ServerID"], $channelServerIDArray)) { // \Logging\LogInfo("ServerID 已存在,移除: " . $serverInfo["ServerID"] . " serverName:" . $serverName); unset($serverIniArray[$serverName]); } } // 合并覆盖前者 $serverIniArrayUpd = array_merge($serverIniArray, $channelServerIniArray); $f = fopen($serverIniFile, 'w'); // 保存ini foreach ($serverIniArrayUpd as $serverName => $serverInfo) { fwrite($f, "[" . $serverName . "]\r\n"); fwrite($f, "Page=" . $serverInfo["Page"] . "\r\n"); if ($serverInfo["ServerID"] > 0) { fwrite($f, "ServerID=" . $serverInfo["ServerID"] . "\r\n"); } if ($serverInfo["MainServer"] > 0) { fwrite($f, "MainServer=" . $serverInfo["MainServer"] . "\r\n"); } fwrite($f, "\r\n"); } fclose($f); } /** * 刷新常规服务器列表json文件,仅导出正常开放的服务器,内部开放及未开放的不导出 * * 导出格式 * { * "common": [ * { * "group_title": "分组名", * "group_list": [ * { * "login_port": 80, * "region_domain": "bt6test.secondworld.net.cn", * "name": "服务器名称", * "running_status": 1, * "game_port": 19006, * "is_recommend": 0, * "region_flag": 98, * "statue": 1, * "start_date": "2022-03-04 15:00:00" * }, * ... * ] * } * ... * ] * } */ function RefreshCommonServerlistJson($Channel, $JsonBranch = null, $UserAccount = "") { $groupJsonFile = GetServerGroup($Channel); $groupArray = json_decode(\CommFunc\GetFileContents($groupJsonFile, "[]"), true); if (!$groupArray) { \Logging\LogError("can not found server group. Channel:" . $Channel); return; } if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { return; } $allBranchGroup = array(); if ($JsonBranch != null) { \DBOper\Find("GameServers", array("Channel" => $Channel, "JsonBranch" => $JsonBranch), $serverList); } else { \DBOper\Find("GameServers", array("Channel" => $Channel), $serverList); } \Logging\LogInfo("find db server count:" . count($serverList) . " Channel:" . $Channel . " JsonBranch:" . $JsonBranch); foreach ($serverList as $serverInfo) { if ($serverInfo["Statue"] != ServerStatue::Open) { // \Logging\LogInfo("非开放状态 ServerID:" . $serverInfo["ServerID"]); continue; } $JsonBranch = $serverInfo["JsonBranch"]; if (!array_key_exists($JsonBranch, $allBranchGroup)) { $commGroup = array(); foreach ($groupArray as $groupInfo) { array_push($commGroup, array( "group_title" => $groupInfo["GroupTitle"], "group_list" => array(), "ServerIDList" => $groupInfo["ServerIDList"] )); } $allBranchGroup[$JsonBranch] = $commGroup; } $commGroup = $allBranchGroup[$JsonBranch]; $serverJson = array( "login_port" => $serverInfo["LoginPort"], "region_domain" => $serverInfo["RegionDomain"], "name" => $serverInfo["ServerName"], "running_status" => $serverInfo["RunningStatus"], "game_port" => $serverInfo["GamePort"], "is_recommend" => $serverInfo["Recommend"], "region_flag" => $serverInfo["ServerID"], "statue" => $serverInfo["Statue"], "start_date" => $serverInfo["StartDate"], ); $serverID = $serverInfo["ServerID"]; foreach ($commGroup as $key => $groupInfo) { $ServerIDList = $groupInfo["ServerIDList"]; foreach ($ServerIDList as $idRange) { if ( is_array($idRange) && count($idRange) == 2 && ($serverID >= $idRange[0] && $serverID <= $idRange[1]) ) { // 直接访问 group_list 实际地址进行push array_push($allBranchGroup[$JsonBranch][$key]["group_list"], $serverJson); break; } } } } // \Logging\LogInfo("allBranchGroup:" . print_r($allBranchGroup, true)); $JsonBranchList = array(); $refreshJsonFileArray = array(); foreach ($allBranchGroup as $JsonBranch => &$commGroup) { foreach ($commGroup as $key => &$groupInfo) { unset($groupInfo["ServerIDList"]); // $commGroup[$key] = $groupInfo; if (count($groupInfo["group_list"]) == 0) { unset($commGroup[$key]); } } // $allBranchGroup[$JsonBranch] = $commGroup; if (count($commGroup) > 0) { $saveCommon = array(); foreach ($commGroup as $value) { array_push($saveCommon, $value); } $saveArray = array("common" => $saveCommon); $saveJsonFile = $PlayerCenterRoot . "/Common/serverjson/" . GetCommonServerlistJsonFileName($Channel, $JsonBranch); // file_put_contents($saveJsonFile, \CommFunc\MyJson_encode($saveArray)); file_put_contents($saveJsonFile, json_encode($saveArray)); //选服文件暂不存utf8 array_push($refreshJsonFileArray, $saveJsonFile); \Logging\LogInfo("RefreshCommonServerlistJson Channel:" . $Channel . " JsonBranch:" . $JsonBranch . " saveJsonFile:" . $saveJsonFile); array_push($JsonBranchList, $JsonBranch); } } if (count($refreshJsonFileArray) > 0) { AddSuccessLog($Channel, $UserAccount, \User\Permission::P_OPSRefreshServer, array("JsonBranchList" => $JsonBranchList)); } RefreshServerListIni($Channel); return $refreshJsonFileArray; } function GetServerGroup($Channel) { if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { return ""; } return $PlayerCenterRoot . "/Common/servergroup/" . $Channel . ".json"; } // 合服映射表 function GetServerMix($Channel) { if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { return ""; } return $PlayerCenterRoot . "/Common/servermix/MixServerMap_" . $Channel . ".json"; } function GetCommonServerlistJsonFileName($Channel, $JsonBranch) { $gameName = \CommFunc\GetGameName(); if ($JsonBranch == 0) { return $gameName . "_" . $Channel . ".json"; } return $gameName . "_" . $Channel . "_" . $JsonBranch . ".json"; } function GetAllCommonServerlistJsonFile($Channel) { if (!\CommFunc\GetConfig("ServerInfo", "PlayerCenterRoot", $PlayerCenterRoot)) { return; } $gameName = \CommFunc\GetGameName(); $jsonPath = $PlayerCenterRoot . "/Common/serverjson/"; $jsonFiles = array(); foreach (glob($jsonPath . $gameName . "_" . $Channel . "*.json") as $value) { array_push($jsonFiles, str_replace($jsonPath, "", $value)); } return $jsonFiles; } // 白名单列表 function GetWhiteList() { return json_decode(\CommFunc\GetFileContents(dirname(__FILE__) . "/whitelist.json", "[]"), true); }