Example #1
0
 public void ThreadProc(object state)
 {
     do
     {
         Thread.Sleep(1000);
     }while (!this.Persistence.Initialized);
     for (;;)
     {
         try
         {
             DateTime now = TimeUtil.NowDateTime();
             Global.UpdateNowTime(now);
             if (now > this.CheckRoleTimerProcTime)
             {
                 this.CheckRoleTimerProcTime = now.AddSeconds(1.428);
                 int signUpCnt;
                 int startCnt;
                 this.CheckRoleTimerProc(now, out signUpCnt, out startCnt);
                 ClientAgentManager.Instance().SetGameTypeLoad(this.GameType, signUpCnt, startCnt);
             }
             if (now > this.SaveServerStateProcTime)
             {
                 this.SaveServerStateProcTime = now.AddSeconds(30.0);
                 if (now.Hour >= 3 && now.Hour < 4)
                 {
                     this.ClearRolePairFightCount();
                     this.Persistence.UpdateTianTiRankData(now, false, false);
                 }
             }
             if (now > this.CheckGameFuBenTime)
             {
                 this.CheckGameFuBenTime = now.AddSeconds(1000.0);
                 this.CheckGameFuBenTimerProc(now);
             }
             AsyncDataItem[] asyncEvArray = ZhengBaManagerK.Instance().Update();
             ClientAgentManager.Instance().BroadCastAsyncEvent(this.GameType, asyncEvArray);
             this.Persistence.WriteRoleInfoDataProc();
             CoupleArenaService.getInstance().Update();
             CoupleWishService.getInstance().Update();
             zhengDuoService.Instance().Update(now);
             BangHuiMatchService.Instance().Update(now);
             CompService.Instance().Update(now);
             TianTi5v5Service.ThreadProc(null);
             Zork5v5Service.Instance().Update(now);
             int sleepMS = (int)(TimeUtil.NowDateTime() - now).TotalMilliseconds;
             this.Persistence.SaveCostTime(sleepMS);
             sleepMS = 1000 - sleepMS;
             if (sleepMS < 50)
             {
                 sleepMS = 50;
             }
             Thread.Sleep(sleepMS);
         }
         catch (Exception ex)
         {
             LogManager.WriteExceptionUseCache(ex.ToString());
         }
     }
 }
Example #2
0
        public static int GameResult(int gameId, List <int> zhanDuiScoreList)
        {
            int result;

            lock (EscapeBattle_K.Mutex)
            {
                EscapeBattlePkLogData log = null;
                LogManager.WriteLog(LogTypes.Trace, string.Format("EscapeBattle::GameResult,gameid={0},scoreList={1}", gameId, string.Join <int>("_", zhanDuiScoreList)), null, true);
                if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(gameId, out log))
                {
                    result = 3;
                }
                else
                {
                    DateTime now = TimeUtil.NowDateTime();
                    for (int i = 0; i < zhanDuiScoreList.Count - 1; i += 2)
                    {
                        int zhanDuiID = zhanDuiScoreList[i];
                        int score     = zhanDuiScoreList[i + 1];
                        if (log.ZhanDuiIDs.Contains(zhanDuiID))
                        {
                            EscapeBattle_K.JoinPkData pkData;
                            if (EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out pkData))
                            {
                                if (pkData.InGame)
                                {
                                    pkData.InGame       = false;
                                    pkData.CurrGameID   = 0;
                                    pkData.DuanWeiJiFen = TianTi5v5Service.UpdateEscapeZhanDui(pkData.ZhanDuiID, score, now);
                                }
                            }
                            LogManager.WriteLog(LogTypes.Trace, string.Format("EscapeBattle::GameResult,gameid={0},zhanduiid={1},score={2}", gameId, zhanDuiID, score), null, true);
                            EscapeBattle_K.ZhanDuiChangeState(pkData, 5);
                        }
                    }
                    bool canRemove = true;
                    foreach (int zhanDuiID in log.ZhanDuiIDs)
                    {
                        EscapeBattle_K.JoinPkData pkData;
                        if (EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out pkData) && pkData.InGame)
                        {
                            canRemove = false;
                        }
                    }
                    if (canRemove)
                    {
                        EscapeBattle_K.ThisLoopPkLogs.Remove(gameId);
                        ClientAgentManager.Instance().RemoveKfFuben(EscapeBattle_K.GameType, log.ToServerID, (long)log.GameID);
                    }
                    result = 0;
                }
            }
            return(result);
        }
Example #3
0
        public static int ZhanDuiJoin(int zhanDuiID, int jiFen, int readyNum)
        {
            DateTime now = TimeUtil.NowDateTime();
            int      result;

            if (!EscapeBattleConsts.CheckOpenState(now))
            {
                result = -11004;
            }
            else
            {
                TianTi5v5ZhanDuiData zhanDuiData = TianTi5v5Service.GetZhanDuiData(zhanDuiID);
                if (null == zhanDuiData)
                {
                    result = -4031;
                }
                else
                {
                    lock (EscapeBattle_K.Mutex)
                    {
                        EscapeBattle_K.JoinPkData joinData;
                        if (!EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out joinData))
                        {
                            joinData = new EscapeBattle_K.JoinPkData
                            {
                                ZhanDuiID = zhanDuiID
                            };
                            EscapeBattle_K.JoinDict[zhanDuiID] = joinData;
                        }
                        joinData.DuanWeiJiFen = zhanDuiData.EscapeJiFen;
                        joinData.ZhanDuiName  = zhanDuiData.ZhanDuiName;
                        joinData.ZoneId       = zhanDuiData.ZoneID;
                        joinData.ReadyNum     = readyNum;
                        if (readyNum > 0)
                        {
                            joinData.ReadyState = true;
                            joinData.State      = 2;
                        }
                        else if (readyNum == 0)
                        {
                            joinData.ReadyState = false;
                        }
                    }
                    result = 0;
                }
            }
            return(result);
        }
Example #4
0
 public TianTi5v5RankData ZhanDuiGetRankingData(DateTime modifyTime)
 {
     return(TianTi5v5Service.ZhanDuiGetRankingData(modifyTime));
 }
Example #5
0
 public KuaFu5v5FuBenData ZhanDuiGetFuBenData(int gameId)
 {
     return(TianTi5v5Service.ZhanDuiGetFuBenData(gameId));
 }
Example #6
0
 public int ZhanDuiRoleChangeState(int serverId, int zhanDuiID, int roleId, int state, int gameID)
 {
     return(TianTi5v5Service.ZhanDuiRoleChangeState(serverId, zhanDuiID, roleId, state, gameID));
 }
Example #7
0
 public int ZhanDuiRoleSignUp(int serverId, int gameType, int teamID, long zhanLi, int groupIndex)
 {
     return(TianTi5v5Service.ZhanDuiRoleSignUp(serverId, gameType, teamID, zhanLi, groupIndex));
 }
Example #8
0
 public int UpdateZhanDuiData(TianTi5v5ZhanDuiData data, ZhanDuiDataModeTypes modeType)
 {
     return(TianTi5v5Service.UpdateZhanDuiData(data, modeType));
 }
Example #9
0
 public int DeleteZhanDui(int serverID, int roleid, int teamID)
 {
     return(TianTi5v5Service.DeleteZhanDui(serverID, roleid, teamID));
 }
Example #10
0
 public int UpdateZhanDuiXuanYan(long teamID, string xuanYan)
 {
     return(TianTi5v5Service.UpdateZhanDuiXuanYan(teamID, xuanYan));
 }
Example #11
0
 public int CreateZhanDui(int serverID, TianTi5v5ZhanDuiData pData)
 {
     return(TianTi5v5Service.CreateZhanDui(serverID, pData));
 }
Example #12
0
        private static bool CreateGameFuBen(DateTime now, params EscapeBattle_K.JoinPkData[] joinArr)
        {
            for (int side = 1; side <= joinArr.Length; side++)
            {
                joinArr[side - 1].Side = side;
                if (joinArr[side - 1].InGame)
                {
                    return(true);
                }
            }
            int toServerId = 0;
            int gameId     = TianTiPersistence.Instance.GetNextGameId();

            if (ClientAgentManager.Instance().AssginKfFuben(EscapeBattle_K.GameType, (long)gameId, 10, out toServerId))
            {
                EscapeBattleFuBenData copyData = new EscapeBattleFuBenData();
                copyData.GameID   = (long)gameId;
                copyData.ServerID = toServerId;
                EscapeBattleNtfEnterData data = new EscapeBattleNtfEnterData();
                data.ToServerId = toServerId;
                data.GameId     = gameId;
                EscapeBattlePkLogData log = new EscapeBattlePkLogData();
                log.Season     = EscapeBattle_K.SyncData.Season;
                log.StartTime  = now;
                log.GameID     = gameId;
                log.ToServerID = toServerId;
                EscapeBattleMatchConfig config = EscapeBattle_K._Config.MatchConfigList[0];
                log.EndTime = now.AddSeconds((double)config.TotalSecs);
                foreach (EscapeBattle_K.JoinPkData joinRole in joinArr)
                {
                    copyData.SideDict[(long)joinRole.ZhanDuiID] = joinRole.Side;
                    copyData.RoleDict.AddRange(TianTi5v5Service.GetZhanDuiMemberIDs(joinRole.ZhanDuiID));
                    joinRole.ToServerID = toServerId;
                    joinRole.CurrGameID = gameId;
                    joinRole.CopyData   = copyData;
                    joinRole.InGame     = true;
                    data.ZhanDuiIDList.Add(joinRole.ZhanDuiID);
                    log.ZhanDuiIDs.Add(joinRole.ZhanDuiID);
                    log.ZoneIDs.Add(joinRole.ZoneId);
                    log.ZhanDuiNames.Add(joinRole.ZhanDuiName);
                    EscapeBattle_K.JoinPkData zhandui;
                    if (EscapeBattle_K.JoinDict.TryGetValue(joinRole.ZhanDuiID, out zhandui))
                    {
                        zhandui.InGame     = true;
                        zhandui.CurrGameID = gameId;
                        zhandui.Side       = joinRole.Side;
                        zhandui.ToServerID = toServerId;
                        zhandui.CopyData   = copyData;
                        zhandui.State      = 3;
                        zhandui.ReadyState = false;
                        zhandui.ReadyNum   = 0;
                    }
                }
                EscapeBattle_K.AsyncEvQ.Enqueue(KFCallMsg.New <EscapeBattleNtfEnterData>(KuaFuEventTypes.EscapeBattle_NotifyEnter, data));
                EscapeBattle_K.ThisLoopPkLogs[gameId] = log;
                if (!EscapeBattle_K.NeedUpdateRank)
                {
                    EscapeBattle_K.NeedUpdateRank = true;
                }
                LogManager.WriteLog(LogTypes.Trace, string.Format("大逃杀第{0}赛季战队成员通知入场,GameID={1},zhanduiIDs={2}", EscapeBattle_K.SyncData.Season, data.GameId, string.Join <int>(",", log.ZhanDuiIDs)), null, true);
                return(true);
            }
            LogManager.WriteLog(LogTypes.Warning, string.Format("大逃杀第{0}赛季分配游戏服务器失败", EscapeBattle_K.SyncData.Season), null, true);
            return(false);
        }
Example #13
0
 private static void InitCmdDict()
 {
     Program.CmdDict.AddCmdHandler("exit", new ParameterizedThreadStart(Program.ExitCmdHandler));
     Program.CmdDict.AddCmdHandler("reload", new ParameterizedThreadStart(Program.ReloadCmdHandler));
     Program.CmdDict.AddCmdHandler("clear", new ParameterizedThreadStart(Program.ClearCmdHandler));
     Program.CmdDict.AddCmdHandler("load", new ParameterizedThreadStart(Program.ReloadCmdHandler));
     Program.CmdDict.AddCmdHandler("tcpinfo", new ParameterizedThreadStart(CmdMonitor.ShowServerTCPInfo));
     Program.CmdDict.AddCmdHandler("opt", delegate(object x)
     {
         Program.OptCmdProc(x);
     });
     Program.CmdDict.AddCmdHelp("组队天梯,排行刷新", new string[]
     {
         "tianti5v5",
         "paihang"
     });
     Program.CmdDict.AddCmdHelp("组队天梯,排行刷新,重建月度排行", new string[]
     {
         "tianti5v5",
         "paihang",
         "month"
     });
     Program.CmdDict.AddCmdHandler("tianti5v5", delegate(object x)
     {
         string[] cmdFields = x as string[];
         if (cmdFields.Length >= 2 && cmdFields[1] == "paihang")
         {
             TianTi5v5Service.UpdateZhanDuiRankData(TimeUtil.NowDateTime(), cmdFields.Length >= 3 && cmdFields[2] == "month");
             Console.Write("组队天梯,排行刷新");
         }
         else
         {
             Console.Write("组队天梯,未知命令!");
         }
     });
     Program.CmdDict.AddCmdHelp("组队天梯,排行重建,会先重建组队竞技月排行", new string[]
     {
         "zhanduizhengba",
         "load"
     });
     Program.CmdDict.AddCmdHelp("战队争霸,排行刷新", new string[]
     {
         "zhanduizhengba",
         "reload"
     });
     Program.CmdDict.AddCmdHandler("zhanduizhengba", delegate(object x)
     {
         string[] cmdFields = x as string[];
         if (cmdFields.Length >= 2 && cmdFields[1] == "load")
         {
             TianTi5v5Service.PaiHangCopy(TimeUtil.NowDateTime());
             ZhanDuiZhengBa_K.LoadSyncData(TimeUtil.NowDateTime(), false);
             Console.Write("战队争霸,排行重建");
         }
         else if (cmdFields.Length >= 2 && cmdFields[1] == "reload")
         {
             ZhanDuiZhengBa_K.LoadSyncData(TimeUtil.NowDateTime(), cmdFields[1] == "reload");
             Console.Write("战队争霸,排行刷新");
         }
         else
         {
             Console.Write("战队争霸,未知命令!");
         }
     });
     Program.CmdDict.AddCmdHandler("serverlist", delegate(object x)
     {
         KuaFuServerManager.UpdateServerListAge();
     });
     Program.CmdDict.AddCmdHandler("flushcity", delegate(object x)
     {
         YongZheZhanChangPersistence.Instance.LangHunLingYuBroadcastServerIdHashSet.Clear();
     });
     Program.CmdDict.AddCmdHandler("testmode", delegate(object x)
     {
         Global.TestMode = !Global.TestMode;
         if (Global.TestMode)
         {
             Consts.TianTiRoleCountTotal = 1;
         }
         else
         {
             Consts.TianTiRoleCountTotal = 2;
         }
         Console.WriteLine("测试模式状态:{0}", Global.TestMode);
     });
     Program.CmdDict.AddCmdHandler("-maxteamcopy", delegate(object x)
     {
         try
         {
             string[] cmdFields = x as string[];
             int copyId         = Convert.ToInt32(cmdFields[1]);
             int num            = Convert.ToInt32(cmdFields[2]);
             ConstData.MaxCopyTeamMemberNumDict[copyId] = num;
             string msg = string.Format("设置组队副本{0}人数上线为{1}", copyId, num);
             Console.WriteLine(msg);
         }
         catch (Exception ex)
         {
             LogManager.WriteException(ex.ToString());
         }
     });
     Program.CmdDict.AddCmdHandler("-help", delegate(object x)
     {
         try
         {
             string[] args = x as string[];
             if (args != null && args.Length > 0)
             {
                 args = args.Skip(1).ToArray <string>();
             }
             Program.CmdDict.ShowHelp(args);
         }
         catch (Exception ex)
         {
             LogManager.WriteException(ex.ToString());
         }
     });
 }
Example #14
0
        private static bool CreateGameFuBen(DateTime now, ZhanDuiZhengBaMatchConfig matchConfig, ZhanDuiZhengBa_K.JoinRolePkData joinRole1, ZhanDuiZhengBa_K.JoinRolePkData joinRole2)
        {
            bool result;

            if (joinRole1.CurrGameID > 0)
            {
                result = true;
            }
            else
            {
                int betterZhanDuiID = (joinRole1.Rank < joinRole2.Rank) ? joinRole1.ZhanDuiID : joinRole2.ZhanDuiID;
                int toServerId      = 0;
                int gameId          = TianTiPersistence.Instance.GetNextGameId();
                if (ClientAgentManager.Instance().AssginKfFuben(ZhanDuiZhengBa_K.GameType, (long)gameId, 10, out toServerId))
                {
                    ZhanDuiZhengBaFuBenData copyData = new ZhanDuiZhengBaFuBenData();
                    copyData.GameID = (long)gameId;
                    copyData.SideDict[(long)joinRole1.ZhanDuiID] = 1;
                    copyData.SideDict[(long)joinRole2.ZhanDuiID] = 2;
                    copyData.BetterZhanDuiID = betterZhanDuiID;
                    copyData.ConfigID        = matchConfig.ID;
                    copyData.JoinGrade       = (int)matchConfig.JoinGrade;
                    copyData.NewGrade        = (int)matchConfig.WillUpGrade;
                    copyData.ServerID        = toServerId;
                    copyData.RoleDict.AddRange(TianTi5v5Service.GetZhanDuiMemberIDs(joinRole1.ZhanDuiID));
                    if (joinRole1.ZhanDuiID != joinRole2.ZhanDuiID)
                    {
                        copyData.RoleDict.AddRange(TianTi5v5Service.GetZhanDuiMemberIDs(joinRole2.ZhanDuiID));
                    }
                    joinRole1.ToServerID   = (joinRole2.ToServerID = toServerId);
                    joinRole1.CurrGameID   = (joinRole2.CurrGameID = gameId);
                    joinRole1.CopyData     = (joinRole2.CopyData = copyData);
                    joinRole1.WaitReqEnter = (joinRole2.WaitReqEnter = true);
                    ZhanDuiZhengBaNtfEnterData data = new ZhanDuiZhengBaNtfEnterData();
                    data.ZhanDuiID1 = joinRole1.ZhanDuiID;
                    data.ZhanDuiID2 = joinRole2.ZhanDuiID;
                    data.ToServerId = toServerId;
                    data.GameId     = gameId;
                    data.Day        = ZhanDuiZhengBa_K.SyncData.RealActID;
                    ZhanDuiZhengBa_K.AsyncEvQ.Enqueue(KFCallMsg.New <ZhanDuiZhengBaNtfEnterData>(KuaFuEventTypes.ZhanDuiZhengBa_NotifyEnter, data));
                    LogManager.WriteLog(LogTypes.Info, string.Format("战队争霸第{0}轮战队成员通知入场,zhanduiID1={1},zhanduiID2={2}", ZhanDuiZhengBa_K.SyncData.RealActID, joinRole1.ZhanDuiID, joinRole2.ZhanDuiID), null, true);
                    ZhanDuiZhengBaPkLogData log = new ZhanDuiZhengBaPkLogData();
                    log.Month           = ZhanDuiZhengBa_K.SyncData.Month;
                    log.ID              = ZhanDuiZhengBa_K.SyncData.RealActID;
                    log.ZhanDuiID1      = joinRole1.ZhanDuiID;
                    log.ZoneID1         = joinRole1.ZoneId;
                    log.ZhanDuiName1    = joinRole1.RoleName;
                    log.ZhanDuiID2      = joinRole2.ZhanDuiID;
                    log.ZoneID2         = joinRole2.ZoneId;
                    log.ZhanDuiName2    = joinRole2.RoleName;
                    log.StartTime       = now;
                    log.BetterZhanDuiID = betterZhanDuiID;
                    log.GameID          = (long)gameId;
                    ZhanDuiZhengBa_K.ThisLoopPkLogs[gameId] = log;
                    result = true;
                }
                else
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("战队争霸第{0}轮分配游戏服务器失败,zhanduiID1={1},zhanduiID2={2}", ZhanDuiZhengBa_K.SyncData.RealActID, joinRole1.ZhanDuiID, joinRole2.ZhanDuiID), null, true);
                    result = false;
                }
            }
            return(result);
        }
        public ZhanDuiZhengBaSyncData LoadZhengBaSyncData(DateTime now, int selectRoleIfNewCreate)
        {
            ZhanDuiZhengBaSyncData syncData = new ZhanDuiZhengBaSyncData();

            syncData.Month = ZhengBaUtils.MakeMonth(now);
            syncData.IsThisMonthInActivity = false;
            List <ZhanDuiZhengBaZhanDuiData> rankList    = new List <ZhanDuiZhengBaZhanDuiData>();
            List <ZhanDuiZhengBaZhanDuiData> zhanDuiList = new List <ZhanDuiZhengBaZhanDuiData>();
            List <ZhanDuiZhengBaPkLogData>   pkLogList   = new List <ZhanDuiZhengBaPkLogData>();

            if (KuaFuServerManager.IsGongNengOpened(113))
            {
                TianTi5v5RankData rankData = TianTi5v5Service.ZhanDuiGetRankingData(DateTime.MinValue);
                bool bMonthFirst           = this.CheckZhengBaRank(selectRoleIfNewCreate, syncData.Month);
                if (bMonthFirst)
                {
                    syncData.IsThisMonthInActivity = true;
                }
                else if (syncData.Month == ZhengBaUtils.MakeMonth(rankData.ModifyTime) && rankData.MonthPaiHangList.Count > ZhanDuiZhengBaConsts.MinZhanDuiNum)
                {
                    syncData.IsThisMonthInActivity = true;
                    int[] groupArray = MathEx.MatchGroupBinary(64);
                    int   i          = 0;
                    while (i < 64 && i < rankData.MonthPaiHangList.Count)
                    {
                        int group = Array.IndexOf <int>(groupArray, i + 1) + 1;
                        TianTi5v5ZhanDuiData      data    = rankData.MonthPaiHangList[i];
                        ZhanDuiZhengBaZhanDuiData zhandui = new ZhanDuiZhengBaZhanDuiData
                        {
                            ZhanDuiName = data.ZhanDuiName,
                            ZhanDuiID   = data.ZhanDuiID,
                            ZhanLi      = (long)((int)data.ZhanDouLi),
                            DuanWeiId   = data.DuanWeiId,
                            DuanWeiRank = data.DuanWeiRank,
                            ZoneId      = data.ZoneID,
                            MemberList  = new List <RoleOccuNameZhanLi>(),
                            Group       = group
                        };
                        foreach (TianTi5v5ZhanDuiRoleData a in data.teamerList)
                        {
                            if (a.RoleID == data.LeaderRoleID)
                            {
                                zhandui.MemberList.Insert(0, new RoleOccuNameZhanLi
                                {
                                    RoleName   = a.RoleName,
                                    Occupation = a.RoleOcc,
                                    ZhanLi     = a.ZhanLi
                                });
                            }
                            else
                            {
                                zhandui.MemberList.Add(new RoleOccuNameZhanLi
                                {
                                    RoleName   = a.RoleName,
                                    Occupation = a.RoleOcc,
                                    ZhanLi     = a.ZhanLi
                                });
                            }
                        }
                        rankList.Add(zhandui);
                        i++;
                    }
                    if (!this.BuildZhengBaRank(syncData.Month, rankList))
                    {
                        LogManager.WriteLog(LogTypes.Fatal, "生成并写入战队争霸64强数据失败!", null, true);
                        syncData.IsThisMonthInActivity = false;
                    }
                }
                if (syncData.IsThisMonthInActivity)
                {
                    zhanDuiList = this.LoadZhengBaRankData(syncData.Month);
                    pkLogList   = this.LoadPkLogList(syncData.Month);
                }
            }
            syncData.ZhanDuiList = zhanDuiList;
            syncData.PKLogList   = pkLogList;
            syncData.RoleModTime = now;
            return(syncData);
        }