예제 #1
0
        private async Task Evaluate(GuessResponseBody validatedBody)
        {
            foreach (var guess in validatedBody.Guesses)
            {
                if (guess.IsValid)
                {
                    var targetParticipant = gameContext.Participants.Where(p => p.TeamId == guess.TargetTeam && p.IsAlive == true).FirstOrDefault();

                    bool targetTeamIsDead = targetParticipant == null;

                    if (targetTeamIsDead)
                    {
                        guess.IsValid    = false;
                        guess.ErrMessage = "Target Team is Dead";
                    }
                    else
                    {
                        var evaluationResult = await evaluationModule.EvaluateTheGuess(User.Identity.Name, guess.TargetTeam, guess.Guess, targetParticipant.Secret);

                        guess.NoOfDigitsMatchedByPositionAndValue = evaluationResult.NoOfDigitsMatchedByValueAndPosition;
                        guess.NoOfDigitsMatchedByValue            = evaluationResult.NoOfDigitsMatchedByValue;
                        guess.Score      = evaluationResult.PointsScored;
                        guess.ErrMessage = evaluationResult.ErrMessage;
                    }
                }
            }
        }
예제 #2
0
        private GuessResponseBody Validate(GuessRequestBody body, string guessingTeam)
        {
            var guesses = body.Guesses;

            if (body.Guesses != null && body.Guesses.Count() > MAX_GUESSES)
            {
                throw new GuessLimitExceededException();
            }

            var guessResponseBody = new GuessResponseBody {
                Guesses = new List <SingleGuessResponseObject>()
            };

            foreach (var guess in guesses)
            {
                var targetTeam          = guess.Team;
                var secretGuess         = guess.Guess;
                var guessResponseObject = new SingleGuessResponseObject();

                if (string.IsNullOrWhiteSpace(targetTeam) || !IsTeamRegexValid(targetTeam))
                {
                    guessResponseObject.ErrMessage = "Invalid team";
                }
                else if (string.IsNullOrWhiteSpace(secretGuess) || !IsGuessRegexValid(secretGuess))
                {
                    guessResponseObject.ErrMessage = "Invalid guess";
                }
                else if (targetTeam == guessingTeam)
                {
                    guessResponseObject.ErrMessage = "Can't guess for yourself";
                }

                if (string.IsNullOrEmpty(guessResponseObject.ErrMessage))
                {
                    guessResponseObject.IsValid = true;
                }

                guessResponseObject.TargetTeam = targetTeam;
                guessResponseObject.Guess      = secretGuess;

                guessResponseBody.Guesses.Add(guessResponseObject);
            }

            return(guessResponseBody);
        }
예제 #3
0
 private async Task CommitGuess(GuessResponseBody validatedBody, GuessRequestBody requestBody)
 {
     await gameApiService.CommitGuess(User.Identity.Name, requestBody, validatedBody);
 }
예제 #4
0
        public async Task CommitGuess(string guessingTeam, GuessRequestBody requestBody, GuessResponseBody responseBody)
        {
            long pointsScored = 0;

            foreach (var guess in responseBody.Guesses)
            {
                pointsScored += guess.Score;
            }

            var guessId = Guid.NewGuid();

            await _context.Guesses.AddAsync(new Guess
            {
                GameId        = _gameContext.GameId,
                RoundId       = _gameContext.RoundId,
                GuessId       = guessId,
                TeamId        = guessingTeam,
                GuessRequest  = requestBody,
                GuessResponse = responseBody,
                TimeStamp     = DateTime.UtcNow
            });

            await _context.Scores.AddAsync(new Score
            {
                GameId       = _gameContext.GameId,
                RoundId      = _gameContext.RoundId,
                PointsScored = pointsScored,
                GuessId      = guessId,
                TeamId       = guessingTeam,
                TimeStamp    = DateTime.UtcNow
            });

            await _context.SaveChangesAsync();
        }