/// <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); }
/// <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)); } }
void PairReady(CrosscrowdManagerEntity outManager) { _startTime = DateTime.Now; CompetitorDic = new ConcurrentDictionary <Guid, CrosscrowdManagerEntity>(); if (outManager != null) { CompetitorDic.TryAdd(outManager.ManagerId, outManager); } }
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)); }
/// <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)); }
/// <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); }
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); } }
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); }
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); } }
/// <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)); }
/// <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)); }
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); }
public static bool Update(CrosscrowdManagerEntity crosscrowdManagerEntity, DbTransaction trans = null, string zoneId = "") { var provider = new CrosscrowdManagerProvider(zoneId); return(provider.Update(crosscrowdManagerEntity, trans)); }