Пример #1
0
        /// <summary>
        /// 将IDataReader的当前记录读取到CrosscrowdManagerEntity 对象
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public CrosscrowdManagerEntity LoadSingleRow(IDataReader reader)
        {
            var obj = new CrosscrowdManagerEntity();

            obj.ManagerId         = (System.Guid)reader["ManagerId"];
            obj.DomainId          = (System.Int32)reader["DomainId"];
            obj.SiteId            = (System.String)reader["SiteId"];
            obj.SiteName          = (System.String)reader["SiteName"];
            obj.Name              = (System.String)reader["Name"];
            obj.Logo              = (System.String)reader["Logo"];
            obj.CrossCrowdId      = (System.Int32)reader["CrossCrowdId"];
            obj.Morale            = (System.Int32)reader["Morale"];
            obj.Score             = (System.Int32)reader["Score"];
            obj.ScoreUpdateTime   = (System.DateTime)reader["ScoreUpdateTime"];
            obj.KillNumber        = (System.Int32)reader["KillNumber"];
            obj.ByKillNumber      = (System.Int32)reader["ByKillNumber"];
            obj.NextMatchTime     = (System.DateTime)reader["NextMatchTime"];
            obj.ClearCdCount      = (System.Int32)reader["ClearCdCount"];
            obj.ResurrectionTime  = (System.DateTime)reader["ResurrectionTime"];
            obj.ResurrectionCount = (System.Int32)reader["ResurrectionCount"];
            obj.ResurrectionAuto  = (System.Int32)reader["ResurrectionAuto"];
            obj.WinningCount      = (System.Int32)reader["WinningCount"];
            obj.Kpi        = (System.Int32)reader["Kpi"];
            obj.Status     = (System.Int32)reader["Status"];
            obj.RowTime    = (System.DateTime)reader["RowTime"];
            obj.UpdateTime = (System.DateTime)reader["UpdateTime"];

            return(obj);
        }
Пример #2
0
        /// <summary>
        /// 退出
        /// </summary>
        /// <param name="managerId">The manager id.</param>
        /// <returns></returns>
        public MessageCodeResponse Leave(Guid managerId)
        {
            var crowd = GetCurrent();

            if (crowd == null || crowd.Status != 1)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNoData));
            }
            DateTime curTime = DateTime.Now;

            if (curTime < crowd.StartTime)
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdNotStart));
            }
            if (!IsManagerBusy(managerId))
            {
                if (CompetitorDic.ContainsKey(managerId))
                {
                    lock (_competitorLock)
                    {
                        CrosscrowdManagerEntity entity = null;
                        CompetitorDic.TryRemove(managerId, out entity);
                    }
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
                }
                else
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.Success));
                }
            }
            else
            {
                return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.CrowdBusy));
            }
        }
Пример #3
0
 void PairReady(CrosscrowdManagerEntity outManager)
 {
     _startTime    = DateTime.Now;
     CompetitorDic = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>();
     if (outManager != null)
     {
         CompetitorDic.TryAdd(outManager.ManagerId, outManager);
     }
 }
Пример #4
0
        CrosscrowdManagerResponse doAction(string siteId, Guid managerId, EnumConsumeSourceType mallDirectType, bool isClearCd)
        {
            var crowd = CrossCrowdManager.Instance.GetCurrent(siteId);

            if (crowd == null || crowd.Status != 1)
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.CrowdNoData));
            }
            DateTime curTime = DateTime.Now;
            CrosscrowdManagerEntity crowdManager = InnerGetManager(siteId, managerId, crowd.Idx, curTime);

            if (isClearCd)
            {
                var cd = MatchCdHandler.GetCdSecondsInt(managerId, EnumMatchType.CrossCrowd);
                if (cd <= 0)
                {
                    return(GetManagerInfo(siteId, managerId, crowd.Idx, DateTime.Now));
                }
                crowdManager.ClearCdCount++;
            }
            else
            {
                if (crowdManager.Morale <= 0)
                {
                    crowdManager.Morale = _initMorale;
                    crowdManager.ResurrectionCount++;
                    //crowdManager.NextMatchTime = ShareUtil.BaseTime;
                }
                else
                {
                    return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.CrowdHasMorale));
                }
            }
            var mallDirect = new CrossMallDirectFrame(siteId, managerId, mallDirectType, 0);// crowdManager.ClearCdCount);
            var checkCode  = mallDirect.Check();

            if (checkCode != MessageCode.Success)
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(checkCode));
            }
            crowdManager.UpdateTime = curTime;
            if (!CrosscrowdManagerMgr.Update(crowdManager))
            {
                return(ResponseHelper.Create <CrosscrowdManagerResponse>(MessageCode.NbUpdateFail));
            }

            MatchCdHandler.Delete(managerId, EnumMatchType.CrossCrowd);
            checkCode = mallDirect.Save(Guid.NewGuid().ToString());
            if (checkCode != MessageCode.Success)
            {
                SystemlogMgr.Error("CrossCrowd-doaction", string.Format("action:{0}", mallDirectType.ToString()));
            }
            return(GetManagerInfo(siteId, managerId, crowd.Idx, DateTime.Now, mallDirect.RemainPoint, false));
        }
Пример #5
0
        /// <summary>
        /// 带事务的Update
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="trans">The trans.</param>
        /// <returns></returns>
        /// <remarks>2016-08-24 15:49:58</remarks>
        public bool Update(CrosscrowdManagerEntity entity, DbTransaction trans)
        {
            var       database       = new SqlDatabase(this.ConnectionString);
            DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_CrosscrowdManager_Update");

            database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId);
            database.AddInParameter(commandWrapper, "@DomainId", DbType.Int32, entity.DomainId);
            database.AddInParameter(commandWrapper, "@SiteId", DbType.AnsiString, entity.SiteId);
            database.AddInParameter(commandWrapper, "@SiteName", DbType.String, entity.SiteName);
            database.AddInParameter(commandWrapper, "@Name", DbType.String, entity.Name);
            database.AddInParameter(commandWrapper, "@Logo", DbType.AnsiString, entity.Logo);
            database.AddInParameter(commandWrapper, "@CrossCrowdId", DbType.Int32, entity.CrossCrowdId);
            database.AddInParameter(commandWrapper, "@Morale", DbType.Int32, entity.Morale);
            database.AddInParameter(commandWrapper, "@Score", DbType.Int32, entity.Score);
            database.AddInParameter(commandWrapper, "@ScoreUpdateTime", DbType.DateTime, entity.ScoreUpdateTime);
            database.AddInParameter(commandWrapper, "@KillNumber", DbType.Int32, entity.KillNumber);
            database.AddInParameter(commandWrapper, "@ByKillNumber", DbType.Int32, entity.ByKillNumber);
            database.AddInParameter(commandWrapper, "@NextMatchTime", DbType.DateTime, entity.NextMatchTime);
            database.AddInParameter(commandWrapper, "@ClearCdCount", DbType.Int32, entity.ClearCdCount);
            database.AddInParameter(commandWrapper, "@ResurrectionTime", DbType.DateTime, entity.ResurrectionTime);
            database.AddInParameter(commandWrapper, "@ResurrectionCount", DbType.Int32, entity.ResurrectionCount);
            database.AddInParameter(commandWrapper, "@ResurrectionAuto", DbType.Int32, entity.ResurrectionAuto);
            database.AddInParameter(commandWrapper, "@WinningCount", DbType.Int32, entity.WinningCount);
            database.AddInParameter(commandWrapper, "@Kpi", DbType.Int32, entity.Kpi);
            database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status);
            database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime);
            database.AddInParameter(commandWrapper, "@UpdateTime", DbType.DateTime, entity.UpdateTime);


            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));
        }
Пример #6
0
        /// <summary>
        /// GetById
        /// </summary>
        /// <param name="managerId">managerId</param>
        /// <returns>CrosscrowdManagerEntity</returns>
        /// <remarks>2016-08-24 15:49:58</remarks>
        public CrosscrowdManagerEntity GetById(System.Guid managerId)
        {
            var database = new SqlDatabase(this.ConnectionString);

            DbCommand commandWrapper = database.GetStoredProcCommand("P_CrosscrowdManager_GetById");

            database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, managerId);


            CrosscrowdManagerEntity obj = null;

            using (IDataReader reader = database.ExecuteReader(commandWrapper))
            {
                if (reader.Read())
                {
                    obj = LoadSingleRow(reader);
                }
            }
            return(obj);
        }
Пример #7
0
        private void BuildMatchInfo(int crowdId, int pairIndex, CrosscrowdManagerEntity home, CrosscrowdManagerEntity away, Dictionary <Guid, CrosscrowdMatchEntity> matchDic)
        {
            try
            {
                var matchId = ShareUtil.GenerateComb();
                var match   = new CrosscrowdMatchEntity(home, away, matchId, crowdId, pairIndex);
                matchDic.Add(match.Idx, match);

                MemcachedFactory.CrowdMatchClient.Set(match.Idx, match);
                //更新经理-比赛关联字典
                var homeHeart = new CrowdHeartEntity(matchId, away.ShowName, away.Logo, away.Morale, away.ManagerId, away.SiteId);
                var awayHeart = new CrowdHeartEntity(matchId, home.ShowName, home.Logo, home.Morale, home.ManagerId, home.SiteId);
                ManagerFightDic[home.ManagerId] = homeHeart;
                ManagerFightDic[away.ManagerId] = awayHeart;
                //try
                //{
                //    CrossChatHelper.SendCrowdPairPop(home.ManagerId, homeHeart, home.SiteId);
                //    CrossChatHelper.SendCrowdPairPop(away.ManagerId, awayHeart, away.SiteId);
                //}
                //catch (Exception ex)
                //{
                //    SystemlogMgr.Error("CrossCrowdThread-SendCrowdPairPop", ex);
                //}
                MatchCdHandler.SetCd(home.ManagerId, EnumMatchType.CrossCrowd, _crowdCd);
                MatchCdHandler.SetCd(away.ManagerId, EnumMatchType.CrossCrowd, _crowdCd);
                try
                {
                    MemcachedFactory.CrowdHeartClient.Set(home.ManagerId, homeHeart);
                    MemcachedFactory.CrowdHeartClient.Set(away.ManagerId, awayHeart);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("CrossCrowdThread-BuildMatchInfo-Send", ex);
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("CrossCrowdThread-BuildMatchInfo", ex);
            }
        }
Пример #8
0
        CrosscrowdPairrecordEntity GetCompetitorToMatch()
        {
            var crowdPair = new CrosscrowdPairrecordEntity();

            lock (_competitorLock)
            {
                var totalCount  = CompetitorDic.Count;
                var playerCount = totalCount;
                if (totalCount % 2 == 1)
                {
                    playerCount = totalCount - 1;
                }
                var fightList = new List <CrosscrowdManagerEntity>(playerCount);
                ManagerFightDic = new Dictionary <Guid, CrowdHeartEntity>(playerCount);
                int i = 0;
                CrosscrowdManagerEntity outManager = null;
                foreach (var dic in CompetitorDic)
                {
                    i++;
                    if (i <= playerCount)
                    {
                        //将经理推进比赛池
                        ManagerFightDic.Add(dic.Key, null);
                        fightList.Add(dic.Value);
                    }
                    else if (i == totalCount)
                    {
                        outManager = dic.Value;
                    }
                }
                _crowdInfo.PairCount++;
                crowdPair.FightList    = fightList;
                crowdPair.PairIndex    = _crowdInfo.PairCount;
                crowdPair.PlayerCount  = playerCount;
                crowdPair.CrossCrowdId = _crowdInfo.Idx;
                PairReady(outManager);
            }
            return(crowdPair);
        }
Пример #9
0
        void SavePrizeAfter(CrosscrowdMatchEntity crowdMatch, CrosscrowdManagerEntity homeManager, CrosscrowdManagerEntity awayManager)
        {
            try
            {
                WebServerHandler.AddCoin2(crowdMatch.HomeSiteId, crowdMatch.HomeId, crowdMatch.HomePrizeCoin,
                                          _coinChargeSourceType);
                WebServerHandler.AddCoin2(crowdMatch.AwaySiteId, crowdMatch.AwayId, crowdMatch.AwayPrizeCoin,
                                          _coinChargeSourceType);

                string banner  = "";
                string homePop = "";
                string awayPop = "";

                if (crowdMatch.HomeScore > crowdMatch.AwayScore)
                {
                    homePop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Win, crowdMatch.AwayName, crowdMatch.HomeScore, crowdMatch.AwayScore);
                    awayPop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Lose, crowdMatch.HomeName, crowdMatch.AwayScore, crowdMatch.HomeScore);
                    if (homeManager.WinningCount == 2)
                    {
                        banner += "&" + CrossCrowdMessage.BuildBannerCrowd3Win(crowdMatch.HomeName);
                    }
                    else if (homeManager.WinningCount == 4)
                    {
                        banner += "&" + CrossCrowdMessage.BuildBannerCrowd5Win(crowdMatch.HomeName);
                    }
                }
                else if (crowdMatch.AwayScore > crowdMatch.HomeScore)
                {
                    homePop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Lose, crowdMatch.AwayName, crowdMatch.HomeScore, crowdMatch.AwayScore);
                    awayPop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Win, crowdMatch.HomeName, crowdMatch.AwayScore, crowdMatch.HomeScore);
                    if (awayManager.WinningCount == 2)
                    {
                        banner += "&" + CrossCrowdMessage.BuildBannerCrowd3Win(crowdMatch.AwayName);
                    }
                    else if (awayManager.WinningCount == 4)
                    {
                        banner += "&" + CrossCrowdMessage.BuildBannerCrowd5Win(crowdMatch.AwayName);
                    }
                }
                else
                {
                    homePop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Draw, crowdMatch.AwayName, crowdMatch.HomeScore, crowdMatch.AwayScore);
                    awayPop += "&" + CrossCrowdMessage.BuildCrowdMatch(EnumWinType.Draw, crowdMatch.HomeName, crowdMatch.AwayScore, crowdMatch.HomeScore);
                }
                homePop += "&" + CrossCrowdMessage.BuildCrowdMatchPrize(crowdMatch.HomePrizeScore, crowdMatch.HomePrizeCoin, crowdMatch.HomePrizeHonor);
                awayPop += "&" + CrossCrowdMessage.BuildCrowdMatchPrize(crowdMatch.AwayPrizeScore, crowdMatch.AwayPrizeCoin, crowdMatch.AwayPrizeHonor);

                var scoreDiv = crowdMatch.HomeScore - crowdMatch.AwayScore;
                if (scoreDiv >= 3)
                {
                    banner += "&" + CrossCrowdMessage.BuildBannerCrowdWinOver(crowdMatch.HomeName, crowdMatch.HomeScore, crowdMatch.AwayScore, crowdMatch.AwayName);
                }
                else if (scoreDiv < -2)
                {
                    banner += "&" + CrossCrowdMessage.BuildBannerCrowdWinOver(crowdMatch.AwayName, crowdMatch.AwayScore, crowdMatch.HomeScore, crowdMatch.HomeName);
                }

                if (crowdMatch.HomeMorale <= 0 && crowdMatch.AwayMorale <= 0)
                {
                    homePop          += "&" + CrossCrowdMessage.BuildCrowdKillTogether(crowdMatch.AwayName);
                    awayPop          += "&" + CrossCrowdMessage.BuildCrowdKillTogether(crowdMatch.HomeName);
                    banner           += "&" + CrossCrowdMessage.BuildBannerCrowdKill(crowdMatch.HomeName, crowdMatch.AwayName);
                    banner           += "&" + CrossCrowdMessage.BuildBannerCrowdKill(crowdMatch.AwayName, crowdMatch.HomeName);
                    crowdMatch.IsKill = true;
                }
                else if (crowdMatch.HomeMorale <= 0)
                {
                    awayPop          += "&" + CrossCrowdMessage.BuildCrowdKill(crowdMatch.HomeName);
                    homePop          += "&" + CrossCrowdMessage.BuildCrowdByKill(crowdMatch.AwayName);
                    banner           += "&" + CrossCrowdMessage.BuildBannerCrowdKill(crowdMatch.AwayName, crowdMatch.HomeName);
                    crowdMatch.IsKill = true;
                }
                else if (crowdMatch.AwayMorale <= 0)
                {
                    awayPop          += "&" + CrossCrowdMessage.BuildCrowdByKill(crowdMatch.HomeName);
                    homePop          += "&" + CrossCrowdMessage.BuildCrowdKill(crowdMatch.AwayName);
                    banner           += "&" + CrossCrowdMessage.BuildBannerCrowdKill(crowdMatch.HomeName, crowdMatch.AwayName);
                    crowdMatch.IsKill = true;
                }
                //LogHelper.Insert(string.Format("HomePop:{0},AwayPop:{1}",homePop,awayPop),LogType.Info);
                if (!string.IsNullOrEmpty(homePop))
                {
                    CrossCrowdMessage.SendCrowdPop(crowdMatch.HomeId, homePop.TrimStart('&'));
                }
                if (!string.IsNullOrEmpty(awayPop))
                {
                    CrossCrowdMessage.SendCrowdPop(crowdMatch.AwayId, awayPop.TrimStart('&'));
                }
                if (!string.IsNullOrEmpty(banner))
                {
                    CrossCrowdMessage.SendCrowdBanner(_domainId, banner.TrimStart('&'));
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("CrossCrowdProcess-SavePrizeAfter", ex);
            }
        }
Пример #10
0
 /// <summary>
 /// Update
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 /// <remarks>2016-08-24 15:49:58</remarks>
 public bool Update(CrosscrowdManagerEntity entity)
 {
     return(Update(entity, null));
 }
Пример #11
0
 /// <summary>
 /// Insert
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="trans">The trans.</param>
 /// <returns></returns>
 /// <remarks>2016-08-24 15:49:58</remarks>
 public bool Insert(CrosscrowdManagerEntity entity)
 {
     return(Insert(entity, null));
 }
Пример #12
0
        CrosscrowdManagerEntity InnerGetManager(string siteId, Guid managerId, int crowdId, DateTime curTime)
        {
            var crowdManager = CrosscrowdManagerMgr.GetById(managerId);
            int domainId     = 1;

            if (crowdManager == null)
            {
                var manager = NbManagerMgr.GetById(managerId, siteId);
                if (manager == null)
                {
                    return(null);
                }
                //if (!ManagerUtil.CheckFunction(siteId, managerId, EnumOpenFunction.Crowd))
                //    return null;
                CrossSiteCache.Instance().TryGetDomainId(siteId, out domainId);
                crowdManager                  = new CrosscrowdManagerEntity();
                crowdManager.DomainId         = domainId;
                crowdManager.SiteId           = siteId;
                crowdManager.SiteName         = CacheFactory.FunctionAppCache.GetCrossZoneName(siteId);
                crowdManager.Name             = manager.Name;
                crowdManager.Logo             = manager.Logo;
                crowdManager.CrossCrowdId     = crowdId;
                crowdManager.Morale           = _initMorale;
                crowdManager.ManagerId        = managerId;
                crowdManager.RowTime          = curTime;
                crowdManager.UpdateTime       = curTime;
                crowdManager.ScoreUpdateTime  = curTime;
                crowdManager.ResurrectionTime = ShareUtil.BaseTime;
                crowdManager.NextMatchTime    = ShareUtil.BaseTime;
                crowdManager.Kpi              = ManagerUtil.GetKpi(managerId, siteId);
                CrosscrowdManagerMgr.Insert(crowdManager);
            }
            else if (crowdId > 0)
            {
                if (crowdManager.CrossCrowdId != crowdId)
                {
                    CrossSiteCache.Instance().TryGetDomainId(siteId, out domainId);
                    crowdManager.DomainId          = domainId;
                    crowdManager.CrossCrowdId      = crowdId;
                    crowdManager.KillNumber        = 0;
                    crowdManager.ByKillNumber      = 0;
                    crowdManager.Morale            = _initMorale;
                    crowdManager.Score             = 0;
                    crowdManager.ScoreUpdateTime   = curTime;
                    crowdManager.UpdateTime        = curTime;
                    crowdManager.WinningCount      = 0;
                    crowdManager.ResurrectionCount = 0;
                    crowdManager.ResurrectionAuto  = 0;
                    crowdManager.ClearCdCount      = 0;
                    crowdManager.Kpi = ManagerUtil.GetKpi(managerId, siteId);

                    CrosscrowdManagerMgr.Update(crowdManager);
                }
                else if (crowdManager.Morale <= 0)
                {
                    if (curTime >= crowdManager.ResurrectionTime)
                    {
                        crowdManager.Morale     = _initMorale;
                        crowdManager.UpdateTime = curTime;
                        crowdManager.ResurrectionAuto++;
                        CrosscrowdManagerMgr.Update(crowdManager);
                    }
                    else
                    {
                        crowdManager.Morale = 0;
                    }
                }
            }
            return(crowdManager);
        }
Пример #13
0
        public static bool Update(CrosscrowdManagerEntity crosscrowdManagerEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new CrosscrowdManagerProvider(zoneId);

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