//request general users data async Task UpdateUsersData() { var logProperties = new Dictionary <string, object> { { "threadId", Thread.CurrentThread } }; LogService.Debug("Starting user data update tasks", logProperties); List <Task> updateTasks = new List <Task>(); int requestTimeout = AppConfigurationService.DefaultRequestTimeout; foreach (var user in UserMatchData) { //update primary/secondary ELO LogService.Trace($"Starting user data update: for user id: {user.UserGameProfileId} user data ladder source: {Ladders.RandomMap}, operation timeout: {requestTimeout}"); var userDataUpdateTask = UserRankService.GetUserDataFromLadder(user.UserGameProfileId, Ladders.RandomMap, requestTimeout); updateTasks.Add( userDataUpdateTask.ContinueWith( //t => HandleUserRankUpdated(userDataUpdateTask, Ladders.RandomMap, user.UserGameProfileId) t => HandleUserDataUpadted(userDataUpdateTask, user.UserGameProfileId) ) ); } await Task.WhenAll(updateTasks); LogService.Trace("All data updates has been completed", logProperties); }
private void RewardAndPunishmentUser_After(IUser sender, RewardAndPunishmentUserEventArgs eventArgs) { PointSettings pointSettings = pointSettingsManger.Get(); int totalPoints = pointSettings.CalculateIntegratedPoint(sender.ExperiencePoints, sender.ReputationPoints); //更新用户等级 //if (eventArgs.ExperiencePoints <= 0 && eventArgs.ReputationPoints <= 0) // return; IUserService userService = DIContainer.Resolve <IUserService>(); UserRankService userRankService = new UserRankService(); SortedList <int, UserRank> userRanks = userRankService.GetAll(); UserRank maxUserRank = null; if (userRanks != null && userRanks.Count > 0) { maxUserRank = userRanks.First().Value; } foreach (KeyValuePair <int, UserRank> userRank in userRanks) { if (totalPoints > userRank.Value.PointLower && userRank.Value.PointLower > maxUserRank.PointLower) { maxUserRank = userRank.Value; } } userService.UpdateRank(sender.UserId, maxUserRank.Rank); //自动解除管制 var user = userService.GetFullUser(sender.UserId); if (user.IsModerated && !user.IsForceModerated) { UserSettings userSettings = userSettingsManager.Get(); if (totalPoints > userSettings.NoModeratedUserPoint) { userService.NoModeratedUser(user.UserId); } } //发送通知 if (sender == null) { return; } Notice notice = Notice.New(); notice.UserId = sender.UserId; notice.ApplicationId = 0; notice.TypeId = NoticeTypeIds.Instance().Hint(); if (eventArgs.ExperiencePoints < 0 || eventArgs.ReputationPoints < 0 || eventArgs.TradePoints < 0) { notice.Body = "您被系统扣除经验:" + -eventArgs.ExperiencePoints + "、威望:" + -eventArgs.ReputationPoints + "、金币:" + -eventArgs.TradePoints; } else { notice.Body = "您收到系统奖励经验:" + eventArgs.ExperiencePoints + "、威望:" + eventArgs.ReputationPoints + "、金币:" + eventArgs.TradePoints; } notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().ListNotices(sender.UserName, null, null)); noticeService.Create(notice); }
public ActionResult UserBase() { var user = new UserService().GetUserBase(SessionTools.UserID); ViewBag.User = JsonHelper.SerializeObject(user); var rankList = new UserRankService().GetRankList(SessionTools.UserID); ViewBag.RankList = JsonHelper.SerializeObject(rankList); return(View()); }
/// <summary> /// 生成用户等级图标 /// </summary> public static MvcHtmlString UserRankIcon(this HtmlHelper htmlHelper, int rank) { TagBuilder spanBuilder; TagBuilder imgBuilder; StringBuilder builder = new StringBuilder(); int remainder = rank; string[] ranksImages = new string[] { "~/Themes/Shared/Styles/icons/star.gif", "~/Themes/Shared/Styles/icons/moon.gif", "~/Themes/Shared/Styles/icons/sun.gif" }; for (int k = ranksImages.Length - 1; k >= 0; k--) { int resultCount = remainder / GetRankNum(k); remainder = remainder % GetRankNum(k); for (int i = 0; i < resultCount; i++) { spanBuilder = new TagBuilder("span"); imgBuilder = new TagBuilder("img"); imgBuilder.MergeAttribute("src", WebUtility.ResolveUrl(ranksImages[k])); spanBuilder.InnerHtml += imgBuilder.ToString(); builder.Append(spanBuilder.ToString()); } if (remainder == 0) { break; } } UserRank userRank = new UserRankService().Get(rank); string rankName = ""; if (userRank != null) { rankName = userRank.RankName; } spanBuilder = new TagBuilder("span"); if (!string.IsNullOrEmpty(rankName)) { spanBuilder.MergeAttribute("title", rankName); } spanBuilder.InnerHtml = builder.ToString(); builder = new StringBuilder(spanBuilder.ToString()); return(MvcHtmlString.Create(builder.ToString())); }
/// <summary> /// 更改用户积分 /// </summary> /// <param name="sender"></param> /// <param name="eventArgs"></param> void ChangePointsEventModule_After(IUser sender, ChangePointsEventArgs eventArgs) { if (eventArgs.ExperiencePoints <= 0 && eventArgs.ReputationPoints <= 0) { return; } IUserService userService = DIContainer.Resolve <IUserService>(); //自动升级 UserRankService userRankService = new UserRankService(); SortedList <int, UserRank> userRanks = userRankService.GetAll(); UserRank maxUserRank = null; if (userRanks != null && userRanks.Count > 0) { maxUserRank = userRanks.ElementAt(0).Value; } IPointSettingsManager pointSettingsManger = DIContainer.Resolve <IPointSettingsManager>(); PointSettings pointSettings = pointSettingsManger.Get(); int totalPoints = pointSettings.CalculateIntegratedPoint(sender.ExperiencePoints, sender.ReputationPoints); foreach (KeyValuePair <int, UserRank> userRank in userRanks) { if (totalPoints > userRank.Value.PointLower && userRank.Value.PointLower > maxUserRank.PointLower) { maxUserRank = userRank.Value; } } if (maxUserRank.Rank > sender.Rank) { userService.UpdateRank(sender.UserId, maxUserRank.Rank); } //自动解除管制 var user = userService.GetFullUser(sender.UserId); if (user.IsModerated && !user.IsForceModerated) { UserSettings userSettings = DIContainer.Resolve <IUserSettingsManager>().Get(); if (totalPoints > userSettings.NoModeratedUserPoint) { userService.NoModeratedUser(user.UserId); } } }
public ActionResult SubmitScore(string OrderID, string Score) { var resultData = new UserRankService().SubmitScore(OrderID, Score, SessionTools.UserID); return(Content(JsonHelper.SerializeObject(resultData))); }
async Task UpdateUsersRank() { var logProperties = new Dictionary <string, object> { { "threadId", Thread.CurrentThread } }; LogService.Debug("Starting user rank update tasks", logProperties); List <Task> updateTasks = new List <Task>(); Ladders userRankModeToUpadte = Ladders.RandomMap; switch (matchType) { //if game is 1v1 then all data is processed from match request, so we don't have to update anything case MatchType.RandomMap: LogService.Debug("Skiping update", logProperties); return; case MatchType.Deathmatch: LogService.Debug("skiping update", logProperties); return; //update 1v1 ratings for team matches case MatchType.TeamdeathMatch: userRankModeToUpadte = Ladders.Deathmatch; break; case MatchType.TeamRandomMap: userRankModeToUpadte = Ladders.RandomMap; break; //update 1v1 case MatchType.Unranked: userRankModeToUpadte = Ladders.RandomMap; break; //if match is custom game (any unraked, includes all "quick match" types) then use Random map rating (most reliable type across rating types) default: //userRankModeToUpadte = UserRankMode.RandomMap; break; } int userELOUpdateTimeout = AppConfigurationService.DefaultRequestTimeout; foreach (var user in UserMatchData) { //update primary/secondary ELO LogService.Info($"Starting user ELO update: for user id: {user.UserGameProfileId} user rank mode to update: {userRankModeToUpadte}, operation timeout: {userELOUpdateTimeout}"); var userDataUpdateTask = UserRankService.GetUserRankFromLadder(user.UserGameProfileId, userRankModeToUpadte, userELOUpdateTimeout); updateTasks.Add( userDataUpdateTask.ContinueWith( t => HandleUserRankUpdated(userDataUpdateTask, userRankModeToUpadte, user.UserGameProfileId) ) ); } await Task.WhenAll(updateTasks); LogService.Trace("All rank updates has been completed", logProperties); }