Пример #1
0
        public bool TryGetValue(int serverId, out KuaFuServerInfo kuaFuServerInfo)
        {
            bool result;

            lock (this.RuntimeData.Mutex)
            {
                result = this.RuntimeData.ServerIdServerInfoDict.TryGetValue(serverId, out kuaFuServerInfo);
            }
            return(result);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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;
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
 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);
 }
Пример #14
0
        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());
            }
        }
Пример #15
0
        /// <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);
        }
Пример #16
0
        /// <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);
        }