public async Task <int> ConfederationRegistrateCandidate() { return(await _contextActionAsync(async connection => { var cr = _getCurrentUser(connection); if (cr.GetVoteRegistred()) { throw new NotImplementedException(Error.CantRegisterCandidatAlreadyExist); } var userData = _gameUserService.GetGameUser(connection, cr.UserId); var candidat = new CandidatOut { UserId = cr.UserId, UserName = cr.Name, PvpPoint = userData.PvpPoint, }; int?newUserCc = null; var newCandidates = _confederationService.RegisterCandidate(connection, candidat, (newCc) => { newUserCc = newCc; }); if (newUserCc == null) { throw new NotImplementedException("newUserCc == null"); } cr.SetVoteRegistred(); var updHubUser = _hubCache.AddOrUpdateLocal(cr, true); await Clients.Client(cr.ConnectionId).InvokeAsync("updateConnectionUser", updHubUser); await Clients.All.InvokeAsync("onConfederationCandidatesUpdated", newCandidates, false); return (int)newUserCc; })); }
/// <summary> /// need add in out /// UserAvatar; /// AllianceId; /// AllianceLabel; /// AllianceName; /// </summary> /// <param name="i">CandidatOut</param> public WinnerCandidat(CandidatOut i) { Voices = i.Voices; UserId = i.UserId; UserName = i.UserName; UserPvpPoint = i.PvpPoint; }
private void _createAndSaveNewCandidate(IDbConnection connection, CandidatOut candidat, bool isFinalizer) { var upd = _officerCandidatRepository.AddOrUpdate(connection, new c_officer_candidat { dateCreate = UnixTime.UtcNow(), userId = candidat.UserId, voices = 0, isFinalizer = isFinalizer }); candidat.Id = upd.Id; }
/// <summary> /// данные о имени пвп должны быть назначенны зарание /// </summary> /// <param name="connection"></param> /// <param name="candidat"></param> /// <param name="setCcToData"></param> /// <returns></returns> public List <CandidatOut> RegisterCandidate(IDbConnection connection, CandidatOut candidat, Action <int> setCcToData) { candidat.ValidateRegistrate(); var ccModel = _storeService.BalanceCalcResultCc(connection, candidat.UserId, REGISTER_CANDIDATE_CC_PRICE); List <CandidatOut> candidates = null; var hasError = false; candidates = _officerCandidatRepository.GetRegistredOfficerCandidatesByTopPvp(connection, MAX_CANDIDATES_COUNT); var minPvp = candidates.Min(i => i.PvpPoint); if (candidates.Count == 0 || candidates.Min(i => i.PvpPoint) < candidat.PvpPoint) { if (_isExistCandidate(connection, candidat.UserId)) { throw new Exception(Error.CantRegisterCandidatAlreadyExist); } _createAndSaveNewCandidate(connection, candidat, false); if (candidates.Count == MAX_CANDIDATES_COUNT) { var idx = candidates.FindLastIndex(i => i.PvpPoint == minPvp); candidates.RemoveAt(idx); } candidates.Add(candidat); } else { hasError = true; } if (hasError) { throw new Exception(Error.CantRegisterCandidatNotEnoughPvP); } // todo переместить в один коннекшен var newBalance = _storeService.AddOrUpdateBalance(connection, ccModel); setCcToData(newBalance.Quantity); return(candidates.OrderByDescending(i => i.PvpPoint).ToList()); }
public IHttpActionResult TestFakeRegister() { var votePeriod = _confederationService.VotingInProgress; if (votePeriod) { return(Json(Error.TimeVotingIsNotOver)); } var candidat = new CandidatOut(); _provider.ContextAction(c => { var registred = c.c_officer_candidat.Select(i => new { i.user.pvpPoint, i.userId }).OrderByDescending(i => i.pvpPoint); var existUserIds = registred.Select(i => i.userId).ToList(); var minPvp = registred.Take(10).Select(i => i.pvpPoint).Min(); var potentialUsers = c.user.FirstOrDefault(i => i.pvpPoint > minPvp && !existUserIds.Contains(i.Id)); if (potentialUsers == null) { throw new Exception("Users is over need relod"); } candidat.PvpPoint = potentialUsers.pvpPoint; candidat.UserName = potentialUsers.nickname; candidat.UserId = potentialUsers.Id; }); var newBalaneCc = 0; var newCandidates = _confederationService.RegisterCandidate(candidat, (cc) => { newBalaneCc = cc; }); _hub.Clients.All.onConfederationCandidatesUpdated(newCandidates, true); return(Json(new { newCandidates, newBalaneCc } )); }