コード例 #1
0
        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;
            }));
        }
コード例 #2
0
            /// <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;
            }
コード例 #3
0
        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;
        }
コード例 #4
0
        /// <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());
        }
コード例 #5
0
        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
            }
                        ));
        }