Esempio n. 1
0
        public int GameFuBenChangeState(int gameId, GameFuBenState state, DateTime time)
        {
            int             result          = -11;
            TianTiFuBenData tianTiFuBenData = null;
            int             result2;

            if (this.TianTiFuBenDataDict.TryGetValue(gameId, out tianTiFuBenData))
            {
                this.AddRolePairFightCount(tianTiFuBenData);
                lock (tianTiFuBenData)
                {
                    tianTiFuBenData.State = state;
                    if (state == GameFuBenState.End)
                    {
                        this.RemoveGameFuBen(tianTiFuBenData);
                    }
                }
                result2 = result;
            }
            else
            {
                result2 = -20;
            }
            return(result2);
        }
Esempio n. 2
0
 private void NotifyFuBenRoleCount(TianTiFuBenData fuBenData)
 {
     try
     {
         lock (fuBenData)
         {
             int roleCount = fuBenData.RoleDict.Count;
             foreach (KuaFuFuBenRoleData role in fuBenData.RoleDict.Values)
             {
                 KuaFuRoleData kuaFuRoleData;
                 if (this.RoleIdKuaFuRoleDataDict.TryGetValue(KuaFuRoleKey.Get(role.ServerId, role.RoleId), out kuaFuRoleData))
                 {
                     AsyncDataItem evItem = new AsyncDataItem(KuaFuEventTypes.NotifyWaitingRoleCount, new object[]
                     {
                         kuaFuRoleData.RoleId,
                         roleCount
                     });
                     ClientAgentManager.Instance().PostAsyncEvent(kuaFuRoleData.ServerId, this.GameType, evItem);
                 }
             }
         }
     }
     catch
     {
     }
 }
Esempio n. 3
0
        private void AddRolePairFightCount(TianTiFuBenData tianTiFuBenData)
        {
            int roleId1 = 0;
            int roleId2 = 0;

            if (tianTiFuBenData.RoleDict.Count >= 2)
            {
                foreach (var role in tianTiFuBenData.RoleDict.Values)
                {
                    if (roleId1 == 0)
                    {
                        roleId1 = role.RoleId;
                    }
                    else
                    {
                        roleId2 = role.RoleId;
                    }
                }

                long rolePairKey = MakeRolePairKey(roleId1, roleId2);

                int fightCount;
                lock (RolePairFightCountDict)
                {
                    if (!RolePairFightCountDict.TryGetValue(rolePairKey, out fightCount))
                    {
                        RolePairFightCountDict[rolePairKey] = 1;
                    }
                    else
                    {
                        RolePairFightCountDict[rolePairKey] = fightCount + 1;
                    }
                }
            }
        }
Esempio n. 4
0
        private void AddRolePairFightCount(TianTiFuBenData tianTiFuBenData)
        {
            int roleId  = 0;
            int roleId2 = 0;

            if (tianTiFuBenData.RoleDict.Count >= 2)
            {
                foreach (KuaFuFuBenRoleData role in tianTiFuBenData.RoleDict.Values)
                {
                    if (roleId == 0)
                    {
                        roleId = role.RoleId;
                    }
                    else
                    {
                        roleId2 = role.RoleId;
                    }
                }
                long rolePairKey = this.MakeRolePairKey(roleId, roleId2);
                lock (this.RolePairFightCountDict)
                {
                    int fightCount;
                    if (!this.RolePairFightCountDict.TryGetValue(rolePairKey, out fightCount))
                    {
                        this.RolePairFightCountDict[rolePairKey] = 1;
                    }
                    else
                    {
                        this.RolePairFightCountDict[rolePairKey] = fightCount + 1;
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 游戏副本状态变更
        /// </summary>
        /// <param name="gameId"></param>
        /// <param name="state"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        public int GameFuBenChangeState(int gameId, GameFuBenState state, DateTime time)
        {
            int result = StdErrorCode.Error_Operation_Faild;

            IKuaFuService   kuaFuService    = null;
            TianTiFuBenData tianTiFuBenData = null;

            if (TianTiFuBenDataDict.TryGetValue(gameId, out tianTiFuBenData))
            {
                AddRolePairFightCount(tianTiFuBenData);
                lock (tianTiFuBenData)
                {
                    tianTiFuBenData.State = state;
                    if (state == GameFuBenState.End)
                    {
                        RemoveGameFuBen(tianTiFuBenData);
                    }
                }
            }
            else
            {
                return(StdErrorCode.Error_Not_Exist);
            }

            return(result);
        }
Esempio n. 6
0
        private void RemoveGameFuBen(TianTiFuBenData tianTiFuBenData)
        {
            int             gameId = tianTiFuBenData.GameId;
            TianTiFuBenData tianTiFuBenDataTemp;

            if (this.TianTiFuBenDataDict.TryRemove(gameId, out tianTiFuBenDataTemp))
            {
                tianTiFuBenDataTemp.State = GameFuBenState.End;
            }
            ClientAgentManager.Instance().RemoveKfFuben(this.GameType, tianTiFuBenData.ServerId, (long)tianTiFuBenData.GameId);
            lock (tianTiFuBenData)
            {
                foreach (KuaFuFuBenRoleData fuBenRoleData in tianTiFuBenData.RoleDict.Values)
                {
                    KuaFuRoleData kuaFuRoleData;
                    if (this.RoleIdKuaFuRoleDataDict.TryGetValue(KuaFuRoleKey.Get(fuBenRoleData.ServerId, fuBenRoleData.RoleId), out kuaFuRoleData))
                    {
                        if (kuaFuRoleData.GameId == gameId)
                        {
                            kuaFuRoleData.State = KuaFuRoleStates.None;
                        }
                    }
                }
            }
        }
Esempio n. 7
0
        public IKuaFuFuBenData GetFuBenData(int gameId)
        {
            TianTiFuBenData kuaFuFuBenData = null;

            if (TianTiFuBenDataDict.TryGetValue(gameId, out kuaFuFuBenData) && kuaFuFuBenData.State < GameFuBenState.End)
            {
                return(kuaFuFuBenData);
            }

            return(null);
        }
Esempio n. 8
0
        public TianTiFuBenData GetFuBenData(int gameId)
        {
            TianTiFuBenData kuaFuFuBenData = null;
            TianTiFuBenData result;

            if (this.TianTiFuBenDataDict.TryGetValue(gameId, out kuaFuFuBenData) && kuaFuFuBenData.State < GameFuBenState.End)
            {
                result = kuaFuFuBenData;
            }
            else
            {
                result = null;
            }
            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// 获取角色所属阵营
        /// </summary>
        /// <param name="gameId"></param>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public int GetRoleBattleWhichSide(int gameId, int roleId)
        {
            TianTiFuBenData TianTiFuBenData = GetKuaFuFuBenData(gameId);

            if (null != TianTiFuBenData && TianTiFuBenData.State < GameFuBenState.End)
            {
                if (TianTiFuBenData.ServerId == ClientInfo.ServerId)
                {
                    KuaFuFuBenRoleData kuaFuFuBenRoleData;
                    if (TianTiFuBenData.RoleDict.TryGetValue(roleId, out kuaFuFuBenRoleData))
                    {
                        return(kuaFuFuBenRoleData.Side);
                    }
                }
            }

            return(0);
        }
Esempio n. 10
0
 private void NotifyFuBenRoleEnterGame(TianTiFuBenData fuBenData)
 {
     try
     {
         lock (fuBenData)
         {
             foreach (var role in fuBenData.RoleDict.Values)
             {
                 KuaFuRoleData kuaFuRoleData;
                 if (RoleIdKuaFuRoleDataDict.TryGetValue(KuaFuRoleKey.Get(role.ServerId, role.RoleId), out kuaFuRoleData) && kuaFuRoleData.State == KuaFuRoleStates.NotifyEnterGame)
                 {
                     AsyncDataItem evItem = new AsyncDataItem(KuaFuEventTypes.UpdateAndNotifyEnterGame, kuaFuRoleData);
                     ClientAgentManager.Instance().PostAsyncEvent(kuaFuRoleData.ServerId, GameType, evItem);
                 }
             }
         }
     }
     catch (System.Exception ex)
     {
     }
 }
Esempio n. 11
0
        /// <summary>
        /// 验证角色是否有本服务器的跨服活动
        /// </summary>
        /// <param name="roleId"></param>
        /// <param name="gameType"></param>
        /// <param name="gameId"></param>
        /// <returns>是否有效</returns>
        public bool KuaFuLogin(KuaFuServerLoginData kuaFuServerLoginData)
        {
            TianTiFuBenData TianTiFuBenData = GetKuaFuFuBenData((int)kuaFuServerLoginData.GameId);

            if (null != TianTiFuBenData && TianTiFuBenData.State < GameFuBenState.End)
            {
                if (TianTiFuBenData.ServerId == ClientInfo.ServerId)
                {
                    if (TianTiFuBenData.RoleDict.ContainsKey(kuaFuServerLoginData.RoleId))
                    {
                        KuaFuRoleData kuaFuRoleData = GetKuaFuRoleDataFromServer(kuaFuServerLoginData.ServerId, kuaFuServerLoginData.RoleId);
                        if (kuaFuRoleData.GameId == TianTiFuBenData.GameId)
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Esempio n. 12
0
        private bool CanAddFuBenRole(TianTiFuBenData tianTiFuBenData, KuaFuRoleData kuaFuRoleData)
        {
            if (tianTiFuBenData.RoleDict.Count == 0)
            {
                return(true);
            }

            KuaFuFuBenRoleData existRole = tianTiFuBenData.RoleDict.Values.FirstOrDefault();
            long rolePairKey             = MakeRolePairKey(kuaFuRoleData.RoleId, existRole.RoleId);

            int fightCount;

            lock (RolePairFightCountDict)
            {
                if (!RolePairFightCountDict.TryGetValue(rolePairKey, out fightCount) || fightCount < Persistence.MaxRolePairFightCount)
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 13
0
        private TianTiFuBenData GetKuaFuFuBenData(int gameId)
        {
            TianTiFuBenData TianTiFuBenData = null;

            if (TianTiFuBenData == null)
            {
                ITianTiService kuaFuService = GetKuaFuService();
                if (null != kuaFuService)
                {
                    try
                    {
                        TianTiFuBenData = (TianTiFuBenData)kuaFuService.GetFuBenData(gameId);
                    }
                    catch (System.Exception ex)
                    {
                        TianTiFuBenData = null;
                    }
                }
            }

            return(TianTiFuBenData);
        }
Esempio n. 14
0
        private bool CanAddFuBenRole(TianTiFuBenData tianTiFuBenData, KuaFuRoleData kuaFuRoleData)
        {
            bool result;

            if (tianTiFuBenData.RoleDict.Count == 0)
            {
                result = true;
            }
            else
            {
                KuaFuFuBenRoleData existRole = tianTiFuBenData.RoleDict.Values.FirstOrDefault <KuaFuFuBenRoleData>();
                long rolePairKey             = this.MakeRolePairKey(kuaFuRoleData.RoleId, existRole.RoleId);
                lock (this.RolePairFightCountDict)
                {
                    int fightCount;
                    if (!this.RolePairFightCountDict.TryGetValue(rolePairKey, out fightCount) || fightCount < this.Persistence.MaxRolePairFightCount)
                    {
                        return(true);
                    }
                }
                result = false;
            }
            return(result);
        }
Esempio n. 15
0
 private void AddGameFuBen(TianTiFuBenData tianTiFuBenData)
 {
     this.TianTiFuBenDataDict[tianTiFuBenData.GameId] = tianTiFuBenData;
 }
Esempio n. 16
0
        private bool AssignGameFuben(KuaFuRoleData kuaFuRoleData, RangeKey range, DateTime now)
        {
            DateTime           stateEndTime       = now.AddSeconds((double)this.EnterGameSecs);
            TianTiFuBenData    tianTiFuBenData    = null;
            KuaFuFuBenRoleData kuaFuFuBenRoleData = new KuaFuFuBenRoleData
            {
                ServerId = kuaFuRoleData.ServerId,
                RoleId   = kuaFuRoleData.RoleId
            };
            List <KuaFuRoleData> updateRoleDataList = new List <KuaFuRoleData>();

            if (!this.ProcessTianTiFuBenDataDict.TryGetValue(range, out tianTiFuBenData))
            {
                tianTiFuBenData = new TianTiFuBenData();
                this.ProcessTianTiFuBenDataDict.Add(range, tianTiFuBenData);
            }
            else if (!this.CanAddFuBenRole(tianTiFuBenData, kuaFuRoleData))
            {
                return(true);
            }
            int  roleCount = tianTiFuBenData.AddKuaFuFuBenRoleData(kuaFuFuBenRoleData);
            bool result;

            if (roleCount < Consts.TianTiRoleCountTotal)
            {
                result = true;
            }
            else
            {
                try
                {
                    int  kfSrvId       = 0;
                    int  gameId        = this.Persistence.GetNextGameId();
                    bool createSuccess = ClientAgentManager.Instance().AssginKfFuben(this.GameType, (long)gameId, roleCount, out kfSrvId);
                    if (createSuccess)
                    {
                        tianTiFuBenData.ServerId = kfSrvId;
                        tianTiFuBenData.GameId   = gameId;
                        tianTiFuBenData.EndTime  = Global.NowTime.AddMinutes(8.0);
                        this.AddGameFuBen(tianTiFuBenData);
                        this.Persistence.LogCreateTianTiFuBen(tianTiFuBenData.GameId, tianTiFuBenData.ServerId, 0, roleCount);
                        foreach (KuaFuFuBenRoleData role in tianTiFuBenData.RoleDict.Values)
                        {
                            KuaFuRoleKey  key = KuaFuRoleKey.Get(role.ServerId, role.RoleId);
                            KuaFuRoleData kuaFuRoleDataTemp;
                            if (this.RoleIdKuaFuRoleDataDict.TryGetValue(key, out kuaFuRoleDataTemp))
                            {
                                kuaFuRoleDataTemp.UpdateStateTime(tianTiFuBenData.GameId, KuaFuRoleStates.NotifyEnterGame, stateEndTime.Ticks);
                            }
                        }
                        tianTiFuBenData.State = GameFuBenState.Start;
                        this.NotifyFuBenRoleEnterGame(tianTiFuBenData);
                        this.ProcessTianTiFuBenDataDict.Remove(range);
                        return(true);
                    }
                    return(false);
                }
                catch (Exception ex)
                {
                    LogManager.WriteExceptionUseCache(ex.ToString());
                }
                result = false;
            }
            return(result);
        }
Esempio n. 17
0
        private bool AssignGameFuben(KuaFuRoleData kuaFuRoleData, RangeKey range, DateTime now)
        {
            int             roleCount       = 0;
            DateTime        stateEndTime    = now.AddSeconds(EnterGameSecs);
            TianTiFuBenData tianTiFuBenData = null;

            KuaFuFuBenRoleData kuaFuFuBenRoleData = new KuaFuFuBenRoleData()
            {
                ServerId = kuaFuRoleData.ServerId,
                RoleId   = kuaFuRoleData.RoleId,
            };

            List <KuaFuRoleData> updateRoleDataList = new List <KuaFuRoleData>();

            if (!ProcessTianTiFuBenDataDict.TryGetValue(range, out tianTiFuBenData))
            {
                tianTiFuBenData = new TianTiFuBenData();
                ProcessTianTiFuBenDataDict.Add(range, tianTiFuBenData);
            }
            else if (!CanAddFuBenRole(tianTiFuBenData, kuaFuRoleData))
            {
                return(true);
            }

            roleCount = tianTiFuBenData.AddKuaFuFuBenRoleData(kuaFuFuBenRoleData);
            if (roleCount < Consts.TianTiRoleCountTotal)
            {
                return(true);
            }

            try
            {
                int  kfSrvId       = 0;
                int  gameId        = Persistence.GetNextGameId();
                bool createSuccess = ClientAgentManager.Instance().AssginKfFuben(GameType, gameId, roleCount, out kfSrvId);
                if (createSuccess)
                {
                    tianTiFuBenData.ServerId = kfSrvId;
                    tianTiFuBenData.GameId   = gameId;
                    tianTiFuBenData.EndTime  = Global.NowTime.AddMinutes(Consts.TianTiGameFuBenMaxExistMinutes);
                    AddGameFuBen(tianTiFuBenData);

                    Persistence.LogCreateTianTiFuBen(tianTiFuBenData.GameId, tianTiFuBenData.ServerId, 0, roleCount);

                    foreach (var role in tianTiFuBenData.RoleDict.Values)
                    {
                        KuaFuRoleData kuaFuRoleDataTemp;
                        KuaFuRoleKey  key = KuaFuRoleKey.Get(role.ServerId, role.RoleId);
                        if (RoleIdKuaFuRoleDataDict.TryGetValue(key, out kuaFuRoleDataTemp))
                        {
                            kuaFuRoleDataTemp.UpdateStateTime(tianTiFuBenData.GameId, KuaFuRoleStates.NotifyEnterGame, stateEndTime.Ticks);
                        }
                    }

                    tianTiFuBenData.State = GameFuBenState.Start;
                    NotifyFuBenRoleEnterGame(tianTiFuBenData);

                    ProcessTianTiFuBenDataDict.Remove(range);
                }
                else
                {
                    //如果分配失败,则返回false,本轮不在尝试分配
                    return(false);
                }

                return(true);
            }
            catch (System.Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(false);
        }
Esempio n. 18
0
        public void EventCallBackHandler(int eventType, params object[] args)
        {
            try
            {
                switch (eventType)
                {
                case (int)KuaFuEventTypes.NotifyWaitingRoleCount:
                {
                    if (args.Length == 2)
                    {
                        int rid   = (int)args[0];
                        int count = (int)args[1];
                        CoreInterface.GetEventSourceInterface().fireEvent(new KuaFuFuBenRoleCountEvent(rid, count), SceneType);
                    }
                }
                break;

                case (int)KuaFuEventTypes.RoleSignUp:
                case (int)KuaFuEventTypes.RoleStateChange:
                {
                    if (args.Length == 1)
                    {
                        KuaFuRoleData kuaFuRoleData = args[0] as KuaFuRoleData;
                        if (null != kuaFuRoleData)
                        {
                            UpdateRoleData(kuaFuRoleData, kuaFuRoleData.RoleId);
                        }
                    }
                }
                break;

                case (int)KuaFuEventTypes.UpdateAndNotifyEnterGame:
                {
                    if (args.Length == 1)
                    {
                        KuaFuRoleData kuaFuRoleData = args[0] as KuaFuRoleData;
                        if (null != kuaFuRoleData)
                        {
                            UpdateRoleData(kuaFuRoleData, kuaFuRoleData.RoleId);

                            TianTiFuBenData TianTiFuBenData = GetKuaFuFuBenData(kuaFuRoleData.GameId);
                            if (null != TianTiFuBenData && TianTiFuBenData.State == GameFuBenState.Start)
                            {
                                KuaFuServerLoginData kuaFuServerLoginData = new KuaFuServerLoginData()
                                {
                                    RoleId   = kuaFuRoleData.RoleId,
                                    GameType = kuaFuRoleData.GameType,
                                    GameId   = kuaFuRoleData.GameId,
                                    EndTicks = kuaFuRoleData.StateEndTicks,
                                };

                                kuaFuServerLoginData.ServerId = ClientInfo.ServerId;
                                lock (Mutex)
                                {
                                    KuaFuServerInfo kuaFuServerInfo;
                                    if (ServerIdServerInfoDict.TryGetValue(TianTiFuBenData.ServerId, out kuaFuServerInfo))
                                    {
                                        kuaFuServerLoginData.ServerIp   = kuaFuServerInfo.Ip;
                                        kuaFuServerLoginData.ServerPort = kuaFuServerInfo.Port;
                                    }
                                }

                                CoreInterface.GetEventSourceInterface().fireEvent(new KuaFuNotifyEnterGameEvent(kuaFuServerLoginData), SceneType);
                            }
                        }
                    }
                }
                break;

                case (int)KuaFuEventTypes.ZhengBaSupport:
                {
                    ZhengBaSupportLogData data = args[0] as ZhengBaSupportLogData;
                    if (null != data && data.FromServerId != ClientInfo.ServerId)
                    {
                        CoreInterface.GetEventSourceInterface().fireEvent(new KFZhengBaSupportEvent(data), (int)SceneUIClasses.KFZhengBa);
                    }
                }
                break;

                case (int)KuaFuEventTypes.ZhengBaPkLog:
                {
                    if (args.Length == 1)
                    {
                        ZhengBaPkLogData log = args[0] as ZhengBaPkLogData;
                        if (log != null)
                        {
                            CoreInterface.GetEventSourceInterface().fireEvent(new KFZhengBaPkLogEvent(log), (int)SceneUIClasses.KFZhengBa);
                        }
                    }
                }
                break;

                case (int)KuaFuEventTypes.ZhengBaNtfEnter:
                {
                    ZhengBaNtfEnterData data = args[0] as ZhengBaNtfEnterData;
                    lock (Mutex)
                    {
                        KuaFuServerInfo kuaFuServerInfo;
                        if (ServerIdServerInfoDict.TryGetValue(data.ToServerId, out kuaFuServerInfo))
                        {
                            data.ToServerIp   = kuaFuServerInfo.Ip;
                            data.ToServerPort = kuaFuServerInfo.Port;
                        }
                        else
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("KuaFuEventTypes.ZhengBaNtfEnter not find kfserver={0}", data.ToServerId));
                        }
                    }
                    CoreInterface.GetEventSourceInterface().fireEvent(new KFZhengBaNtfEnterEvent(data), (int)SceneUIClasses.KFZhengBa);
                }
                break;

                case (int)KuaFuEventTypes.ZhengBaMirrorFight:
                {
                    ZhengBaMirrorFightData data = args[0] as ZhengBaMirrorFightData;
                    CoreInterface.GetEventSourceInterface().fireEvent(new KFZhengBaMirrorFightEvent(data), (int)SceneUIClasses.KFZhengBa);
                }
                break;

                case (int)KuaFuEventTypes.ZhengBaButtetinJoin:
                {
                    ZhengBaBulletinJoinData data = args[0] as ZhengBaBulletinJoinData;
                    CoreInterface.GetEventSourceInterface().fireEvent(new KFZhengBaBulletinJoinEvent(data), (int)SceneUIClasses.KFZhengBa);
                }
                break;

                case (int)KuaFuEventTypes.CoupleArenaCanEnter:
                {
                    CoreInterface.GetEventSourceInterface().fireEvent(
                        new CoupleArenaCanEnterEvent(args[0] as CoupleArenaCanEnterData), (int)SceneUIClasses.CoupleArena);
                }
                break;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }
        }