You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1088 lines
45 KiB

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<RealmBriefInfo> realmList;
public List<RealmBriefInfo> oriRealmList;
}
[MenuMapping(refc = typeof(ServerMonitor))]
public class Realm
{
private static long m_lastTickTime = 0;
public static RealmCache realmCache = new RealmCache();
public static Dictionary<int, int> realmIdDictory = new Dictionary<int, int>();
// 前端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<string, Dictionary<int, List<RealmBriefInfo>>> realmDic = new Dictionary<string, Dictionary<int, List<RealmBriefInfo>>>();
var realmOnlineInfo = OperationServerUtils.GetOperationServerData().m_allRealmOnlineInfo;
foreach (var realm in svrData.m_allRealm.Values)
{
if (!realmDic.ContainsKey(realm.areaName))
{
Dictionary<int, List<RealmBriefInfo>> m_tempDic = new Dictionary<int, List<RealmBriefInfo>>();
realmDic.Add(realm.areaName, m_tempDic);
}
if(!realmDic[realm.areaName].ContainsKey(realm.WorldId))
{
List<RealmBriefInfo> m_tempList = new List<RealmBriefInfo>();
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<string, Dictionary<int, List<RealmBriefInfo>>> 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<int> checkWorldIdList = new List<int>();
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<string, string>();
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<int, string> ralemsDict = new SortedDictionary<int, string>();
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<RealmBriefOperationInfo>();
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<RealmBriefInfo>();
}
if (realmCache.oriRealmList == null)
{
realmCache.oriRealmList = new List<RealmBriefInfo>();
}
//从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<RealmsObj>();
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<RealmOperationRes> 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<RealmInfo>();
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;
}
}
}