コード例 #1
0
 public static void Update()
 {
     if (ZhanDuiZhengBa_K.Initialize)
     {
         DateTime now = TimeUtil.NowDateTime();
         if (now.Day != ZhanDuiZhengBa_K.lastUpdateTime.Day)
         {
             ZhanDuiZhengBa_K.FixSyncData(now);
         }
         else
         {
             lock (ZhanDuiZhengBa_K.Mutex)
             {
                 ZhanDuiZhengBa_K.StateMachine.Tick(now);
             }
         }
         KFCallMsg[] asyncEvArray = null;
         lock (ZhanDuiZhengBa_K.Mutex)
         {
             asyncEvArray = ZhanDuiZhengBa_K.AsyncEvQ.ToArray();
             ZhanDuiZhengBa_K.AsyncEvQ.Clear();
         }
         foreach (KFCallMsg msg in asyncEvArray)
         {
             ClientAgentManager.Instance().BroadCastMsg(msg, 0);
         }
         ZhanDuiZhengBa_K.lastUpdateTime = now;
     }
 }
コード例 #2
0
ファイル: KFServiceBase.cs プロジェクト: qiuhoude/mu_server
        public static bool InitializeClient(AutoCSer.Net.TcpInternalServer.ServerSocketSender socket, KuaFuClientContext clientInfo)
        {
            bool isLogin = false;

            try
            {
                if (clientInfo.ServerId != 0)
                {
                    bool bFirstInit = false;
                    int  ret        = ClientAgentManager.Instance().InitializeClient(clientInfo, out bFirstInit);
                    if (ret > 0)
                    {
                        isLogin             = true;
                        socket.ClientObject = ClientAgentManager.Instance().GetCurrentClientAgent(clientInfo.ServerId);
                        if (clientInfo.MapClientCountDict != null && clientInfo.MapClientCountDict.Count > 0)
                        {
                            KuaFuServerManager.UpdateKuaFuLineData(clientInfo.ServerId, clientInfo.MapClientCountDict);
                            ClientAgentManager.Instance().SetMainlinePayload(clientInfo.ServerId, clientInfo.MapClientCountDict.Values.ToList <int>().Sum());
                        }
                    }
                }
                else
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("InitializeClient时GameType错误,禁止连接.ServerId:{0},GameType:{1}", clientInfo.ServerId, clientInfo.GameType), null, true);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(string.Format("InitializeClient服务器ID重复,禁止连接.ServerId:{0},ClientId:{1},info:{2}", clientInfo.ServerId, clientInfo.ClientId, clientInfo.Token));
            }
            return(isLogin);
        }
コード例 #3
0
 public static void NotifyFuBenRoleEnterGame(KuaFu5v5FuBenData fuBenData)
 {
     try
     {
         lock (fuBenData)
         {
             List <int> serverIDs = new List <int>();
             foreach (KuaFuFuBenRoleData role in fuBenData.RoleDict.Values)
             {
                 if (!serverIDs.Contains(role.ServerId))
                 {
                     serverIDs.Add(role.ServerId);
                     AsyncDataItem evItem = new AsyncDataItem(KuaFuEventTypes.KuaFu5v5UpdateAndNotifyEnterGame, new object[]
                     {
                         fuBenData
                     });
                     ClientAgentManager.Instance().PostAsyncEvent(role.ServerId, TianTi5v5Service.ChannelGameType, evItem);
                 }
             }
         }
     }
     catch (Exception ex)
     {
     }
 }
コード例 #4
0
        public static void RemoveGameFuBen(KuaFu5v5FuBenData KuaFu5v5FuBenData)
        {
            int gameId = KuaFu5v5FuBenData.GameId;
            KuaFu5v5FuBenData KuaFu5v5FuBenDataTemp;

            if (TianTi5v5Service.FuBenDataDict.TryRemove(gameId, out KuaFu5v5FuBenDataTemp))
            {
                KuaFu5v5FuBenDataTemp.State = GameFuBenState.End;
            }
            ClientAgentManager.Instance().RemoveKfFuben(TianTi5v5Service.GameType, KuaFu5v5FuBenData.ServerId, (long)KuaFu5v5FuBenData.GameId);
            lock (KuaFu5v5FuBenData)
            {
                foreach (KeyValuePair <int, int> kv in KuaFu5v5FuBenData.ZhanDuiDict)
                {
                    KF5v5PiPeiTeam team;
                    if (TianTi5v5Service.PiPeiDict.TryGetValue(kv.Key, out team))
                    {
                        if (team.GameId == gameId && team.State >= 3)
                        {
                            team.State = 0;
                        }
                    }
                }
            }
        }
コード例 #5
0
 public static void Update()
 {
     if (EscapeBattle_K.Initialize)
     {
         DateTime now        = TimeUtil.NowDateTime();
         TimeSpan timeOfWeek = TimeUtil.TimeOfWeek(now);
         bool     open       = false;
         lock (EscapeBattle_K.Mutex)
         {
             List <TimeSpan> list = EscapeBattle_K._Config.MatchConfigList[0].TimePoints;
             for (int i = 0; i < list.Count - 1; i += 2)
             {
                 if (list[i] <= timeOfWeek && timeOfWeek < list[i + 1])
                 {
                     open = true;
                     break;
                 }
             }
             if (EscapeBattle_K.SyncData.State != open)
             {
                 EscapeBattle_K.SyncData.State = open;
             }
             int nowSecs = (int)now.TimeOfDay.TotalSeconds;
             if (nowSecs / EscapeBattleConsts.BattleSignSecs != EscapeBattle_K.LastMatchMinute / EscapeBattleConsts.BattleSignSecs)
             {
                 EscapeBattle_K.LastMatchMinute = nowSecs;
                 EscapeBattle_K.PrepareMatchList();
             }
             EscapeBattle_K.PrepareGameFuBen(now);
             if (open)
             {
                 if (!EscapeBattle_K.NeedUpdateRank)
                 {
                     EscapeBattle_K.NeedUpdateRank = true;
                 }
             }
             else if ((EscapeBattle_K.NeedUpdateRank && EscapeBattle_K.ThisLoopPkLogs.Count == 0) || EscapeBattle_K.lastUpdateTime.Day != now.Day)
             {
                 EscapeBattle_K.NeedUpdateRank = false;
                 EscapeBattle_K.LoadSyncData(now, true);
             }
             EscapeBattle_K.ClearTimeOverGameFuBen(now);
         }
         KFCallMsg[] asyncEvArray = null;
         lock (EscapeBattle_K.Mutex)
         {
             asyncEvArray = EscapeBattle_K.AsyncEvQ.ToArray();
             EscapeBattle_K.AsyncEvQ.Clear();
         }
         foreach (KFCallMsg msg in asyncEvArray)
         {
             ClientAgentManager.Instance().BroadCastMsg(msg, 0);
         }
         EscapeBattle_K.lastUpdateTime = now;
     }
 }
コード例 #6
0
ファイル: KFServiceBase.cs プロジェクト: qiuhoude/mu_server
        public static void UpdateKuaFuMapClientCount(AutoCSer.Net.TcpInternalServer.ServerSocketSender socket, int serverId, Dictionary <int, int> mapClientCountDict)
        {
            ClientAgent agent = socket.ClientObject as ClientAgent;

            if (mapClientCountDict != null && mapClientCountDict.Count > 0)
            {
                KuaFuServerManager.UpdateKuaFuLineData(agent.ClientInfo.ServerId, mapClientCountDict);
                ClientAgentManager.Instance().SetMainlinePayload(agent.ClientInfo.ServerId, mapClientCountDict.Values.ToList <int>().Sum());
            }
        }
コード例 #7
0
ファイル: Zork5v5Service.cs プロジェクト: qiuhoude/mu_server
 private void HandleUnCompleteFuBenData()
 {
     foreach (KeyValuePair <int, KuaFu5v5FuBenData> fubenItem in this.FuBenDataDict)
     {
         KuaFu5v5FuBenData fubenData = fubenItem.Value;
         ClientAgentManager.Instance().RemoveKfFuben(this.GameType, fubenData.ServerId, (long)fubenData.GameId);
     }
     this.FuBenDataDict.Clear();
     this.ZhanDuiIDVsGameIDDict.Clear();
 }
コード例 #8
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);
        }
コード例 #9
0
ファイル: Zork5v5Service.cs プロジェクト: qiuhoude/mu_server
        public int GameFuBenComplete_ZorkBattle(ZorkBattleStatisticalData data)
        {
            int result = 0;

            try
            {
                lock (this.Mutex)
                {
                    KuaFu5v5FuBenData fubenData;
                    if (!this.FuBenDataDict.TryGetValue(data.GameId, out fubenData))
                    {
                        result = -4000;
                        return(result);
                    }
                    ClientAgentManager.Instance().RemoveKfFuben(this.GameType, fubenData.ServerId, (long)data.GameId);
                    this.FuBenDataDict.Remove(data.GameId);
                    foreach (KeyValuePair <int, int> item in fubenData.ZhanDuiDict)
                    {
                        this.ZhanDuiIDVsGameIDDict.Remove(item.Key);
                    }
                    foreach (KeyValuePair <int, TianTi5v5ZhanDuiData> item2 in data.ZhanDuiDict)
                    {
                        TianTi5v5ZhanDuiData zhanduiData = item2.Value;
                        TianTi5v5Service.UpdateZorkZhanDuiData(zhanduiData);
                    }
                    foreach (ZorkBattleRoleInfo client in data.ClientContextDataList)
                    {
                        this.Persistence.UpdateZorkBattleRoleData(client, true);
                    }
                    string zhanduiIdArray = string.Join <int>("|", data.ZhanDuiDict.Keys.ToArray <int>());
                    string strLog         = string.Format("Zork::GameFuBenComplete_ZorkBattle SeasonID:{0} GameID:{1} ZhanDuiIDWin:{2} ZhanDuiID:{3} Round:{2} ZhanDuiInfo:", new object[]
                    {
                        this.CurrentSeasonID,
                        data.GameId,
                        data.ZhanDuiIDWin,
                        zhanduiIdArray,
                        this.CurrentRound
                    });
                    foreach (KeyValuePair <int, TianTi5v5ZhanDuiData> item2 in data.ZhanDuiDict)
                    {
                        TianTi5v5ZhanDuiData zhanduiData = item2.Value;
                        strLog += string.Format(" [ZhanDuiID:{0} JiFen:{1}]", item2.Key, zhanduiData.ZorkJiFen);
                    }
                    LogManager.WriteLog(LogTypes.Analysis, strLog, null, true);
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result = -11;
                LogManager.WriteLog(LogTypes.Error, "Zork5v5Service.GameFuBenComplete_ZorkBattle failed!", ex, true);
            }
            return(result);
        }
コード例 #10
0
ファイル: Zork5v5Service.cs プロジェクト: qiuhoude/mu_server
        private void AssginKfFuben(KuaFu5v5FuBenData fubenData)
        {
            int toServerId = 0;
            int gameId     = 0;

            gameId = TianTiPersistence.Instance.GetNextGameId();
            int roleNum = fubenData.ZhanDuiDict.Count * 5;

            if (ClientAgentManager.Instance().AssginKfFuben(this.GameType, (long)gameId, roleNum, out toServerId))
            {
                fubenData.ServerId         = toServerId;
                fubenData.GameId           = gameId;
                fubenData.GameType         = (int)this.GameType;
                fubenData.LoginInfo        = KuaFuServerManager.GetKuaFuLoginInfo(0, toServerId);
                this.FuBenDataDict[gameId] = fubenData;
                foreach (int zhanDuiID in fubenData.ZhanDuiDict.Keys)
                {
                    this.ZhanDuiIDVsGameIDDict[zhanDuiID] = gameId;
                    KF5v5PiPeiTeam kuaFuRoleDataTemp;
                    if (this.PiPeiDict.TryGetValue(zhanDuiID, out kuaFuRoleDataTemp))
                    {
                        kuaFuRoleDataTemp.GameId = fubenData.GameId;
                    }
                }
                string zhanduiIdArray = string.Join <int>("|", fubenData.ZhanDuiDict.Keys.ToArray <int>());
                LogManager.WriteLog(LogTypes.Analysis, string.Format("Zork::分组 SeasonID:{0} gameId:{1} zhanduiId:{2} Round:{3}", new object[]
                {
                    this.CurrentSeasonID,
                    gameId,
                    zhanduiIdArray,
                    this.CurrentRound
                }), null, true);
            }
            else
            {
                string zhanduiIdArray = string.Join <int>("|", fubenData.ZhanDuiDict.Keys.ToArray <int>());
                LogManager.WriteLog(LogTypes.Analysis, string.Format("Zork::分配游戏服务器失败 SeasonID:{0} gameId:{1} zhanduiId:{2} Round:{3}", new object[]
                {
                    this.CurrentSeasonID,
                    gameId,
                    zhanduiIdArray,
                    this.CurrentRound
                }), null, true);
            }
        }
コード例 #11
0
        private static void ZhanDuiChangeState(EscapeBattle_K.JoinPkData pkData, int state)
        {
            int zhanDuiState = 0;

            if (state >= 5)
            {
                pkData.InGame = false;
                zhanDuiState  = 0;
            }
            pkData.State = zhanDuiState;
            int sid = KuaFuServerManager.GetServerIDFromZoneID(pkData.ZoneId);

            ClientAgentManager.Instance().SendMsg(sid, KFCallMsg.New <int[]>(KuaFuEventTypes.EscapeBattle_GameState, new int[]
            {
                pkData.ZhanDuiID,
                pkData.CurrGameID,
                zhanDuiState
            }));
        }
コード例 #12
0
 public static void ThreadProc(object state)
 {
     if (TianTi5v5Service.ThreadInit)
     {
         try
         {
             DateTime now = TimeUtil.NowDateTime();
             Global.UpdateNowTime(now);
             if (now > TianTi5v5Service.CheckRoleTimerProcTime)
             {
                 TianTi5v5Service.CheckRoleTimerProcTime = now.AddSeconds(1.428);
                 int signUpCnt;
                 int startCnt;
                 TianTi5v5Service.CheckRoleTimerProc(now, out signUpCnt, out startCnt);
                 ClientAgentManager.Instance().SetGameTypeLoad(TianTi5v5Service.GameType, signUpCnt, startCnt);
             }
             if (now > TianTi5v5Service.SaveServerStateProcTime)
             {
                 TianTi5v5Service.SaveServerStateProcTime = now.AddSeconds(30.0);
                 if (now.Hour >= 3 && now.Hour < 4)
                 {
                     TianTi5v5Service.ClearRolePairFightCount();
                     TianTi5v5Service.UpdateZhanDuiRankData(now, false);
                     ZhanDuiZhengBa_K.LoadSyncData(now, false);
                 }
             }
             if (now > TianTi5v5Service.CheckGameFuBenTime)
             {
                 TianTi5v5Service.CheckGameFuBenTime = now.AddSeconds(1000.0);
                 TianTi5v5Service.CheckGameFuBenTimerProc(now);
             }
             TianTi5v5Service.Persistence.DelayWriteDataProc();
         }
         catch (Exception ex)
         {
             LogManager.WriteExceptionUseCache(ex.ToString());
         }
     }
 }
コード例 #13
0
        private static void ClearTimeOverGameFuBen(DateTime now)
        {
            List <int> PkLogsRemoveList = new List <int>();

            foreach (int gameID in EscapeBattle_K.ThisLoopPkLogs.Keys.ToList <int>())
            {
                EscapeBattlePkLogData log;
                if (EscapeBattle_K.ThisLoopPkLogs.TryGetValue(gameID, out log))
                {
                    if (log.EndTime < now || log.State >= 7)
                    {
                        List <int> scoreList = new List <int>();
                        foreach (int zhanDuiID in log.ZhanDuiIDs)
                        {
                            scoreList.Add(zhanDuiID);
                            scoreList.Add(int.MinValue);
                        }
                        try
                        {
                            EscapeBattle_K.GameResult(gameID, scoreList);
                        }
                        catch (Exception ex)
                        {
                            LogManager.WriteException(ex.ToString());
                            PkLogsRemoveList.Add(log.GameID);
                        }
                    }
                }
            }
            foreach (int gameid in PkLogsRemoveList)
            {
                EscapeBattlePkLogData log;
                if (EscapeBattle_K.ThisLoopPkLogs.TryGetValue(gameid, out log))
                {
                    EscapeBattle_K.ThisLoopPkLogs.Remove(gameid);
                    ClientAgentManager.Instance().RemoveKfFuben(EscapeBattle_K.GameType, log.ToServerID, (long)log.GameID);
                }
            }
        }
コード例 #14
0
        private static void MS_PkLoopEnd_Update(DateTime now)
        {
            ZhanDuiZhengBaMatchConfig matchConfig = ZhanDuiZhengBa_K._Config.MatchConfigList.Find((ZhanDuiZhengBaMatchConfig _m) => _m.ID == ZhanDuiZhengBa_K.SyncData.RealActID);

            if (now.TimeOfDay.Ticks >= matchConfig.DayBeginTick + 10000000L * (long)(matchConfig.WaitSeconds + matchConfig.FightSeconds + matchConfig.ClearSeconds))
            {
                foreach (ZhanDuiZhengBaPkLogData kvp in ZhanDuiZhengBa_K.ThisLoopPkLogs.Values.ToList <ZhanDuiZhengBaPkLogData>())
                {
                    ZhanDuiZhengBa_K.ZhengBaPkResult((int)kvp.GameID, kvp.BetterZhanDuiID);
                }
                ZhanDuiZhengBa_K.ThisLoopPkLogs.Clear();
                foreach (ZhanDuiZhengBa_K.JoinRolePkData role in ZhanDuiZhengBa_K.TodayJoinRoleDatas)
                {
                    if (role.CurrGameID > 0 || role.ToServerID > 0)
                    {
                        ClientAgentManager.Instance().RemoveKfFuben(ZhanDuiZhengBa_K.GameType, role.ToServerID, (long)role.CurrGameID);
                    }
                    role.ToServerID = 0;
                    role.CurrGameID = 0;
                }
                ZhanDuiZhengBa_K.StateMachine.SetCurrState(3, now);
            }
        }
コード例 #15
0
ファイル: Zork5v5Service.cs プロジェクト: qiuhoude/mu_server
        private void MS_NotifyEnter_Update(DateTime now, int param)
        {
            ZorkBattleSceneInfo matchConfig = this.SceneDataDict.Values.FirstOrDefault <ZorkBattleSceneInfo>();

            Zork5v5StateMachine.StateType GameState = Zork5v5StateMachine.StateType.None;
            for (int i = 0; i < matchConfig.TimePoints.Count - 1; i += 2)
            {
                if (now.DayOfWeek == (DayOfWeek)matchConfig.TimePoints[i].Days)
                {
                    int RoundSeconds  = matchConfig.BattleSignSecs + matchConfig.PrepareSecs + matchConfig.FightingSecs + matchConfig.ClearRolesSecs;
                    int MatchPerRound = (int)(matchConfig.SecondsOfDay[i + 1] - matchConfig.SecondsOfDay[i]) / RoundSeconds;
                    for (int matchloop = 0; matchloop < MatchPerRound; matchloop++)
                    {
                        int signSeconds  = (int)matchConfig.SecondsOfDay[i] + RoundSeconds * matchloop;
                        int startSeconds = signSeconds + matchConfig.BattleSignSecs;
                        int endSeconds   = startSeconds + RoundSeconds - matchConfig.BattleSignSecs;
                        if ((double)startSeconds <= now.TimeOfDay.TotalSeconds && now.TimeOfDay.TotalSeconds < (double)endSeconds)
                        {
                            GameState = Zork5v5StateMachine.StateType.GameStart;
                        }
                    }
                }
            }
            if (GameState == Zork5v5StateMachine.StateType.GameStart)
            {
                foreach (KuaFu5v5FuBenData item in this.FuBenDataDict.Values)
                {
                    KuaFu5v5FuBenData SyncData = item;
                    ClientAgentManager.Instance().BroadCastAsyncEvent(this.EvItemGameType, new AsyncDataItem(KuaFuEventTypes.Zork5v5NtfEnter, new object[]
                    {
                        SyncData
                    }), 0);
                }
                this.StateMachine.SetCurrState(GameState, now, param);
                LogManager.WriteLog(LogTypes.Analysis, string.Format("Zork::MS_NotifyEnter_Update To:{0} SeasonID:{1} Round:{2}", GameState, this.CurrentSeasonID, this.CurrentRound), null, true);
            }
        }
コード例 #16
0
ファイル: BocaiBase.cs プロジェクト: qiuhoude/mu_server
 public void KFSendPeriodsData()
 {
     ClientAgentManager.Instance().BroadCastMsg(KFCallMsg.New <OpenLottery>(KuaFuEventTypes.BoCaiPeriodsData, this.GetOpenLottery()), 0);
 }
コード例 #17
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);
        }
コード例 #18
0
        public static bool AssignGameFuben(KF5v5PiPeiTeam kuaFuRoleData, RangeKey range, DateTime now)
        {
            int      roleCount    = 0;
            DateTime stateEndTime = now.AddSeconds((double)TianTi5v5Service.EnterGameSecs);
            List <KuaFuFuBenRoleData> updateRoleDataList = new List <KuaFuFuBenRoleData>();
            KuaFu5v5FuBenData         KuaFu5v5FuBenData  = new KuaFu5v5FuBenData();
            int            side = 0;
            int            removeZhanDuiIDFromPiPeiList = 0;
            KF5v5PiPeiTeam team = kuaFuRoleData;

            if (Consts.TianTiRoleCountTotal > 1)
            {
                foreach (Tuple <KF5v5PiPeiTeam, int, int, int> z in TianTi5v5Service.ProcessPiPeiList)
                {
                    if (z.Item2 >= range.Left && z.Item2 <= range.Right)
                    {
                        if (kuaFuRoleData.GroupIndex >= z.Item3 && kuaFuRoleData.GroupIndex <= z.Item4)
                        {
                            if (TianTi5v5Service.CanAddFuBenRole(kuaFuRoleData.TeamID, z.Item1.TeamID))
                            {
                                removeZhanDuiIDFromPiPeiList = z.Item1.TeamID;
                                team = z.Item1;
                                if (KuaFu5v5FuBenData.AddZhanDui(team.TeamID, ref roleCount, ref side))
                                {
                                    TianTi5v5ZhanDuiData teamData;
                                    if (TianTi5v5Service.ZhanDuiDict.TryGetValue(team.TeamID, out teamData))
                                    {
                                        foreach (TianTi5v5ZhanDuiRoleData role in teamData.teamerList)
                                        {
                                            KuaFuFuBenRoleData kuaFuFuBenRoleData = new KuaFuFuBenRoleData
                                            {
                                                ServerId = team.ServerID,
                                                RoleId   = role.RoleID,
                                                Side     = side
                                            };
                                            KuaFu5v5FuBenData.AddKuaFuFuBenRoleData(kuaFuFuBenRoleData, team.TeamID);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (removeZhanDuiIDFromPiPeiList == 0)
                {
                    TianTi5v5Service.ProcessPiPeiList.Add(new Tuple <KF5v5PiPeiTeam, int, int, int>(kuaFuRoleData, kuaFuRoleData.GroupIndex, range.Left, range.Right));
                    return(true);
                }
                TianTi5v5Service.ProcessPiPeiList.RemoveAll((Tuple <KF5v5PiPeiTeam, int, int, int> x) => x.Item1.TeamID == removeZhanDuiIDFromPiPeiList);
                TianTi5v5Service.ProcessPiPeiList.RemoveAll((Tuple <KF5v5PiPeiTeam, int, int, int> x) => x.Item1.TeamID == kuaFuRoleData.TeamID);
            }
            team = kuaFuRoleData;
            if (KuaFu5v5FuBenData.AddZhanDui(team.TeamID, ref roleCount, ref side))
            {
                TianTi5v5ZhanDuiData teamData;
                if (TianTi5v5Service.ZhanDuiDict.TryGetValue(team.TeamID, out teamData))
                {
                    foreach (TianTi5v5ZhanDuiRoleData role in teamData.teamerList)
                    {
                        KuaFuFuBenRoleData kuaFuFuBenRoleData = new KuaFuFuBenRoleData
                        {
                            ServerId = team.ServerID,
                            RoleId   = role.RoleID,
                            Side     = side
                        };
                        KuaFu5v5FuBenData.AddKuaFuFuBenRoleData(kuaFuFuBenRoleData, team.TeamID);
                    }
                }
            }
            try
            {
                int  kfSrvId       = 0;
                int  gameId        = TianTi5v5Service.Persistence.GetNextGameId();
                bool createSuccess = ClientAgentManager.Instance().AssginKfFuben(TianTi5v5Service.GameType, (long)gameId, roleCount, out kfSrvId);
                if (createSuccess)
                {
                    KuaFu5v5FuBenData.ServerId  = kfSrvId;
                    KuaFu5v5FuBenData.GameId    = gameId;
                    KuaFu5v5FuBenData.GameType  = (int)TianTi5v5Service.GameType;
                    KuaFu5v5FuBenData.EndTime   = Global.NowTime.AddMinutes(8.0);
                    KuaFu5v5FuBenData.LoginInfo = KuaFuServerManager.GetKuaFuLoginInfo(kuaFuRoleData.ServerID, kfSrvId);
                    TianTi5v5Service.AddGameFuBen(KuaFu5v5FuBenData);
                    TianTi5v5Service.Persistence.LogCreateTianTiFuBen(KuaFu5v5FuBenData.GameId, KuaFu5v5FuBenData.ServerId, 0, roleCount);
                    foreach (int zhanDuiID in KuaFu5v5FuBenData.ZhanDuiDict.Keys)
                    {
                        KF5v5PiPeiTeam kuaFuRoleDataTemp;
                        if (TianTi5v5Service.PiPeiDict.TryGetValue(zhanDuiID, out kuaFuRoleDataTemp))
                        {
                            kuaFuRoleDataTemp.State         = 3;
                            kuaFuRoleDataTemp.StateEndTicks = stateEndTime.Ticks;
                            kuaFuRoleDataTemp.GameId        = KuaFu5v5FuBenData.GameId;
                        }
                    }
                    KuaFu5v5FuBenData.State = GameFuBenState.Start;
                    TianTi5v5Service.NotifyFuBenRoleEnterGame(KuaFu5v5FuBenData);
                    TianTi5v5Service.AddRolePairFightCount(KuaFu5v5FuBenData);
                    return(true);
                }
                return(false);
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }
            return(false);
        }
コード例 #19
0
ファイル: BocaiBase.cs プロジェクト: qiuhoude/mu_server
 public void KFSendStageData()
 {
     ClientAgentManager.Instance().BroadCastMsg(KFCallMsg.New <KFStageData>(KuaFuEventTypes.BoCaiStageChange, this.GetKFStageData()), 0);
 }
コード例 #20
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);
        }
コード例 #21
0
 private static void UpDateTick(object sender)
 {
     try
     {
         char[] ChArray = new char[]
         {
             'A',
             'B',
             'C',
             'D',
             'E',
             'F',
             'G',
             'H',
             'J',
             'K',
             'L',
             'M',
             'N',
             'P',
             'Q',
             'R',
             'S',
             'T',
             'W',
             'V',
             'U',
             'X',
             'Y',
             'Z'
         };
         string str = "";
         for (int i = 0; i < (int)sender; i++)
         {
             str += ChArray[i % ChArray.Length];
         }
         long allnum = 0L;
         long sunum  = 0L;
         while (TestS2KFCommunication.Flag)
         {
             allnum += 1L;
             if (allnum > 50000L)
             {
                 break;
             }
             try
             {
                 ClientAgentManager.Instance().BroadCastMsg(KFCallMsg.New <string>(KuaFuEventTypes.Test, str), 0);
                 sunum += 1L;
             }
             catch (Exception ex)
             {
                 LogManager.WriteException(ex.ToString());
                 Console.WriteLine("UpDateTick Exception");
             }
         }
         Console.WriteLine(string.Format("发送allnum={0}, sunum={1}", allnum - 1L, sunum));
     }
     catch (Exception ex)
     {
         LogManager.WriteException(ex.ToString());
         Console.WriteLine("UpDateTick Exception");
     }
 }
コード例 #22
0
ファイル: KFServiceBase.cs プロジェクト: qiuhoude/mu_server
 public static void TimerProc()
 {
     ClientAgentManager.Instance().SendAsyncKuaFuMsg();
 }