Esempio n. 1
0
        public void UpdateTianTiRankData(DateTime now, bool monthRank = false, bool force = false)
        {
            if (Monitor.TryEnter(MutexPaiHang))
            {
                try
                {
                    if (!force)
                    {
                        lock (Mutex)
                        {
                            if (RankData.ModifyTime.DayOfYear == now.DayOfYear)
                            {
                                return;
                            }
                        }
                    }

                    if (!monthRank)
                    {
                        if (now.Day == 1)
                        {
                            monthRank = true;
                        }
                    }

                    List <TianTiRoleInfoData> tianTiRoleInfoDataList = new List <TianTiRoleInfoData>();
                    string          strSql = "";
                    MySqlDataReader sdr    = null;

                    try
                    {
                        ReloadTianTiRankDayList(tianTiRoleInfoDataList);
                    }
                    catch (System.Exception ex)
                    {
                        LogManager.WriteExceptionUseCache(ex.ToString());
                        return;
                    }
                    finally
                    {
                        if (null != sdr)
                        {
                            sdr.Close();
                        }
                    }

                    int ret = 0;
                    try
                    {
                        if (tianTiRoleInfoDataList.Count > 0)
                        {
                            ret = DbHelperMySQL.ExecuteSql(string.Format("UPDATE t_tianti_roles SET `duanweirank`={0}", RankData.MaxPaiMingRank + 1));
                            if (ret >= 0)
                            {
                                ret = DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_day_paihang;");
                            }
                            if (ret >= 0)
                            {
                                int c          = tianTiRoleInfoDataList.Count;
                                int numPerExec = 50;
                                for (int i = 0; i < c; i++)
                                {
                                    if (i % numPerExec == 0)
                                    {
                                        strSql = "INSERT INTO t_tianti_day_paihang(rid,rank) VALUES";
                                    }

                                    strSql += string.Format("({0},{1})", tianTiRoleInfoDataList[i].RoleId, tianTiRoleInfoDataList[i].DuanWeiRank);
                                    if ((i % numPerExec) == (numPerExec - 1) || i == (c - 1))
                                    {
                                        DbHelperMySQL.ExecuteSql(strSql);
                                    }
                                    else
                                    {
                                        strSql += ',';
                                    }
                                }

                                DbHelperMySQL.ExecuteSql("UPDATE t_tianti_roles r, t_tianti_day_paihang d SET r.`duanweirank` = d.`rank` WHERE r.`rid` = d.`rid`;");

                                if (monthRank)
                                {
                                    DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_month_paihang;");
                                    strSql = "INSERT INTO t_tianti_month_paihang SELECT * FROM t_tianti_roles WHERE rid IN (SELECT rid FROM t_tianti_day_paihang) ORDER BY `duanweirank` ASC;";
                                    DbHelperMySQL.ExecuteSql(strSql);

                                    DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_day_paihang;");
                                    DbHelperMySQL.ExecuteSql("UPDATE t_tianti_roles SET `duanweirank`=0,`duanweijifen`=0,`duanweiid`=0;");
                                }
                            }

                            if (ret >= 0)
                            {
                                strSql = string.Format("UPDATE t_async SET `value`={1} WHERE `id`={0};", AsyncTypes.TianTiPaiHangModifyOffsetDay, DataHelper2.GetOffsetDay(now));
                                ExecuteSqlNoQuery(strSql);
                            }
                        }

                        lock (Mutex)
                        {
                            RankData.ModifyTime = now;
                            if (monthRank)
                            {
                                RankData.TianTiRoleInfoDataList      = new List <TianTiRoleInfoData>();
                                RankData.TianTiMonthRoleInfoDataList = tianTiRoleInfoDataList;
                            }
                            else
                            {
                                RankData.TianTiRoleInfoDataList = tianTiRoleInfoDataList;
                            }
                        }

                        if (monthRank)
                        {
                            try
                            {
                                // 这里是为了保证跨服中心月初跨天的时候,更新
                                ZhengBaManagerK.Instance().ReloadSyncData(now);
                            }
                            catch (Exception ex)
                            {
                                LogManager.WriteLog(LogTypes.Error, "UpdateTianTiRankData -> zhengba reload execption", ex);
                            }
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ret = -1;
                        LogManager.WriteException(ex.ToString());
                    }
                }
                finally
                {
                    Monitor.Exit(MutexPaiHang);
                }
            }
        }
Esempio n. 2
0
        public void LoadTianTiRankData(DateTime now)
        {
            try
            {
                ExecuteSqlNoQuery("INSERT IGNORE INTO t_async(`id`,`value`) VALUES(4,1);");
                object ageObj = DbHelperMySQL.GetSingle("select value from t_async where id = " + AsyncTypes.TianTiPaiHangModifyOffsetDay);
                if (null != ageObj)
                {
                    int      dayId      = (int)ageObj;
                    DateTime modifyDate = DataHelper2.GetRealDate(dayId);

                    List <TianTiRoleInfoData> tianTiRoleInfoDataList      = new List <TianTiRoleInfoData>();
                    List <TianTiRoleInfoData> tianTiMonthRoleInfoDataList = new List <TianTiRoleInfoData>();
                    MySqlDataReader           sdr = null;

                    try
                    {
                        LoadTianTiRankDayList(tianTiRoleInfoDataList);
                        //ReloadTianTiRankDayList(tianTiRoleInfoDataList);

                        sdr = DbHelperMySQL.ExecuteReader(string.Format("SELECT rid,rname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,data1,data2 FROM t_tianti_month_paihang ORDER BY `duanweirank` ASC LIMIT {0};", RankData.MaxPaiMingRank));
                        for (int index = 1; sdr.Read(); index++)
                        {
                            TianTiRoleInfoData tianTiRoleInfoData = new TianTiRoleInfoData();
                            tianTiRoleInfoData.RoleId = (int)Convert.ToInt32(sdr["rid"]);
                            if (index <= MaxSendDetailDataCount)
                            {
                                tianTiRoleInfoData.ZoneId       = (int)Convert.ToInt32(sdr["zoneid"]);
                                tianTiRoleInfoData.DuanWeiId    = (int)Convert.ToInt32(sdr["duanweiid"]);
                                tianTiRoleInfoData.DuanWeiJiFen = (int)Convert.ToInt32(sdr["duanweijifen"]);
                                //tianTiRoleInfoData.DuanWeiRank = (int)Convert.ToInt32(sdr["duanweirank"]);
                                tianTiRoleInfoData.ZhanLi   = (int)Convert.ToInt32(sdr["zhanli"]);
                                tianTiRoleInfoData.RoleName = sdr["rname"].ToString();
                                if (!sdr.IsDBNull(sdr.GetOrdinal("data1")))
                                {
                                    tianTiRoleInfoData.TianTiPaiHangRoleData = (byte[])(sdr["data1"]);
                                }
                                // if (!sdr.IsDBNull(sdr.GetOrdinal("data2"))) tianTiRoleInfoData.PlayerJingJiMirrorData = (byte[])(sdr["data2"]);
                            }

                            tianTiRoleInfoData.DuanWeiRank = index;
                            tianTiMonthRoleInfoDataList.Add(tianTiRoleInfoData);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        LogManager.WriteExceptionUseCache(ex.ToString());
                    }
                    finally
                    {
                        if (null != sdr)
                        {
                            sdr.Close();
                        }
                    }

                    lock (Mutex)
                    {
                        RankData.ModifyTime                  = modifyDate;
                        RankData.TianTiRoleInfoDataList      = tianTiRoleInfoDataList;
                        RankData.TianTiMonthRoleInfoDataList = tianTiMonthRoleInfoDataList;
                    }

                    if (DataHelper2.GetOffsetDay(now) != dayId)
                    {
                        UpdateTianTiRankData(now, modifyDate.Month != now.Month, true);
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogManager.WriteException(ex.ToString());
            }
        }