예제 #1
0
        /// <summary>
        /// Get random image
        /// </summary>
        /// <param name="binding"></param>
        /// <returns></returns>
        private async Task <ImageModel> GetRandomImage(RandomImageBinding binding)
        {
            var imageRequest = new HttpRequestMessage(HttpMethod.Get, "/api/image")
            {
                Content = new StringContent(JsonSerializer.Serialize(binding), Encoding.UTF8, "application/json")
            };
            var imageResponse = await _db.BuildApiResponse <ImageModel>(imageRequest, _session._accessToken);

            if (imageResponse.Status == HttpStatusCode.OK)
            {
                return(imageResponse.Content);
            }

            return(null);
        }
예제 #2
0
        public async Task <JsonResult> GetNewImage(int[] preImageId)
        {
            var binding = new RandomImageBinding
            {
                PreviousImageIds = preImageId,
                ReturnRandom     = true
            };

            var image = await GetRandomImage(binding);

            var returnValues = new
            {
                ImageId  = image.ImageId,
                ImageUrl = Common.BuildCloudinaryUrl(image.FileName)
            };

            return(Json(returnValues));
        }
예제 #3
0
        /// <summary>
        /// Init Guess set up
        /// Get user details or creat them
        /// Old guesses
        /// New image
        /// </summary>
        /// <param name="userGuid">Can be null if so new user is created</param>
        /// <returns></returns>
        public async Task <ActionResult> GuessNoFeedback(string userGuid, byte?phase = 0)
        {
            if (_session._isLoggedin)
            {
                //create if no guid
                var getUserRequest = new HttpRequestMessage(HttpMethod.Post, "/api/user");

                //Get if exists
                if (!string.IsNullOrEmpty(userGuid) && new Guid(userGuid) != Guid.Empty)
                {
                    getUserRequest = new HttpRequestMessage(HttpMethod.Get, string.Format("/api/user/hash/{0}", userGuid));
                }

                var getUserResponse = await _db.BuildApiResponse <UserModel>(getUserRequest, _session._accessToken);

                GuessViewModel model = new GuessViewModel();
                if (getUserResponse.Status == HttpStatusCode.OK)
                {
                    model.UserHash = getUserResponse.Content.HashUser.Value;
                    model.UserId   = getUserResponse.Content.UserId;

                    //returning details
                    model.ReturningUser  = (getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any());
                    model.ReturningTimer = (getUserResponse.Content.TimePhase1.HasValue)
                        ? ((getUserResponse.Content.TimePhase1.Value.Hour * 3600) +
                           (getUserResponse.Content.TimePhase1.Value.Minute * 60) + (getUserResponse.Content.TimePhase1.Value.Second))
                        : 0;

                    //Login logging
                    var updateLoginTokenRequest  = new HttpRequestMessage(HttpMethod.Post, string.Format("/api/token/{0}/{1}", _session._accessId, model.UserHash.ToString()));
                    var updateLoginTokenResponse = await _db.BuildApiResponse <Token>(updateLoginTokenRequest, _session._accessToken);

                    //Past guesses
                    var usersGuessRequest = new HttpRequestMessage(HttpMethod.Get,
                                                                   string.Format("/api/usersGuess/{0}/{1}", getUserResponse.Content.UserId, phase));
                    var usersGuessResponse = await _db.BuildApiResponse <List <UserGuessModel> >(usersGuessRequest, _session._accessToken);


                    model.FinalPercentage = getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any() && usersGuessResponse.Content.Count >= 10
                        ? (decimal)Calculations.FindAverageDifferenceOfList(usersGuessResponse.Content.OrderBy(x => x.UsersGuessId).Skip(usersGuessResponse.Content.Count - 10).ToList())
                        : (decimal)0.0;


                    model.ImagesUsed = usersGuessResponse.Content.Count;
                    model.Phase      = (byte)(phase.HasValue ? phase.Value : 0);

                    //Get random new image that hasn't been used
                    var binding = new RandomImageBinding
                    {
                        PreviousImageIds = getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any()
                            ? getUserResponse.Content.Guesses.Select(x => x.ImageId).ToArray()
                            : new int[0],
                        ReturnRandom = true
                    };
                    var image = await GetRandomImage(binding);


                    if (image != null)
                    {
                        model.CurrentCloudinaryUrl = Common.BuildCloudinaryUrl(image.FileName);
                        model.CurrentImageId       = image.ImageId;

                        return(View(model));
                    }
                }

                return(RedirectToAction("Errorpage", "Home"));
            }

            return(RedirectToAction("Login", "Account"));
        }