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); }
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 { } }
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; } } } }
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; } } } }
/// <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); }
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; } } } } }
public IKuaFuFuBenData GetFuBenData(int gameId) { TianTiFuBenData kuaFuFuBenData = null; if (TianTiFuBenDataDict.TryGetValue(gameId, out kuaFuFuBenData) && kuaFuFuBenData.State < GameFuBenState.End) { return(kuaFuFuBenData); } return(null); }
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); }
/// <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); }
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) { } }
/// <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); }
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); }
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); }
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); }
private void AddGameFuBen(TianTiFuBenData tianTiFuBenData) { this.TianTiFuBenDataDict[tianTiFuBenData.GameId] = tianTiFuBenData; }
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); }
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); }
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()); } }