Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
 /// <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++;
             }
         }
     }
 }
Esempio n. 6
0
        /// <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));
        }
Esempio n. 7
0
        /// <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);
        }
Esempio n. 8
0
        /// <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));
        }
Esempio n. 9
0
        public static bool Update(LadderManagerEntity ladderManagerEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new LadderManagerProvider(zoneId);

            return(provider.Update(ladderManagerEntity, trans));
        }