public bool TryGetValue(int serverId, out KuaFuServerInfo kuaFuServerInfo) { bool result; lock (this.RuntimeData.Mutex) { result = this.RuntimeData.ServerIdServerInfoDict.TryGetValue(serverId, out kuaFuServerInfo); } return(result); }
public static int ZhengBaRequestEnter(int zhanDuiID, out int gameId, out int kuaFuServerID, out string[] ips, out int[] ports) { gameId = 0; kuaFuServerID = 0; ips = null; ports = null; lock (ZhanDuiZhengBa_K.Mutex) { if (ZhanDuiZhengBa_K.StateMachine.GetCurrState() != 5) { if (!Consts.TestMode || ZhanDuiZhengBa_K.StateMachine.GetCurrState() != 6) { return(-2001); } } ZhanDuiZhengBa_K.JoinRolePkData roleData = ZhanDuiZhengBa_K.TodayJoinRoleDatas.Find((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID == zhanDuiID); if (roleData == null || roleData.CurrGameID == 0) { return(-4006); } ZhanDuiZhengBaPkLogData logData = null; ZhanDuiZhengBa_K.ThisLoopPkLogs.TryGetValue(roleData.CurrGameID, out logData); if (roleData == null || logData == null) { return(-4006); } if (!roleData.WaitReqEnter) { return(-2001); } gameId = roleData.CurrGameID; kuaFuServerID = roleData.ToServerID; } KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(kuaFuServerID); int result; if (null != serverInfo) { ips = new string[] { serverInfo.Ip }; ports = new int[] { serverInfo.Port }; result = 0; } else { result = -11001; } return(result); }
/// <summary> /// 从数据库t_server_info加载数据 /// </summary> /// <param name="dbAge"></param> public void LoadServerInfoFromDataBase(int dbAge) { HashSet <int> existIds = new HashSet <int>(); MySqlDataReader sdr = DbHelperMySQL.ExecuteReader("select * from t_server_info"); while (sdr.Read()) { try { KuaFuServerInfo serverInfo = new KuaFuServerInfo() { ServerId = (int)Convert.ToInt32(sdr["serverid"]), Ip = sdr["ip"].ToString(), Port = (int)Convert.ToInt32(sdr["port"]), DbIp = sdr["dbip"].ToString(), DbPort = (int)Convert.ToInt32(sdr["dbport"]), LogDbIp = sdr["logdbip"].ToString(), LogDbPort = (int)Convert.ToInt32(sdr["logdbport"]), State = (int)Convert.ToInt32(sdr["state"]), //Load = (int)Convert.ToInt32(sdr["load"]), Flags = (int)Convert.ToInt32(sdr["flags"]), Age = dbAge, }; ServerIdServerInfoDict[serverInfo.ServerId] = serverInfo; existIds.Add(serverInfo.ServerId); } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } } lock (Mutex) { foreach (var id in ServerIdServerInfoDict.Keys.ToList()) { if (!existIds.Contains(id)) { KuaFuServerInfo tmp; ServerIdServerInfoDict.TryRemove(id, out tmp); } } ServerListAge = dbAge; } }
public static int ZhengBaRequestEnter(int zhanDuiID, out int gameId, out int kuaFuServerID, out string[] ips, out int[] ports) { gameId = 0; kuaFuServerID = 0; ips = null; ports = null; lock (EscapeBattle_K.Mutex) { EscapeBattle_K.JoinPkData roleData; if (!EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out roleData) || roleData.CurrGameID == 0) { return(-4006); } EscapeBattlePkLogData logData = null; if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(roleData.CurrGameID, out logData)) { return(-4006); } if (logData.State >= 3) { return(-2008); } gameId = roleData.CurrGameID; kuaFuServerID = roleData.ToServerID; } KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(kuaFuServerID); int result; if (null != serverInfo) { ips = new string[] { serverInfo.Ip }; ports = new int[] { serverInfo.Port }; result = 0; } else { result = -11001; } return(result); }
public static bool UpdateServerInfo(BuffServerInfo item, int ServerListAge, int serverFlags, out KuaFuServerInfo data, ConcurrentDictionary <int, KuaFuServerInfo> ServerIdServerInfoDict) { bool serverInfoChanged = false; if (!ServerIdServerInfoDict.TryGetValue(item.nServerID, out data)) { data = new KuaFuServerInfo() { ServerId = item.nServerID, Age = ServerListAge, Flags = serverFlags, }; ServerIdServerInfoDict[item.nServerID] = data; serverInfoChanged = true; } if (data.Ip != item.strURL || data.Port != item.nServerPort) { data.Ip = data.DbIp = data.LogDbIp = item.strURL; data.Port = item.nServerPort; data.DbPort = item.nServerPort + 10000; data.LogDbPort = item.nServerPort + 20000; data.Flags = serverFlags; data.Age = ServerListAge; serverInfoChanged = true; } if (serverInfoChanged) { try { DbHelperMySQL.ExecuteSql(string.Format("INSERT INTO t_server_info(serverid,ip,port,dbip,dbport,logdbip,logdbport,state,age,flags) " + "VALUES({0},'{1}',{2},'{1}',{3},'{1}',{4},0,0,{5}) " + "ON DUPLICATE KEY UPDATE `ip`='{1}',port={2},dbip='{1}',dbport={3},logdbip='{1}',logdbport={4},flags={5}", data.ServerId, data.Ip, data.Port, data.DbPort, data.LogDbPort, data.Flags)); } catch (Exception ex) { LogManager.WriteException(ex.Message); } } return(serverInfoChanged); }
public bool GetKuaFuGSInfo(int serverId, out string gsIp, out int gsPort) { gsIp = string.Empty; gsPort = 0; KuaFuServerInfo info = null; lock (Mutex) { if (!ServerIdServerInfoDict.TryGetValue(serverId, out info)) { return(false); } gsIp = info.Ip; gsPort = info.Port; return(true); } }
public bool GetKuaFuGSInfo(int serverId, out string gsIp, out int gsPort) { gsIp = string.Empty; gsPort = 0; KuaFuServerInfo info = null; bool result; if (!KuaFuManager.getInstance().TryGetValue(serverId, out info)) { result = false; } else { gsIp = info.Ip; gsPort = info.Port; result = true; } return(result); }
public static int ZhengBaKuaFuLogin(AutoCSer.Net.TcpInternalServer.ServerSocketSender socket, int zhanDuiID, int gameId, int srcServerID, out ZhanDuiZhengBaFuBenData copyData) { copyData = null; lock (ZhanDuiZhengBa_K.Mutex) { ZhanDuiZhengBa_K.JoinRolePkData roleData = ZhanDuiZhengBa_K.TodayJoinRoleDatas.Find((ZhanDuiZhengBa_K.JoinRolePkData _r) => _r.ZhanDuiID == zhanDuiID && _r.CurrGameID == gameId); ZhanDuiZhengBaPkLogData logData = null; ZhanDuiZhengBa_K.ThisLoopPkLogs.TryGetValue(gameId, out logData); if (roleData == null || logData == null) { return(-12); } if (!roleData.WaitReqEnter) { return(-12); } copyData = roleData.CopyData; } KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(srcServerID); int result; if (null != serverInfo) { copyData.IPs = new string[] { serverInfo.DbIp, serverInfo.DbIp }; copyData.Ports = new int[] { serverInfo.DbPort, serverInfo.LogDbPort }; result = 0; } else { result = -11000; } return(result); }
public static int ZhengBaKuaFuLogin(AutoCSer.Net.TcpInternalServer.ServerSocketSender socket, int zhanDuiID, int gameId, int srcServerID, out EscapeBattleFuBenData copyData) { copyData = null; lock (EscapeBattle_K.Mutex) { EscapeBattle_K.JoinPkData roleData; if (!EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out roleData) || roleData.CurrGameID == 0) { return(-4006); } EscapeBattlePkLogData logData = null; if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(roleData.CurrGameID, out logData)) { return(-4006); } copyData = roleData.CopyData; } KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(srcServerID); int result; if (null != serverInfo) { copyData.IPs = new string[] { serverInfo.DbIp, serverInfo.DbIp }; copyData.Ports = new int[] { serverInfo.DbPort, serverInfo.LogDbPort }; result = 0; } else { result = -11000; } return(result); }
public int CheckEnterWorldKuaFuSign(string worldRoleID, string token, out string signKey, out string[] ips, out int[] ports) { int result = -100; signKey = null; ips = null; ports = null; long utcTicks = TimeUtil.UTCTicks(); lock (this.Mutex) { KuaFuServerLoginData data; if (this.WorldRoleIDDict.TryGetValue(worldRoleID, out data) && token == data.SignToken) { if (utcTicks > data.EndTicks) { return(result); } result = 0; signKey = data.SignKey; } KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(data.ServerId); if (null != serverInfo) { ips = new string[] { serverInfo.DbIp, serverInfo.DbIp }; ports = new int[] { serverInfo.DbPort, serverInfo.LogDbPort }; } } return(result); }
public int InitializeClient(KuaFuClientContext clientInfo, out bool bFistInit) { bFistInit = false; if (KuaFuServerManager.LimitIP) { bool denied = true; KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(clientInfo.ServerId); if (null == serverInfo) { LogManager.WriteLog(LogTypes.Error, string.Format("非法连接,无效的服务器编号#serverid={0},ip={1},gametype={2}", clientInfo.ServerId, clientInfo.Token, (GameTypes)clientInfo.GameType), null, true); return(-1); } if (serverInfo != null && !string.IsNullOrEmpty(clientInfo.Token)) { if (!string.IsNullOrEmpty(serverInfo.LanIp) && clientInfo.Token.Contains(serverInfo.LanIp)) { denied = false; } else if (clientInfo.Token.Contains(serverInfo.Ip)) { denied = false; } } if (denied) { LogManager.WriteLog(LogTypes.Error, string.Format("非法连接#serverid={0},ip={1},ip={2},lanip={3},gametype={4}", new object[] { clientInfo.ServerId, clientInfo.Token, serverInfo.Ip, serverInfo.LanIp, (GameTypes)clientInfo.GameType }), null, true); return(-1); } } int clientId; lock (this.Mutex) { ClientAgent agent = null; if (!this.ServerId2ClientAgent.TryGetValue(clientInfo.ServerId, out agent)) { LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器连接1.ServerId:{0},ClientId:{1},info:{2},GameType:{3} [Service首次连接过来]", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); bFistInit = true; clientInfo.ClientId = KuaFuServerManager.GetUniqueClientId(); agent = new ClientAgent(clientInfo); this.ServerId2ClientAgent[clientInfo.ServerId] = agent; } else if (clientInfo.Token != agent.ClientInfo.Token) { if (clientInfo.ClientId == agent.ClientInfo.ClientId) { LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器IP变化.ServerId:{0},ClientId:{1},info:{2},GameType:{3}", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); } else { if (agent.IsAlive) { LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器ID重复,禁止连接.ServerId:{0},ClientId:{1},info:{2},GameType:{3}", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); return(-11002); } bFistInit = true; clientInfo.ClientId = KuaFuServerManager.GetUniqueClientId(); agent.Reset(clientInfo); LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器IP变化.ServerId:{0},ClientId:{1},info:{2},GameType:{3}", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); } } else if (clientInfo.ClientId != agent.ClientInfo.ClientId) { if (clientInfo.ClientId <= 0) { clientInfo.ClientId = agent.ClientInfo.ClientId; agent.Reset(clientInfo); LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器重连.ServerId:{0},ClientId:{1},info:{2},GameType:{3} [首次连接过来]", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); } else { LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器重连.ServerId:{0},ClientId:{1},info:{2},GameType:{3} [非首次连接过来]", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType }), null, true); } } else if (!Global.TestMode && !agent.IsAlive) { LogManager.WriteLog(LogTypes.Info, string.Format("InitializeClient服务器连接和上次心跳时间间隔过长.ServerId:{0},ClientId:{1},info:{2},GameType:{3},time={4}", new object[] { clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token, (GameTypes)clientInfo.GameType, agent.DeltaTime }), null, true); } if (agent != null) { clientInfo.ClientId = agent.ClientInfo.ClientId; agent.ClientHeartTick(); agent.TryInitGameType(clientInfo.GameType); } clientId = clientInfo.ClientId; } return(clientId); }
public int EnterPTKuaFuMap(int serverID, int roleId, int ptid, int mapCode, int kuaFuLine, out string signToken, out string signKey, out int kuaFuServerID, out string[] ips, out int[] ports) { ips = null; ports = null; signToken = null; signKey = null; kuaFuServerID = 0; string worldRoleID = ConstData.FormatWorldRoleID(roleId, ptid); KuaFuWorldRoleData roleData = this.LoadKuaFuWorldRoleData(roleId, ptid, worldRoleID); int result; if (null == roleData) { result = -4010; } else { kuaFuServerID = KuaFuServerManager.EnterKuaFuMapLine(kuaFuLine, mapCode); if (kuaFuServerID <= 0) { result = -100; } else { KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(kuaFuServerID); if (null != serverInfo) { ips = new string[] { serverInfo.Ip }; ports = new int[] { serverInfo.Port }; } signToken = Guid.NewGuid().ToString("N"); signKey = Guid.NewGuid().ToString("N"); long utcTicks = TimeUtil.UTCTicks(); lock (this.Mutex) { KuaFuServerLoginData loginData; if (!this.WorldRoleIDDict.TryGetValue(worldRoleID, out loginData)) { loginData = new KuaFuServerLoginData(); loginData.TempRoleID = roleData.TempRoleID; this.WorldRoleIDDict[worldRoleID] = loginData; } loginData.SignKey = signKey; loginData.SignToken = signToken; loginData.EndTicks = utcTicks + 86400000L; loginData.TargetServerID = kuaFuServerID; loginData.ServerId = ConstData.ConvertToKuaFuServerID(serverID, ptid); loginData.RoleId = roleId; loginData.PTID = ptid; loginData.GameId = (long)mapCode; result = loginData.TempRoleID; } } } return(result); }
public bool ProcessKarenBattleEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = 0; if (!this.IsGongNengOpened(client, true)) { client.sendCmd <int>(nID, result, false); return(true); } int roleID = Global.SafeConvertToInt32(cmdParams[0]); int mapCode = Global.SafeConvertToInt32(cmdParams[1]); KarenBattleSceneInfo sceneItem = null; KarenGameStates state = KarenGameStates.None; int eastcount = 0; int westcount = 0; JunTuanRankData rankData = this.GetJunTuanRankDataByClient(client); if (rankData == null || !this.CheckCanEnterKarenBattle(client)) { result = -5; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } if (!this.CheckMap(client)) { result = -21; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } result = this.CheckTimeCondition(ref state); if (state != KarenGameStates.Start) { result = -2001; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } lock (this.Mutex) { if (!this.SceneDataDict.TryGetValue(mapCode, out sceneItem)) { result = -5; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } foreach (KeyValuePair <int, KarenBattleSceneInfo> item in this.SceneDataDict) { KarenFuBenData fbData = JunTuanClient.getInstance().GetKarenKuaFuFuBenData(item.Key); if (null != fbData) { SceneUIClasses sType = Global.GetMapSceneType(item.Value.MapCode); if (sType == SceneUIClasses.KarenWest) { westcount = fbData.GetRoleCountWithEnter(rankData.Rank); } else { eastcount = fbData.GetRoleCountWithEnter(rankData.Rank); } } } DateTime lastEnterTime = Global.GetRoleParamsDateTimeFromDB(client, "20019"); if (!this.GMTest && TimeUtil.NowDateTime().Ticks - lastEnterTime.Ticks < 10000000L * (long)sceneItem.EnterCD) { GameManager.ClientMgr.NotifyImportantMsg(client, string.Format(GLang.GetLang(2615, new object[0]), sceneItem.EnterCD), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0); result = -2007; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } KuaFuServerInfo kfserverInfo = null; KarenFuBenData fubenData = JunTuanClient.getInstance().GetKarenKuaFuFuBenData(mapCode); if (fubenData == null || !KuaFuManager.getInstance().TryGetValue(fubenData.ServerId, out kfserverInfo)) { result = -11000; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } if (fubenData.GetRoleCountWithEnter(rankData.Rank) >= sceneItem.MaxEnterNum) { result = -22; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } SceneUIClasses sceneType = Global.GetMapSceneType(sceneItem.MapCode); KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client); if (null != clientKuaFuServerLoginData) { clientKuaFuServerLoginData.RoleId = client.ClientData.RoleID; clientKuaFuServerLoginData.GameId = (long)fubenData.GameId; clientKuaFuServerLoginData.GameType = fubenData.GameType; clientKuaFuServerLoginData.EndTicks = fubenData.EndTime.Ticks; clientKuaFuServerLoginData.ServerId = client.ServerId; clientKuaFuServerLoginData.ServerIp = kfserverInfo.Ip; clientKuaFuServerLoginData.ServerPort = kfserverInfo.Port; clientKuaFuServerLoginData.FuBenSeqId = 0; } if (result >= 0) { result = JunTuanClient.getInstance().GameFuBenRoleChangeState(client.ServerId, client.ClientData.RoleID, (int)clientKuaFuServerLoginData.GameId, rankData.Rank, 4); if (result >= 0) { GlobalNew.RecordSwitchKuaFuServerLog(client); client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false); } else { Global.GetClientKuaFuServerLoginData(client).RoleId = 0; } } } client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}", new object[] { result, 0, westcount, eastcount }), false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
private static void AsyncFromDataBase() { try { //刷新服务器列表 object ageObj = DbHelperMySQL.GetSingle("select value from t_async where id = 1"); if (null != ageObj) { int age = (int)ageObj; if (age > _ServerListAge) { HashSet <int> existAllIds = new HashSet <int>(); HashSet <int> existKfIds = new HashSet <int>(); MySqlDataReader sdr = DbHelperMySQL.ExecuteReader("select * from t_server_info"); while (sdr.Read()) { try { KuaFuServerInfo serverInfo = new KuaFuServerInfo() { ServerId = (int)Convert.ToInt32(sdr["serverid"]), Ip = sdr["ip"].ToString(), Port = (int)Convert.ToInt32(sdr["port"]), DbIp = sdr["dbip"].ToString(), DbPort = (int)Convert.ToInt32(sdr["dbport"]), LogDbIp = sdr["logdbip"].ToString(), LogDbPort = (int)Convert.ToInt32(sdr["logdbport"]), State = (int)Convert.ToInt32(sdr["state"]), //Load = (int)Convert.ToInt32(sdr["load"]), Flags = (int)Convert.ToInt32(sdr["flags"]), Age = age, }; _ServerIdServerInfoDict[serverInfo.ServerId] = serverInfo; existAllIds.Add(serverInfo.ServerId); if ((serverInfo.Flags & ServerFlags.KuaFuServer) != 0) { existKfIds.Add(serverInfo.ServerId); } } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } } sdr.Close(); lock (Mutex) { foreach (var id in _ServerIdServerInfoDict.Keys.ToList()) { if (!existAllIds.Contains(id)) { KuaFuServerInfo tmp; _ServerIdServerInfoDict.TryRemove(id, out tmp); } } _ServerListAge = age; } ClientAgentManager.Instance().SetAllKfServerId(existKfIds); } } } catch (Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } }
/// <summary> /// 从中心后台检查更新配置 /// </summary> /// <returns></returns> public bool UpdateDataFromServer2() { try { //确认是否配置了获取接口地址 if (string.IsNullOrEmpty(KuaFuServerListUrl) || string.IsNullOrEmpty(ServerListUrl)) { return(false); } //首先获取普通服务器列表 //1其次获取跨服活动服务器列表 ClientServerListData clientListData = new ClientServerListData(); clientListData.lTime = TimeUtil.NOW(); clientListData.strMD5 = MD5Helper.get_md5_string(ConstData.HTTP_MD5_KEY + clientListData.lTime.ToString()); byte[] clientBytes = DataHelper.ObjectToBytes <ClientServerListData>(clientListData); byte[] responseData = WebHelper.RequestByPost(ServerListUrl, clientBytes, 2000, 30000); if (responseData == null) { return(false); } HashSet <int> existIds = new HashSet <int>(); BuffServerListData kuaFuServerListResponseData = DataHelper.BytesToObject <BuffServerListData>(responseData, 0, responseData.Length); if (null != kuaFuServerListResponseData && null != kuaFuServerListResponseData.listServerData) { lock (Mutex) { bool serverInfoChanged = false; foreach (var item in kuaFuServerListResponseData.listServerData) { KuaFuServerInfo data; if (!ServerIdServerInfoDict.TryGetValue(item.nServerID, out data)) { serverInfoChanged = true; data = new KuaFuServerInfo() { ServerId = item.nServerID, }; ServerIdServerInfoDict[item.nServerID] = data; } if (data.Ip != item.strURL || data.Port != item.nServerPort) { data.Ip = data.DbIp = data.LogDbIp = item.strURL; data.Port = item.nServerPort; data.DbPort = item.nServerPort + 10000; data.LogDbPort = item.nServerPort + 20000; data.Flags = ServerFlags.NormalServerOnly; data.Age = ServerListAge; UpdateServerInfo(data.ServerId, data.Ip, data.Port, data.DbPort, data.LogDbPort, data.Flags); serverInfoChanged = true; } existIds.Add(item.nServerID); } } } //其次获取跨服活动服务器列表 clientListData = new ClientServerListData(); clientListData.lTime = TimeUtil.NOW(); clientListData.strMD5 = MD5Helper.get_md5_string(ConstData.HTTP_MD5_KEY + clientListData.lTime.ToString()); clientBytes = DataHelper.ObjectToBytes <ClientServerListData>(clientListData); responseData = WebHelper.RequestByPost(KuaFuServerListUrl, clientBytes, 2000, 30000); if (responseData == null) { return(false); } kuaFuServerListResponseData = DataHelper.BytesToObject <BuffServerListData>(responseData, 0, responseData.Length); if (null != kuaFuServerListResponseData && null != kuaFuServerListResponseData.listServerData) { lock (Mutex) { bool serverInfoChanged = false; bool serverGameConfigChanged = false; foreach (var item in kuaFuServerListResponseData.listServerData) { KuaFuServerInfo data; if (!ServerIdServerInfoDict.TryGetValue(item.nServerID, out data)) { serverInfoChanged = true; data = new KuaFuServerInfo() { ServerId = item.nServerID, }; ServerIdServerInfoDict[item.nServerID] = data; } if (data.Ip != item.strURL || data.Port != item.nServerPort) { data.Ip = data.DbIp = data.LogDbIp = item.strURL; data.Port = item.nServerPort; data.DbPort = item.nServerPort + 10000; data.LogDbPort = item.nServerPort + 20000; data.Flags = ServerFlags.KuaFuServer; data.Age = ServerListAge; UpdateServerInfo(data.ServerId, data.Ip, data.Port, data.DbPort, data.LogDbPort, data.Flags); serverInfoChanged = true; } existIds.Add(item.nServerID); } foreach (var id in ServerIdServerInfoDict.Keys) { if (!existIds.Contains(id)) { KuaFuServerInfo data; ServerIdServerInfoDict.TryRemove(id, out data); RemoveServerInfo(id); serverInfoChanged = true; } } if (serverInfoChanged) { ServerListAge++; } existIds.Clear(); //默认所有跨服服务器都允许分配幻影寺院活动 foreach (var item in ServerIdServerInfoDict.Values) { if ((item.Flags & ServerFlags.KuaFuServer) > 0) { UpdateServerGameConfig(item.ServerId, (int)GameTypes.HuanYingSiYuan, HuanYingSiYuanGameConfigData.MaxCount, ref serverGameConfigChanged); existIds.Add(item.ServerId); } item.Age = ServerListAge; } //从列表移除已不存在的服务器 foreach (var id in ServerIdGameConfigDict.Keys) { if (!existIds.Contains(id)) { RemoveServerGameConfig(id, ref serverGameConfigChanged); RemoveServerGameConfigToDb(id, (int)GameTypes.HuanYingSiYuan); } } if (serverGameConfigChanged) { ServerGameConfigAge++; } } } } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); return(false); } return(true); }
/// <summary> /// 从中心后台检查更新配置 /// </summary> /// <returns></returns> public bool UpdateDataFromServer() { try { byte[] bytes = DataHelper.ObjectToBytes <GetKuaFuServerListRequestData>(KuaFuServerListRequestData); byte[] responseData = WebHelper.RequestByPost(ServerListUrl, bytes, 2000, 30000); if (responseData == null) { return(false); } GetKuaFuServerListResponseData kuaFuServerListResponseData = DataHelper.BytesToObject <GetKuaFuServerListResponseData>(responseData, 0, responseData.Length); if (null != kuaFuServerListResponseData) { lock (Mutex) { bool serverInfoChanged = false; bool serverGameConfigChanged = false; KuaFuServerListRequestData.ServerListAge = kuaFuServerListResponseData.ServerListAge; KuaFuServerListRequestData.GameConfigAge = kuaFuServerListResponseData.GameConfigAge; KuaFuServerListRequestData.ServerGameConfigAge = kuaFuServerListResponseData.ServerGameConfigAge; HashSet <int> existIds = new HashSet <int>(); if (null != kuaFuServerListResponseData.ServerList) { foreach (var item in kuaFuServerListResponseData.ServerList) { KuaFuServerInfo data; if (!ServerIdServerInfoDict.TryGetValue(item.ServerId, out data)) { serverInfoChanged = true; data = new KuaFuServerInfo() { ServerId = item.ServerId, }; } else if (data.Ip != item.Ip || data.Port != item.Port || data.DbPort != item.DbPort || data.LogDbPort != item.LogDbPort || data.Flags != item.Flags) { data.Ip = item.Ip; data.Port = item.Port; data.DbPort = item.DbPort; data.LogDbPort = item.LogDbPort; data.Flags = item.Flags; data.Age = ServerListAge; UpdateServerInfo(item.ServerId, item.Ip, item.Port, item.DbPort, item.LogDbPort, item.Flags); serverInfoChanged = true; } existIds.Add(item.ServerId); } foreach (var id in ServerIdServerInfoDict.Keys) { if (!existIds.Contains(id)) { KuaFuServerInfo data; ServerIdServerInfoDict.TryRemove(id, out data); RemoveServerInfo(id); serverInfoChanged = true; } } if (serverInfoChanged) { ServerListAge++; } existIds.Clear(); } if (true) { //默认所有跨服服务器都允许分配幻影寺院活动 foreach (var item in ServerIdServerInfoDict.Values) { if ((item.Flags & ServerFlags.KuaFuServer) > 0) { UpdateServerGameConfig(item.ServerId, (int)GameTypes.HuanYingSiYuan, 250, ref serverGameConfigChanged); existIds.Add(item.ServerId); } } } else { //添加明确的分配配置 if (null != kuaFuServerListResponseData.ServerGameConfigList) { foreach (var item in kuaFuServerListResponseData.ServerGameConfigList) { UpdateServerGameConfig(item.ServerId, item.GameType, item.Capacity, ref serverGameConfigChanged); existIds.Add(item.ServerId); } } } //从列表移除已不存在的服务器 foreach (var id in ServerIdGameConfigDict.Keys) { if (!existIds.Contains(id)) { RemoveServerGameConfig(id, ref serverGameConfigChanged); RemoveServerGameConfigToDb(id, (int)GameTypes.HuanYingSiYuan); } } if (serverGameConfigChanged) { ServerGameConfigAge++; } } } } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); return(false); } return(true); }