Example #1
0
        public async Task <string> PostGameResult()
        {
            // Get the game and get the moves
            var gameId    = this.ActionContext.Request.Headers.GetValues("GameId").First();
            var gameModel = this.context.POPpicGames.Where(g => g.Id == gameId).FirstOrDefault();
            var gameMoves = this.context.POPpicGameMoves.Where(m => m.GameId == gameId).ToList();
            // var imageStream = await this.ActionContext.Request.Content.ReadAsStreamAsync();

            string fullsizeUrl, thumbnailUrl;
            var    urls = await UploadLoserImage(this.ActionContext.Request.Content, gameId);

            fullsizeUrl  = urls.Key;
            thumbnailUrl = urls.Value;

            if (gameMoves.Count < 1)
            {
                return("Not enough game moves");
            }

            // Create the result and save it to the DB
            POPpicGameResults result = new POPpicGameResults();

            result.Id                  = Guid.NewGuid().ToString();
            result.GameId              = gameId;
            result.ImageUrl            = fullsizeUrl;
            result.LoserId             = gameMoves.Last().UserId;
            result.LoserDuration       = DurationForPlayer(result.LoserId, gameMoves);
            result.LoserNumberOfMoves  = NumberOfMovesForPlayer(result.LoserId, gameMoves);
            result.WinnerId            = gameModel.RequesterId == result.LoserId ? gameModel.ResponderId : gameModel.RequesterId;
            result.WinnerDuration      = DurationForPlayer(result.WinnerId, gameMoves);
            result.WinnerNumberOfMoves = NumberOfMovesForPlayer(result.WinnerId, gameMoves);
            this.context.POPpicGameResults.Add(result);

            // Next ned to update the players who won/lost
            var winnerModel = this.context.POPpicUsers.Where(u => u.Id == result.WinnerId).First();

            winnerModel.Wins++;
            winnerModel.TimePressed.AddTicks(result.WinnerDuration.Ticks);
            winnerModel.OpponentTimePressed.AddTicks(result.LoserDuration.Ticks);

            var loserModel = this.context.POPpicUsers.Where(u => u.Id == result.LoserId).First();

            loserModel.Loses++;
            loserModel.TimePressed.AddTicks(result.LoserDuration.Ticks);
            loserModel.OpponentTimePressed.AddTicks(result.WinnerDuration.Ticks);
            loserModel.ProfilePictureUrl = thumbnailUrl;

            try
            {
                context.SaveChanges();
            } catch (Exception e)
            {
            }

            // TODO - send push notifications

            return(CrossPlatformUtilities.SerializeItem <POPpicGameResults>(result));
        }
Example #2
0
        public string GetMe()
        {
            string userId      = Utilities.GetUserId(this.User);
            var    currentUser = this.context.POPpicUsers.FirstOrDefault(u => u.Id == userId);

            if (currentUser == null)
            {
                currentUser = Utilities.InitializeNewUser(this.User, this.Services.Log);
                currentUser = context.POPpicUsers.Add(currentUser);
                context.SaveChanges();
            }

            string output = CrossPlatformUtilities.SerializeItem <POPpicUser>(currentUser);

            return(output);
        }