using System; using System.Collections.Generic; using Sog; using LitJson; using SimpleHttpServer; using Sog.Crypto; using System.Web; using ProtoCSStruct; using Newtonsoft.Json.Linq; namespace Operation { public class SimpleRealm { public string areaName; public int realmId; public int openTime; public int visibleTime; public int bigRealmId; } public class RealmsObj { public string token; public string type; public SimpleRealm simpleRealm; } public class RealmInfo { public string businessName { get; set; } public string areaName { get; set; } public int worldId { get; set; } public int realmId { get; set; } public int logicWorldId { get; set; } public string realmName { get; set; } public int showSeq { get; set; } public int status { get; set; } public int visibleOnlyWhiteList { get; set; } public string bdcName { get; set; } public string openTime { get; set; } public string visibleTime { get; set; } public int bigRealmName { get; set; } } public class RealmCache { public long updateTime; public string lastVersion; public List realmList; public List oriRealmList; } [MenuMapping(refc = typeof(ServerMonitor))] public class Realm { private static long m_lastTickTime = 0; public static RealmCache realmCache = new RealmCache(); public static Dictionary realmIdDictory = new Dictionary(); // 前端realm服务器管理 [RequestMapping("服务器区服管理",PermissionCode.SERVER_SELECT,true)] public static int OnSelectRealmInfosHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { JsonData data = new JsonData(); Jsondata["data"] = data; //data.Add(""); //data.Clear(); var svrData = OperationServerUtils.GetOperationServerData(); Dictionary>> realmDic = new Dictionary>>(); var realmOnlineInfo = OperationServerUtils.GetOperationServerData().m_allRealmOnlineInfo; foreach (var realm in svrData.m_allRealm.Values) { if (!realmDic.ContainsKey(realm.areaName)) { Dictionary> m_tempDic = new Dictionary>(); realmDic.Add(realm.areaName, m_tempDic); } if(!realmDic[realm.areaName].ContainsKey(realm.WorldId)) { List m_tempList = new List(); realmDic[realm.areaName].Add(realm.WorldId, m_tempList); } realmDic[realm.areaName][realm.WorldId].Add(realm); } JsonData areaRealmList = new JsonData(); areaRealmList.Add(""); areaRealmList.Clear(); foreach (var itemArea in realmDic) { JsonData areaData = new JsonData(); areaData["areaName"] = itemArea.Key; // 不存在 int timeZone = 10000; JsonData worldList = new JsonData(); worldList.Add(""); worldList.Clear(); foreach (var item in itemArea.Value) { JsonData worldData = new JsonData(); worldData["worldId"] = item.Key; JsonData realmList = new JsonData(); realmList.Add(""); realmList.Clear(); foreach (var realmItem in item.Value) { JsonData oneData = new JsonData(); oneData["realmId"] = realmItem.realmId; oneData["realmName"] = realmItem.realmName; oneData["logicWorldId"] = realmItem.logicWorldId; oneData["status"] = realmItem.state; oneData["bdcName"] = realmItem.realmBdcName; oneData["openTime"] = realmItem.openTime; oneData["visibleTime"] = realmItem.visibleTime; oneData["bigRealmId"] = realmItem.bigRealmId; oneData["ip"] = realmItem.ip; oneData["regMax"] = realmItem.regMax; if(realmOnlineInfo.ContainsKey(realmItem.realmId)) { oneData["onlinePlayer"] = realmOnlineInfo[realmItem.realmId]; } else { oneData["onlinePlayer"] = 0; } realmList.Add(oneData); if (timeZone == 10000) { timeZone = realmItem.timeZone; } } worldData["realmList"] = realmList; worldList.Add(worldData); } areaData["timeZone"] = timeZone; areaData["worldList"] = worldList; areaRealmList.Add(areaData); } data["areaRealmList"] = areaRealmList; return 0; } [RequestMapping("查询所有区服列表",PermissionCode.SERVER_ALL_SELECT)] public static int OnSelectAllRealmHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { JsonData data = new JsonData(); Jsondata["data"] = data; var allRealmReq = new SSRealmAllBriefReq { GameSvrId = OperationServerUtils.GetAppID() }; allRealmReq.Guid = httpContextId; OperationServerUtils.GetPacketSender().SendToRealmlistServer((int)SSMsgID.RealmAllbriefReq, ref allRealmReq, 0); rsp.IsWaitFor = true; Jsondata["ret"] = -1; Jsondata["msg"] = "查询超时"; return -1; } public static void OnResMsg(uint guid, JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, Dictionary>> realmDic) { var realmOnlineInfo = OperationServerUtils.GetOperationServerData().m_allRealmOnlineInfo; JsonData data = new JsonData(); jsondata["data"] = data; JsonData areaRealmList = new JsonData(); areaRealmList.Clear(); foreach (var itemArea in realmDic) { JsonData areaData = new JsonData(); areaData["areaName"] = itemArea.Key; // 不存在 int timeZone = 10000; JsonData worldList = new JsonData(); worldList.Clear(); foreach (var item in itemArea.Value) { JsonData worldData = new JsonData(); worldData["worldId"] = item.Key; JsonData realmList = new JsonData(); realmList.Clear(); foreach (var realmItem in item.Value) { JsonData oneData = new JsonData(); oneData["realmId"] = realmItem.realmId; oneData["realmName"] = realmItem.realmName; oneData["showSeq"] = realmItem.ShowSeq; oneData["logicWorldId"] = realmItem.logicWorldId; oneData["state"] = realmItem.state; oneData["bdcName"] = realmItem.realmBdcName; oneData["openTime"] = realmItem.openTime; oneData["visibleTime"] = realmItem.visibleTime; oneData["bigRealmId"] = realmItem.bigRealmId; oneData["ip"] = realmItem.ip; oneData["visibleOnlyWhiteList"] = realmItem.visibleOnlyWhiteList; oneData["regMax"] = realmItem.regMax; if (realmIdDictory.ContainsKey(realmItem.realmId)) { realmIdDictory[realmItem.realmId] = realmItem.bigRealmId; } else { realmIdDictory.Add(realmItem.realmId, realmItem.bigRealmId); } if (realmOnlineInfo.ContainsKey(realmItem.realmId)) { oneData["onlinePlayer"] = realmOnlineInfo[realmItem.realmId]; } else { oneData["onlinePlayer"] = 0; } realmList.Add(oneData); if (timeZone == 10000) { timeZone = realmItem.timeZone; } } worldData["realmList"] = realmList; worldList.Add(worldData); } areaData["timeZone"] = timeZone; areaData["worldList"] = worldList; areaRealmList.Add(areaData); } data["areaRealmList"] = areaRealmList; jsondata["ret"] = 0; } [RequestMapping("添加区服",PermissionCode.ADD_NEW_REALM, toLog: true)] public static int OnAddNewRealmHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { try { string areaName = query.GetValue("areaName"); string timezone = query.GetValue("timezone"); string ip = query.GetValue("ip"); string name = query.GetValue("realmName"); string bdcName = query.GetValue("bdcName"); string openTime = query.GetValue("openTime"); string visibleTime = query.GetValue("visibleTime"); int bigRealmId = query.GetValue("bigRealmId").Toint32(); int status = query.GetValue("status").Toint32(); int realmId = query.GetValue("realmId").Toint32(); int worldId = query.GetValue("worldId").Toint32(); } catch (Exception e) { Jsondata["ret"] = 0; Jsondata["msg"] = "操作成功"; TraceLog.Error("Realm.AddNewRealm error:{0}", e.Message); } return 0; } [RequestMapping("查询区服列表信息",PermissionCode.SELECT_REALM_LIST)] public static int OnSelectRealmListHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { JsonData data = new JsonData(); Jsondata["data"] = data; data.Add(""); data.Clear(); JsonData worldIdList = new JsonData(); Jsondata["worldIdList"] = worldIdList; worldIdList.Add(""); worldIdList.Clear(); var svrData = OperationServerUtils.GetOperationServerData(); var startDate = query.GetValue("startDate"); var endDate = query.GetValue("endDate"); List checkWorldIdList = new List(); foreach (var m in svrData.m_allRealm.Values) { JsonData rdata = new JsonData(); rdata["id"] = m.realmId; rdata["name"] = m.realmName; rdata["worldId"] = m.WorldId; if(!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) { int stareTimeStamp = OperationServerUtils.GetTimeStamp(DateTime.Parse(startDate)); int endTimeStamp = OperationServerUtils.GetTimeStamp(DateTime.Parse(endDate)); if(m.openTime < stareTimeStamp || m.openTime > endTimeStamp) { continue; } } if (!checkWorldIdList.Contains(m.WorldId)) { checkWorldIdList.Add(m.WorldId); worldIdList.Add(m.WorldId); } data.Add(rdata); } return 0; } [RequestMapping("查询服务器列表",PermissionCode.SELECT_SERVER_LIST,ignored:true)] public static int OnSelectServerListHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { JsonData data = new JsonData(); Jsondata["data"] = data; data.Add(""); data.Clear(); var svrData = OperationServerUtils.GetOperationServerData(); foreach (var m in svrData.m_allRealm.Values) { JsonData rdata = new JsonData(); rdata["server_id"] = m.realmId; rdata["server_name"] = m.realmName; rdata["type"] = 3; rdata["is_test"] = 0; rdata["joined_id"] = 0; data.Add(rdata); } return 0; } [RequestMapping("查询英雄区服列表信息",PermissionCode.SELECT_REALM_LIST_HERO,ignored:true)] public static int OnSelectRealmlistHeroHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { JsonData data = new JsonData(); jsonData["data"] = data; data.Add(""); data.Clear(); var svrData = OperationServerUtils.GetOperationServerData(); foreach (var m in svrData.m_allRealm.Values) { JsonData rdata = new JsonData(); rdata["server_id"] = m.realmId; rdata["server_name"] = m.realmName; rdata["type"] = 3; rdata["is_test"] = 0; rdata["joined_id"] = 0; data.Add(rdata); } jsonData["code"] = 0; jsonData["msg"] = "success"; return 0; } [RequestMapping("查询web支付",PermissionCode.SELECT_REALM_LIST_WEB_PAY,ignored:true)] public static int OnSelectRealmlistWebPayHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { string sign = query.GetValue("sign"); TraceLog.Debug("Realm.OnSelectRealmlistWebPayHttpReq url:{0}", request.Url); string reqData = HttpUtility.UrlDecode(query.GetValue("data")); var allParams = new Dictionary(); foreach (var item in query.m_map) { if (item.Key != "sign") { allParams[item.Key] = HttpUtility.UrlDecode(item.Value); } } // 校验签名 string appKey = OperationServerUtils.GetServerConfig().heroAppKey; string calcSign = HeroUSDKSecurity.CalcSign(appKey, allParams); if (calcSign != sign) { TraceLog.Error("Realm.OnSelectRealmlistWebPayHttpReq sign not same, calc {0} req {1}", calcSign, sign); jsonData["msg"] = "签名校验错误!"; jsonData["code"] = -1; return -1; } JsonData data = new JsonData(); jsonData["data"] = data; data.Add(""); data.Clear(); var svrData = OperationServerUtils.GetOperationServerData(); SortedDictionary ralemsDict = new SortedDictionary(); foreach (var m in svrData.m_allRealm.Values) { int realmId = m.realmId; if (realmId / 10000 != 80) { continue; } if(realmId % 1000 == 0) { continue; } ralemsDict.Add(realmId, m.realmName); } foreach (var item in ralemsDict) { JsonData rdata = new JsonData(); rdata["server_id"] = item.Key; rdata["server_name"] = item.Value; data.Add(rdata); } jsonData["code"] = 0; jsonData["msg"] = "success"; return 0; } [RequestMapping("查询区服",PermissionCode.SELECT_REALM)] public static int OnSelectRecentRealmHttpReq(string httpApiCmd, JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { string areaName = query.GetValue("areaName"); if (string.IsNullOrEmpty(areaName) || (areaName != "NA" && areaName != "EU" && areaName != "Asia")) { jsondata["ret"] = -2; jsondata["msg"] = "服务器区名不符合要求"; return -2; } //内存中找到对应区域的数据,直接返回 if (realmCache.realmList != null && realmCache.realmList.Count != 0) { JsonData data = new JsonData(); jsondata["data"] = data; data.Add(""); data.Clear(); int timeZoneBeijing = 8; foreach (var realm in realmCache.realmList) { if (realm.areaName == query.GetValue("areaName")) { int timeDistance = (timeZoneBeijing - realm.timeZone) * 60 * 60; JsonData rdata = new JsonData(); rdata["realmId"] = realm.realmId; rdata["name"] = realm.realmName; rdata["showSeq"] = realm.realmId % 1000; rdata["timeZone"] = realm.timeZone; rdata["visibleOnlyWhiteList"] = realm.visibleOnlyWhiteList; rdata["realmBdcName"] = realm.realmBdcName; rdata["openTime"] = realm.openTime - timeDistance; rdata["visibleTime"] = realm.visibleTime - timeDistance; rdata["bigRealmId"] = realm.bigRealmId; rdata["logicWorldId"] = realm.logicWorldId; data.Add(rdata); } } if (data.Count > 0) { jsondata["code"] = 0; jsondata["msg"] = "success"; return 0; } } var realmReq = new SSAllRealmReq { GameSvrId = OperationServerUtils.GetAppID(),Guid = httpContextId }; realmReq.AreaName.SetString(areaName); if (string.IsNullOrEmpty(realmCache.lastVersion)) { realmReq.UpdateSvnFlag = true; } //发送消息 OperationServerUtils.GetPacketSender().SendToRealmlistServer((int)SSMsgID.AllRealmReq, ref realmReq, 0); rsp.IsWaitFor = true; jsondata["ret"] = -1; jsondata["msg"] = "查询超时"; return -1; } [RequestMapping("运维添加区服",PermissionCode.RECENT_OPERATION_REALM, toLog: true)] public static int OnSelectRecentOperationRealmHttpReq(string httpApiCmd, JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { //内存中找到对应区域的数据,直接返回 JsonData data = new JsonData(); jsondata["data"] = data; data.Add(""); data.Clear(); int timeZoneBeijing = 8; var realmListOperation = new List(); foreach (var realm in realmCache.realmList) { bool findFlag = false; foreach (var oriRealm in realmCache.oriRealmList) { if (realm.realmId == oriRealm.realmId) { findFlag = true; if (realm.openTime != oriRealm.openTime || realm.visibleTime != oriRealm.visibleTime || realm.bigRealmId != realm.bigRealmId) { var realmBriefOperationInfo = new RealmBriefOperationInfo(); realmBriefOperationInfo.realmId = realm.realmId; realmBriefOperationInfo.areaName = realm.areaName; realmBriefOperationInfo.realmName = realm.realmName; realmBriefOperationInfo.realmBdcName = realm.realmBdcName; realmBriefOperationInfo.timeZone = realm.timeZone; realmBriefOperationInfo.WorldId = realm.WorldId; realmBriefOperationInfo.openTime = realm.openTime; realmBriefOperationInfo.visibleTime = realm.visibleTime; realmBriefOperationInfo.bigRealmId = realm.bigRealmId; realmBriefOperationInfo.logicWorldId = realm.logicWorldId; realmBriefOperationInfo.operation = "edit"; realmListOperation.Add(realmBriefOperationInfo); break; } } } if (findFlag == false) { var realmBriefOperationInfo = new RealmBriefOperationInfo(); realmBriefOperationInfo.realmId = realm.realmId; realmBriefOperationInfo.areaName = realm.areaName; realmBriefOperationInfo.realmName = realm.realmName; realmBriefOperationInfo.realmBdcName = realm.realmBdcName; realmBriefOperationInfo.timeZone = realm.timeZone; realmBriefOperationInfo.WorldId = realm.WorldId; realmBriefOperationInfo.openTime = realm.openTime; realmBriefOperationInfo.visibleTime = realm.visibleTime; realmBriefOperationInfo.bigRealmId = realm.bigRealmId; realmBriefOperationInfo.logicWorldId = realm.logicWorldId; realmBriefOperationInfo.operation = "add"; realmListOperation.Add(realmBriefOperationInfo); } } foreach (var oriRealm in realmCache.oriRealmList) { bool findFlag = false; foreach (var realm in realmCache.realmList) { if (realm.realmId == oriRealm.realmId) { findFlag = true; break; } } if (findFlag == false) { var realmBriefOperationInfo = new RealmBriefOperationInfo(); realmBriefOperationInfo.realmId = oriRealm.realmId; realmBriefOperationInfo.areaName = oriRealm.areaName; realmBriefOperationInfo.realmName = oriRealm.realmName; realmBriefOperationInfo.realmBdcName = oriRealm.realmBdcName; realmBriefOperationInfo.timeZone = oriRealm.timeZone; realmBriefOperationInfo.WorldId = oriRealm.WorldId; realmBriefOperationInfo.openTime = oriRealm.openTime; realmBriefOperationInfo.visibleTime = oriRealm.visibleTime; realmBriefOperationInfo.bigRealmId = oriRealm.bigRealmId; realmBriefOperationInfo.logicWorldId = oriRealm.logicWorldId; realmBriefOperationInfo.operation = "del"; realmListOperation.Add(realmBriefOperationInfo); } } foreach (var realm in realmListOperation) { int timeDistance = (timeZoneBeijing - realm.timeZone) * 60 * 60; JsonData rdata = new JsonData(); rdata["realmId"] = realm.realmId; rdata["name"] = realm.realmName; rdata["showSeq"] = realm.realmId % 1000; rdata["timeZone"] = realm.timeZone; rdata["visibleOnlyWhiteList"] = realm.visibleOnlyWhiteList; rdata["realmBdcName"] = realm.realmBdcName; rdata["openTime"] = realm.openTime - timeDistance; rdata["visibleTime"] = realm.visibleTime - timeDistance; rdata["bigRealmId"] = realm.bigRealmId; rdata["operation"] = realm.operation; rdata["logicWorldId"] = realm.logicWorldId; data.Add(rdata); } jsondata["code"] = 0; jsondata["msg"] = "success"; return 0; } public static void OnResMsg(uint guid, JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSAllRealmRes res) { JsonData data = new JsonData(); jsondata["data"] = data; data.Add(""); data.Clear(); var svrData = res.RealmList; int timeBeijingZone = 8; //内存中svn版本号为空,更新版本号 if (string.IsNullOrEmpty(realmCache.lastVersion)) { realmCache.lastVersion = res.SvnRealmListVersion.ToString(); } if (realmCache.realmList == null) { realmCache.realmList = new List(); } if (realmCache.oriRealmList == null) { realmCache.oriRealmList = new List(); } //从res中读取并更新到cache中 for (int i = svrData.Count - 1; i >= 0; i--) { if (svrData[i].AreaName.ToString() == query.GetValue("areaName")) { for (int j = 5; j >= 0; j--) { if (i - j >= 0 && svrData[i - j].AreaName.ToString() == query.GetValue("areaName")) { RealmBriefInfo realmBriefInfo = new RealmBriefInfo(); realmBriefInfo.timeZone = svrData[i - j].TimeZone; realmBriefInfo.realmId = svrData[i - j].RealmId; realmBriefInfo.areaName = svrData[i - j].AreaName.ToString(); realmBriefInfo.realmName = svrData[i - j].RealmName.ToString(); realmBriefInfo.realmBdcName = svrData[i - j].RealmBdcName.ToString(); realmBriefInfo.openTime = svrData[i - j].OpenTime; realmBriefInfo.visibleTime = svrData[i - j].VisibleTime; realmBriefInfo.visibleOnlyWhiteList = svrData[i - j].VisibleOnlyWhiteList; realmBriefInfo.bigRealmId = svrData[i - j].BigRealmId; realmBriefInfo.WorldId = svrData[i - j].WorldId; realmBriefInfo.logicWorldId = svrData[i - j].LogicWorldId; realmCache.realmList.Add(realmBriefInfo); realmCache.oriRealmList.Add(realmBriefInfo); } } break; } } realmCache.updateTime = OperationServerUtils.GetTimeSecond() * 1000; foreach (var realm in realmCache.realmList) { if (realm.areaName == query.GetValue("areaName")) { int timeDistance = (timeBeijingZone - realm.timeZone) * 60 * 60; JsonData rdata = new JsonData(); rdata["realmId"] = realm.realmId; rdata["name"] = realm.realmName; rdata["showSeq"] = realm.realmId % 1000; rdata["timeZone"] = realm.timeZone; rdata["visibleOnlyWhiteList"] = realm.visibleOnlyWhiteList; rdata["realmBdcName"] = realm.realmBdcName; rdata["openTime"] = realm.openTime - timeDistance; rdata["visibleTime"] = realm.visibleTime - timeDistance; rdata["bigRealmId"] = realm.bigRealmId; rdata["logicWorldId"] = realm.logicWorldId; data.Add(rdata); } } jsondata["code"] = 0; jsondata["msg"] = "success"; } public static void Refresh_RealmCache(long nowMs) { //一个小时一次 if (realmCache.updateTime == 0 || nowMs - realmCache.updateTime < 60 * 60000) { return; } realmCache.updateTime = 0; realmCache.lastVersion = ""; realmCache.realmList.Clear(); realmCache.oriRealmList.Clear(); } [RequestMapping("提交区服信息",PermissionCode.COMMIT_REALM_INFO, toLog: true)] public static int OnCommitRealmInfoHttpReq(string httpApiCmd, JsonData Jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { int timeZoneBeijing = 8; if (realmCache.realmList == null || realmCache.realmList.Count == 0) { TraceLog.Trace("数据已失效,请重新获取"); Jsondata["ret"] = 7; Jsondata["msg"] = "数据已失效,请重新获取"; return 7; } //db.DoCheck(Jsondata, rsp, request, query); if ((int)Jsondata["ret"] != 0) { return (int)Jsondata["ret"]; } var realmList = new RepeatedCSRealmBrief_512(); foreach (var realm in realmCache.realmList) { var cSRealmBrief = new CSRealmBrief { RealmId = realm.realmId, LogicWorldId = realm.logicWorldId, TimeZone = realm.timeZone, VisibleOnlyWhiteList = realm.visibleOnlyWhiteList, OpenTime = realm.openTime - (timeZoneBeijing - realm.timeZone) * 60 * 60, VisibleTime = realm.visibleTime - (timeZoneBeijing - realm.timeZone) * 60 * 60, WorldId = realm.WorldId, BigRealmId = realm.bigRealmId, }; cSRealmBrief.AreaName.SetString(realm.areaName); cSRealmBrief.RealmName.SetString(realm.realmName); cSRealmBrief.RealmBdcName.SetString(realm.realmBdcName); realmList.Add(cSRealmBrief); } var realmReq = new SSAddRealmReq { RealmList = realmList, Id = httpContextId }; TraceLog.Trace("Realm.DoCommitRealmInfo realmCache.lastVersion == " + realmCache.lastVersion); realmReq.SvnRealmListVersion.SetString(realmCache.lastVersion); OperationServerUtils.GetPacketSender().SendToRealmlistServer((int)SSMsgID.SsAddRealmReq, ref realmReq, 0); rsp.IsWaitFor = true; Jsondata["ret"] = -1; Jsondata["msg"] = "查询超时"; return -1; } [RequestMapping("发送区服列表",PermissionCode.SEND_REALM_INFOS, toLog: true)] public static int SendRealmInfosHttpReq(string httpApiCmd, JsonData builder, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint id) { if ((int)builder["ret"] != 0) { return (int)builder["ret"]; } JArray jArray = JArray.Parse(request.Content); for (int i = 0; i < jArray.Count; i++) { var realmId = (int)jArray[i]["realmId"]; var bigRealmId = (int)jArray[i]["bigRealmId"]; // 校验bigrealmid,相等或加1 if (realmIdDictory.ContainsKey(realmId - 1)) { if (bigRealmId < realmIdDictory[realmId - 1] || bigRealmId > realmIdDictory[realmId - 1] + 1) { builder["ret"] = 5; builder["msg"] = "bigRealmId的值不符合要求"; return 5; } } var areaName = jArray[i]["areaName"].ToString(); var worldId = (int)jArray[i]["worldId"]; var logicWorldId = (int)jArray[i]["logicWorldId"]; var regMax = (int)jArray[i]["regMax"]; //int.TryParse(realmId.ToString().Replace(worldId.ToString(), ""), out int showSeq); int showSeq = (int)jArray[i]["showSeq"];//(int)jArray[i]["showSeq"]; if(realmId / 1000 == worldId) { showSeq = realmId % 1000; } var realmName = jArray[i]["realmName"].ToString(); var bdcName = jArray[i]["bdcName"].ToString(); var timeZone = (int)jArray[i]["timeZoneTitle"]; var openTimeStr = jArray[i]["openTime"].ToString(); var openTime = OperationServerUtils.StampToDateTime((long)(OperationServerUtils.GetTimeStamp(DateTime.Parse(openTimeStr)) + (timeZone - 8) * 3600)).ToString("yyyy-MM-dd HH:mm:ss"); var visibleTimeStr = jArray[i]["visibleTime"].ToString(); var visibleTime = OperationServerUtils.StampToDateTime((long)(OperationServerUtils.GetTimeStamp(DateTime.Parse(visibleTimeStr)) + (timeZone - 8) * 3600)).ToString("yyyy-MM-dd HH:mm:ss"); var visibleOnlyWhiteList = (int)jArray[i]["visibleOnlyWhiteList"]; var state = (int)jArray[i]["state"]; var opType = realmIdDictory.ContainsKey(realmId) ? (int)OpRealmType.Update : (int)OpRealmType.Add; SSRealmOperationReq realmReq = new SSRealmOperationReq(); realmReq.Id = id; realmReq.AreaName.SetString(areaName); realmReq.WorldId = worldId; realmReq.RealmId = realmId; realmReq.VisibleOnlyWhiteList = visibleOnlyWhiteList; realmReq.LogicWorldId = logicWorldId; realmReq.RealmName.SetString(realmName); realmReq.ShowSeq = showSeq; realmReq.Status = state; realmReq.BdcName.SetString(bdcName); realmReq.OpenTime.SetString(openTime); realmReq.VisibleTime.SetString(visibleTime); realmReq.BigRealmId = bigRealmId; realmReq.RegMax = regMax; realmReq.OpType = opType; if(i == jArray.Count - 1) { realmReq.End = 1; } OperationServerUtils.GetPacketSender().SendToRealmlistServer((int)SSMsgID.SsRealmOperationReq, ref realmReq, 0); if (!realmIdDictory.TryAdd(realmId, bigRealmId)) { realmIdDictory[realmId] = bigRealmId; } } rsp.IsWaitFor = true; builder["ret"] = -1; builder["msg"] = "查询超时"; return -1; } [RequestMapping("添加区服信息",PermissionCode.ADD_REALM_INFO, toLog: true)] public static int OnAddRealmInfoHttpReq(string httpApiCmd, JsonData builder, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint id) { var realmsContent = request.Content.ToJson(); string tokens = realmsContent.token; int timeZoneBeijing = 8; //db.DoCheck(builder, rsp, request, query); if ((int)builder["ret"] != 0) { return (int)builder["ret"]; } var lastRealm = new RealmBriefInfo(); for (int i = realmCache.realmList.Count - 1; i >= 0; i--) { if (realmCache.realmList[i].areaName == realmsContent.simpleRealm.areaName) { lastRealm = realmCache.realmList[i]; break; } } if (realmsContent.type == "add") { int timeDistance = (timeZoneBeijing - lastRealm.timeZone) * 60 * 60; if (realmsContent.simpleRealm.bigRealmId < lastRealm.bigRealmId || realmsContent.simpleRealm.bigRealmId > lastRealm.bigRealmId + 1) { builder["ret"] = 5; builder["msg"] = "bigRealmId的值不符合要求"; return 5; } var realmBriefInfo = new RealmBriefInfo(); realmBriefInfo.areaName = realmsContent.simpleRealm.areaName; realmBriefInfo.timeZone = lastRealm.timeZone; realmBriefInfo.openTime = realmsContent.simpleRealm.openTime + timeDistance; realmBriefInfo.visibleTime = realmsContent.simpleRealm.visibleTime + timeDistance; realmBriefInfo.bigRealmId = realmsContent.simpleRealm.bigRealmId; realmBriefInfo.realmId = lastRealm.realmId + 1; realmBriefInfo.realmName = lastRealm.realmName.Replace(((lastRealm.realmId) % 1000).ToString(), ((lastRealm.realmId + 1) % 1000).ToString()); realmBriefInfo.realmBdcName = (lastRealm.realmId + 1).ToString(); realmBriefInfo.WorldId = lastRealm.WorldId; realmBriefInfo.logicWorldId = lastRealm.logicWorldId; realmBriefInfo.regMax = lastRealm.regMax; realmCache.realmList.Add(realmBriefInfo); } else if (realmsContent.type == "del") { if (realmsContent.simpleRealm.realmId != lastRealm.realmId) { builder["ret"] = 6; builder["msg"] = "realmid值不符合要求"; return 6; } foreach (var realm in realmCache.realmList) { if (realm.realmId == realmsContent.simpleRealm.realmId) { realmCache.realmList.Remove(realm); break; } } } else if (realmsContent.type == "edit") { int timeDistance = (timeZoneBeijing - lastRealm.timeZone) * 60 * 60; int preBigrealmId = 0; int nextBigrealmId = 0; for (int i = 0; i < realmCache.realmList.Count; i++) { if (realmCache.realmList[i].realmId == realmsContent.simpleRealm.realmId - 1) { preBigrealmId = realmCache.realmList[i].bigRealmId; } if (realmCache.realmList[i].realmId == realmsContent.simpleRealm.realmId + 1) { nextBigrealmId = realmCache.realmList[i].bigRealmId; } } for (int i = 0; i < realmCache.realmList.Count; i++) { if (realmCache.realmList[i].realmId == realmsContent.simpleRealm.realmId) { if ((preBigrealmId == 0 || preBigrealmId <= realmsContent.simpleRealm.bigRealmId) && (preBigrealmId == 0 || preBigrealmId + 1 >= realmsContent.simpleRealm.bigRealmId) && (nextBigrealmId == 0 || nextBigrealmId >= realmsContent.simpleRealm.bigRealmId) && (nextBigrealmId == 0 || nextBigrealmId - 1 <= realmsContent.simpleRealm.bigRealmId)) { var realm = new RealmBriefInfo(); realm.realmId = realmCache.realmList[i].realmId; realm.areaName = realmCache.realmList[i].areaName; realm.realmName = realmCache.realmList[i].realmName; realm.realmBdcName = realmCache.realmList[i].realmBdcName; realm.timeZone = realmCache.realmList[i].timeZone; realm.WorldId = realmCache.realmList[i].WorldId; realm.logicWorldId = realmCache.realmList[i].logicWorldId; realm.openTime = realmsContent.simpleRealm.openTime + timeDistance; realm.visibleTime = realmsContent.simpleRealm.visibleTime + timeDistance; realm.bigRealmId = realmsContent.simpleRealm.bigRealmId; realm.logicWorldId = realmCache.realmList[i].logicWorldId; realm.regMax = realmCache.realmList[i].regMax; realmCache.realmList[i] = realm; break; } else { TraceLog.Trace("i = " + i + "realmCache.realmList[i - 1].bigRealmId = " + realmCache.realmList[i - 1].bigRealmId + "realmsContent.simpleRealm.bigRealmId = " + realmsContent.simpleRealm.bigRealmId); TraceLog.Trace("Realm.DoAddRealmInfo realmCache.realmList[i].realmId = " + realmCache.realmList[i].realmId + "realmsContent.simpleRealm.realmId = " + realmsContent.simpleRealm.realmId); builder["ret"] = 5; builder["msg"] = "bigRealmId的值不符合要求"; return 5; } } } } else { builder["ret"] = 5; builder["msg"] = "操作类型不符合要求"; return 5; } builder["ret"] = 0; builder["msg"] = "操作成功"; return 0; } public static void OnResMsg(JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSAddRealmRes res) { // 清理内存中的数据 realmCache.updateTime = 0; realmCache.lastVersion = ""; realmCache.realmList.Clear(); realmCache.oriRealmList.Clear(); // 响应码 jsondata["code"] = res.Code; // 响应信息 jsondata["msg"] = res.Msg.ToString(); rsp.IsWaitFor = false; return; } public static void OnResMsg(JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, List resList) { bool isOk = true; JsonData data = new JsonData(); jsondata["data"] = data; data.Add(""); data.Clear(); string msg = ""; foreach (var res in resList) { JsonData rdata = new JsonData(); // realmId rdata["realmId"] = res.realmId; // 响应码 rdata["code"] = res.code; if (res.code != 0) { realmIdDictory.Remove(res.realmId); isOk = false; msg += res.realmId + "失败:" + res.msg + ";"; } // 响应信息 rdata["msg"] = res.msg; data.Add(rdata); } if (isOk) { jsondata["ret"] = 0; jsondata["msg"] = "操作成功"; } else { jsondata["ret"] = -1; jsondata["msg"] = msg; } rsp.IsWaitFor = false; return; } [RequestMapping("区服操作",PermissionCode.REALM_OPTION, toLog: true)] public static int OnRealmOptionHttpReq(string httpApiCmd, JsonData builder, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint id) { var realmInfo = request.Content.ToJson(); if ((int)builder["ret"] != 0) { return (int)builder["ret"]; } //做一些基础校验 SSRealmOperationReq realmReq = new SSRealmOperationReq(); //realmReq.BusinessName.SetString(realmInfo.businessName); realmReq.AreaName.SetString(realmInfo.areaName); realmReq.WorldId=realmInfo.worldId; realmReq.RealmId=realmInfo.realmId; realmReq.LogicWorldId=realmInfo.logicWorldId; realmReq.RealmName.SetString(realmInfo.realmName); realmReq.ShowSeq=realmInfo.showSeq; realmReq.Status=realmInfo.status; realmReq.VisibleOnlyWhiteList = realmInfo.visibleOnlyWhiteList; realmReq.BdcName.SetString(realmInfo.bdcName); realmReq.OpenTime.SetString(realmInfo.openTime); realmReq.VisibleTime.SetString(realmInfo.visibleTime); realmReq.BigRealmId = realmInfo.bigRealmName; OperationServerUtils.GetPacketSender().SendToRealmlistServer((int)SSMsgID.SsRealmOperationReq, ref realmReq, 0); rsp.IsWaitFor = true; return 1; } } }