/// <summary> /// 将IDataReader的当前记录读取到LadderManagerEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public LadderManagerEntity LoadSingleRow(IDataReader reader) { var obj = new LadderManagerEntity(); obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.Score = (System.Int32)reader["Score"]; obj.NewlyScore = (System.Int32)reader["NewlyScore"]; obj.NewlyHonor = (System.Int32)reader["NewlyHonor"]; obj.Honor = (System.Int32)reader["Honor"]; obj.MaxScore = (System.Int32)reader["MaxScore"]; obj.MatchTime = (System.Int32)reader["MatchTime"]; obj.LastExchageTime = (System.DateTime)reader["LastExchageTime"]; obj.ExchangeIds = (System.String)reader["ExchangeIds"]; obj.ExchangedIds = (System.String)reader["ExchangedIds"]; obj.RefreshDate = (System.DateTime)reader["RefreshDate"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.UpdateTime = (System.DateTime)reader["UpdateTime"]; obj.RowVersion = (System.Byte[])reader["RowVersion"]; obj.RefreshTimes = (System.Int32)reader["RefreshTimes"]; obj.EquipmentProperties = (System.String)reader["EquipmentProperties"]; obj.EquipmentItems = (System.String)reader["EquipmentItems"]; obj.LadderCoin = (System.Int32)reader["LadderCoin"]; return(obj); }
/// <summary> /// Builds the match info. /// </summary> /// <param name="ladderId">The ladder id.</param> /// <param name="group">The group.</param> /// <param name="home">The home.</param> /// <param name="away">The away.</param> /// <param name="fightDic">The fight dic.</param> private void BuildMatchInfo(Guid ladderId, int group, LadderManagerEntity home, LadderManagerEntity away, ConcurrentDictionary <Guid, LadderMatchEntity> fightDic) { try { //筛选条件,当两个玩家分差超过阀值,将他们扔到排队池里继续等待 //int tmpScore = home.Score - away.Score; //if (tmpScore <= _arenaLowScore || tmpScore >= _arenaHighScore) //{ // if (!home.IsBot) // LadderCore.Instance.PushFightToCompetitor(home.Clone()); // if (!away.IsBot) // LadderCore.Instance.PushFightToCompetitor(away.Clone()); // return; //} var matchId = ShareUtil.GenerateComb(); var ladderMatch = new LadderMatchEntity(home, away, matchId, ladderId, group + 1); fightDic.TryAdd(ladderMatch.Idx, ladderMatch); MemcachedFactory.LadderMatchClient.Set(ladderMatch.Idx, ladderMatch); //更新经理-比赛关联字典 if (!home.IsBot) { LadderCore.Instance.ManagerFightDic[home.ManagerId] = matchId; } if (!away.IsBot) { LadderCore.Instance.ManagerFightDic[away.ManagerId] = matchId; } } catch (Exception ex) { SystemlogMgr.Error("LadderThread-BuildMatchInfo", ex.Message, ex.StackTrace); } }
MessageCode SaveExchange(LadderManagerEntity ladderManager, ItemPackageFrame package, LadderExchangerecordEntity ladderExchangerecord) { if (ladderManager == null || package == null || ladderExchangerecord == null) { return(MessageCode.NbUpdateFail); } try { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); var messageCode = Tran_SaveExchange(transactionManager.TransactionObject, ladderManager, package, ladderExchangerecord); if (messageCode == ShareUtil.SuccessCode) { transactionManager.Commit(); } else { transactionManager.Rollback(); } return(messageCode); } } catch (Exception ex) { SystemlogMgr.Error("SaveExchange", ex); return(MessageCode.Exception); } }
MessageCode Tran_SaveExchange(DbTransaction transaction, LadderManagerEntity ladderManager, ItemPackageFrame package, LadderExchangerecordEntity ladderExchangerecord) { if (!LadderManagerMgr.Update(ladderManager, transaction)) { return(MessageCode.NbUpdateFail); } if (!package.Save(transaction)) { return(MessageCode.NbUpdateFail); } if (!LadderExchangerecordMgr.Insert(ladderExchangerecord, transaction)) { return(MessageCode.NbUpdateFail); } return(MessageCode.Success); }
/// <summary> /// 将已进入比赛池的经理重新丢回排序池. /// </summary> /// <param name="arenaCompetitor">The arena competitor.</param> public void PushFightToCompetitor(LadderManagerEntity arenaCompetitor) { lock (_competitorLock) { if (ManagerFightDic != null && ManagerFightDic.ContainsKey(arenaCompetitor.ManagerId)) { ManagerFightDic.Remove(arenaCompetitor.ManagerId); if (!CompetitorDic.ContainsKey(arenaCompetitor.ManagerId)) { if (_playerNum == 0) { StartTime = DateTime.Now; } CompetitorDic.Add(arenaCompetitor.ManagerId, arenaCompetitor); _playerNum++; } } } }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016-09-07 19:07:44</remarks> public bool Update(LadderManagerEntity entity, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_LadderManager_Update"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId); database.AddInParameter(commandWrapper, "@Score", DbType.Int32, entity.Score); database.AddInParameter(commandWrapper, "@NewlyScore", DbType.Int32, entity.NewlyScore); database.AddInParameter(commandWrapper, "@NewlyHonor", DbType.Int32, entity.NewlyHonor); database.AddInParameter(commandWrapper, "@Honor", DbType.Int32, entity.Honor); database.AddInParameter(commandWrapper, "@MaxScore", DbType.Int32, entity.MaxScore); database.AddInParameter(commandWrapper, "@MatchTime", DbType.Int32, entity.MatchTime); database.AddInParameter(commandWrapper, "@LastExchageTime", DbType.DateTime, entity.LastExchageTime); database.AddInParameter(commandWrapper, "@ExchangeIds", DbType.AnsiString, entity.ExchangeIds); database.AddInParameter(commandWrapper, "@ExchangedIds", DbType.AnsiString, entity.ExchangedIds); database.AddInParameter(commandWrapper, "@RefreshDate", DbType.DateTime, entity.RefreshDate); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@UpdateTime", DbType.DateTime, entity.UpdateTime); database.AddInParameter(commandWrapper, "@RowVersion", DbType.Binary, entity.RowVersion); database.AddInParameter(commandWrapper, "@RefreshTimes", DbType.Int32, entity.RefreshTimes); database.AddInParameter(commandWrapper, "@EquipmentProperties", DbType.AnsiString, entity.EquipmentProperties); database.AddInParameter(commandWrapper, "@EquipmentItems", DbType.AnsiString, entity.EquipmentItems); database.AddInParameter(commandWrapper, "@LadderCoin", DbType.Int32, entity.LadderCoin); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.ManagerId = (System.Guid)database.GetParameterValue(commandWrapper, "@ManagerId"); return(Convert.ToBoolean(results)); }
/// <summary> /// GetById /// </summary> /// <param name="managerId">managerId</param> /// <param name="initLadderScore">initLadderScore</param> /// <returns>LadderManagerEntity</returns> /// <remarks>2016-09-07 19:07:43</remarks> public LadderManagerEntity GetById(System.Guid managerId, System.Int32 initLadderScore) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("C_Ladder_GetById"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, managerId); database.AddInParameter(commandWrapper, "@InitLadderScore", DbType.Int32, initLadderScore); LadderManagerEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// 引导比赛 /// </summary> /// <param name="managerId"></param> /// <returns></returns> private MessageCodeResponse GuideMatch(Guid managerId) { var manager = ManagerCore.Instance.GetManager(managerId); if (manager == null) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbParameterError)); } var arenaManager = InnerGetLadderManager(managerId); if (arenaManager == null) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbParameterError)); } if (ManagerGuideFightDic == null) { ManagerGuideFightDic = new Dictionary <Guid, Guid>(); } var laddermanager = GetLadderManager(managerId); if (laddermanager.MatchTime > 0) { return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbParameterError)); } LadderManagerEntity bot = new LadderManagerEntity(); var botList = LadderManagerMgr.GetBot(1, 0, 1201); if (botList != null) { bot = botList[0]; bot.Name = "送分小王子"; bot.IsBot = true; bot.Score = laddermanager.Score; } laddermanager.IsBot = false; laddermanager.Name = manager.Name; laddermanager.UpdateTime = DateTime.Now; laddermanager.HasTask = true; var ladderInfo = new LadderInfoEntity(); ladderInfo.Idx = ShareUtil.GenerateComb(); ladderInfo.FightList = new List <LadderManagerEntity>() { laddermanager, bot }; ladderInfo.StartTime = DateTime.Now; ladderInfo.GroupingTime = DateTime.Now; ladderInfo.CountdownTime = DateTime.Now; ladderInfo.CountdownTime = DateTime.Now.AddSeconds(1); ladderInfo.PlayerNumber = 2; ladderInfo.AvgWaitTime = 2; var matchId = ShareUtil.GenerateComb(); var ladderMatch = new LadderMatchEntity(laddermanager, bot, matchId, ladderInfo.Idx, 1); ConcurrentDictionary <Guid, LadderMatchEntity> fightDic = new ConcurrentDictionary <Guid, LadderMatchEntity>(); fightDic.TryAdd(ladderMatch.Idx, ladderMatch); MemcachedFactory.LadderMatchClient.Set(ladderMatch.Idx, ladderMatch); var process = new LadderProcess(fightDic, ladderInfo, LadderThread.Instance._ladderProctiveScore, true); process.StartProcess(); if (!ManagerGuideFightDic.ContainsKey(managerId)) { ManagerGuideFightDic.Add(managerId, matchId); } return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success)); }
public static bool Update(LadderManagerEntity ladderManagerEntity, DbTransaction trans = null, string zoneId = "") { var provider = new LadderManagerProvider(zoneId); return(provider.Update(ladderManagerEntity, trans)); }