示例#1
0
        public async Task <ActionResult> PlayNow(User user)
        {
            var result = "";

            if (_queue.PlayerIsOnTheQueue(user.Username) &&
                _queue.GetMatchByUsername(user.Username).ExpiresIn >= DateTime.Now)
            {
                var match = _queue.GetMatchByUsername(user.Username);
                AddErrorToList($"You're already is on the queue. Expiration time: {match.ExpiresIn}");
                return(CustomResponse());
            }

            if (_queue.HasPlayerOnQueue() && !_queue.PlayerIsOnTheQueue(user.Username))
            {
                var newPlayer = new Player();
                newPlayer.GenerateRandomNumber();

                var match = _queue.GetNextMatch();
                match.AddSecondPlayer(newPlayer);

                result = match.GetWinner();

                match.PlayerOneId = match.PlayerOne.Id;
                match.PlayerTwoId = match.PlayerTwo.Id;

                await _context.Matches.AddAsync(match);

                await _context.SaveChangesAsync();

                _queue.ClearMatches();
                return(CustomResponse(result));
            }

            if (_queue.PlayerIsOnTheQueue(user.Username))
            {
                _queue.CancelMatchByUsername(user.Username);
            }

            var player = new Player(user);

            player.GenerateRandomNumber();
            _queue.AddPlayerToList(player);

            result = "You're in the queue, waiting for an opponent!";
            return(CustomResponse(result));
        }
        public async Task <IActionResult> PostUser([FromBody] User user)
        {
            var validation = new UserValidator().Validate(user);

            AddValidationResult(validation);

            if (!validation.IsValid)
            {
                return(CustomResponse());
            }

            var userDb = await _context.Users.FirstOrDefaultAsync(u => u.Username == user.Username);

            if (userDb != null)
            {
                AddErrorToList("Already exists an account using this username.");
                return(CustomResponse());
            }

            _context.Users.Add(user);
            await _context.SaveChangesAsync();

            return(CustomResponse());
        }