예제 #1
0
        private void Send(string key, string value, EvaluationDataType dataType, Action <bool> onComplete = null)
        {
            if (SUGARManager.UserSignedIn)
            {
                var data = new EvaluationDataRequest
                {
                    CreatingActorId    = SUGARManager.CurrentUser.Id,
                    GameId             = SUGARManager.GameId,
                    Key                = key,
                    Value              = value,
                    EvaluationDataType = dataType
                };

                SUGARManager.client.GameData.AddAsync(data,
                                                      response =>
                {
                    Debug.Log("GameData Sending Success: True");
                    onComplete?.Invoke(true);
                },
                                                      exception =>
                {
                    Debug.LogError($"GameData Sending Success: False. Exception: {exception}");
                    onComplete?.Invoke(false);
                });
            }
            else
            {
                onComplete?.Invoke(false);
            }
        }
        public void CanGetGlobalLeaderboardStandings()
        {
            var key             = "Leaderboard_CanGetGlobalLeaderboardStandings";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var gameData = new EvaluationDataRequest
            {
                Key = key,
                EvaluationDataType = EvaluationDataType.Long,
                CreatingActorId    = loggedInAccount.User.Id,
                Value  = "5",
                GameId = Platform.GlobalGameId
            };

            Fixture.SUGARClient.GameData.Add(gameData);

            var standingsRequest = new LeaderboardStandingsRequest
            {
                LeaderboardToken      = key,
                LeaderboardFilterType = LeaderboardFilterType.Top,
                PageLimit             = 10,
                PageOffset            = 0,
                GameId           = Platform.GlobalGameId,
                MultiplePerActor = false
            };

            var standingsResponse = Fixture.SUGARClient.Leaderboard.CreateGetLeaderboardStandings(standingsRequest);

            Assert.Equal(1, standingsResponse.Count());
            Assert.Equal(loggedInAccount.User.Name, standingsResponse.First().ActorName);
        }
        public void CannotGetGroupMembersLeaderboardStandingsWithIncorrectActorType()
        {
            var key             = "Leaderboard_CannotGetGroupMembersWithIncorrectActorType";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var gameData = new EvaluationDataRequest
            {
                Key = key,
                EvaluationDataType = EvaluationDataType.Long,
                CreatingActorId    = loggedInAccount.User.Id,
                Value  = "5",
                GameId = game.Id
            };

            Fixture.SUGARClient.GameData.Add(gameData);

            var standingsRequest = new LeaderboardStandingsRequest
            {
                LeaderboardToken      = key,
                GameId                = game.Id,
                ActorId               = loggedInAccount.User.Id,
                LeaderboardFilterType = LeaderboardFilterType.GroupMembers,
                PageLimit             = 10,
                PageOffset            = 0
            };

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.Leaderboard.CreateGetLeaderboardStandings(standingsRequest));
        }
        public void CanGetGlobalGameData()
        {
            var key             = "GameData_CanGetGameDataWithoutGameId";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = Platform.GlobalGameId,
                Key                = key,
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            var response = Fixture.SUGARClient.GameData.Add(evaluationDataRequest);

            var get = Fixture.SUGARClient.GameData.Get(loggedInAccount.User.Id, Platform.GlobalGameId, new[] { key });

            Assert.Equal(1, get.Count());
            Assert.Equal(get.First().CreatingActorId, response.CreatingActorId);
            Assert.Equal(get.First().GameId, response.GameId);
            Assert.Equal(get.First().Key, response.Key);
            Assert.Equal(get.First().Value, response.Value);
            Assert.Equal(get.First().EvaluationDataType, response.EvaluationDataType);
        }
 public static ActorData ToActorDataModel(this EvaluationDataRequest dataContract)
 {
     return(new ActorData
     {
         ActorId = dataContract.CreatingActorId.Value,
         GameId = dataContract.GameId.Value,
         Key = dataContract.Key,
         Value = dataContract.Value,
         EvaluationDataType = dataContract.EvaluationDataType.Value
     });
 }
 public static EvaluationData ToMatchDataModel(this EvaluationDataRequest contract)
 {
     return(new EvaluationData {
         GameId = contract.GameId.Value,
         MatchId = contract.MatchId,
         ActorId = contract.CreatingActorId.Value,
         Key = contract.Key,
         Value = contract.Value,
         EvaluationDataType = contract.EvaluationDataType.Value,
         Category = EvaluationDataCategory.MatchData
     });
 }
예제 #7
0
 public async Task <IActionResult> Add([FromBody] EvaluationDataRequest newData)
 {
     if ((await _authorizationService.AuthorizeAsync(User, newData.CreatingActorId, HttpContext.ScopeItems(ClaimScope.Group))).Succeeded ||
         (await _authorizationService.AuthorizeAsync(User, newData.CreatingActorId, HttpContext.ScopeItems(ClaimScope.User))).Succeeded ||
         (await _authorizationService.AuthorizeAsync(User, newData.GameId, HttpContext.ScopeItems(ClaimScope.Game))).Succeeded)
     {
         var data = newData.ToGameDataModel();
         _gameDataCoreController.Add(data);
         var dataContract = data.ToContract();
         return(new ObjectResult(dataContract));
     }
     return(Forbid());
 }
예제 #8
0
        /// <summary>
        /// Create a new GameData record.
        /// </summary>
        /// <param name="data"><see cref="EvaluationDataRequest"/> object that holds the details of the new GameData.</param>
        /// <returns>A <see cref="EvaluationDataResponse"/> containing the new GameData details.</returns>
        public EvaluationDataResponse Add(EvaluationDataRequest data)
        {
            if (data.Key == null)
            {
                throw new ArgumentException("No Key provided. Keys must be non-empty strings containing only alpha-numeric characters and underscores.");
            }
            if (!RegexUtil.IsAlphaNumericUnderscoreNotEmpty(data.Key))
            {
                throw new ArgumentException($"Invalid Key {data.Key}. Keys must be non-empty strings containing only alpha-numeric characters and underscores.");
            }

            var query = GetUriBuilder(ControllerPrefix).ToString();

            return(Post <EvaluationDataRequest, EvaluationDataResponse>(query, data));
        }
        public void CannotCreateWithoutGameId()
        {
            var key             = "GameData_CanCreateWithoutGameId";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                Key                = key,
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));
        }
        public void CantCreateWithInValidKey(string dataKey)
        {
            var key             = "GameData_CantCreateWithInValidKey";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                Key   = dataKey,
                Value = "TestValue",
                EvaluationDataType = EvaluationDataType.String,
                CreatingActorId    = loggedInAccount.User.Id
            };

            // Act Assert
            Assert.Throws <ArgumentException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));
        }
        public void CanGetGameDataByMultipleKeys()
        {
            var key             = "GameData_CanGetGameDataByMultipleKeys";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var evaluationDataRequestOne = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key + "1",
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            var evaluationDataRequestTwo = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key + "2",
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            var evaluationDataRequestThree = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key + "3",
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            Fixture.SUGARClient.GameData.Add(evaluationDataRequestOne);
            Fixture.SUGARClient.GameData.Add(evaluationDataRequestTwo);
            Fixture.SUGARClient.GameData.Add(evaluationDataRequestThree);

            var get = Fixture.SUGARClient.GameData.Get(loggedInAccount.User.Id, game.Id, new[] { evaluationDataRequestOne.Key, evaluationDataRequestTwo.Key, evaluationDataRequestThree.Key });

            Assert.Equal(3, get.Count());
            foreach (var g in get)
            {
                Assert.Equal("Test Value", g.Value);
            }
        }
        public void CannotGetGameDataWithoutActorId()
        {
            var key             = "GameData_CannotGetGameDataWithoutActorId";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key,
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            Fixture.SUGARClient.GameData.Add(evaluationDataRequest);

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Get(Platform.GlobalActorId, game.Id, new[] { key }));
        }
        public void CanCreateWithValidKey(string dataKey)
        {
            var key             = "GameData_CanCreateWithValidKey";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            // Act
            var evaluationDataRequest = new EvaluationDataRequest
            {
                Key                = dataKey,
                GameId             = Platform.GlobalGameId,
                Value              = "TestValue",
                EvaluationDataType = EvaluationDataType.String,
                CreatingActorId    = loggedInAccount.User.Id
            };

            var response = Fixture.SUGARClient.GameData.Add(evaluationDataRequest);

            // Assert
            Assert.NotNull(response);
        }
        public void CannotCreateWithMismatchedData()
        {
            var key             = "GameData_CannotCreateWithMismatchedData";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key,
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.Float
            };

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));

            evaluationDataRequest.EvaluationDataType = EvaluationDataType.Long;

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));

            evaluationDataRequest.EvaluationDataType = EvaluationDataType.Boolean;

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));

            evaluationDataRequest.EvaluationDataType = EvaluationDataType.Float;
            evaluationDataRequest.Value = "True";

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));

            evaluationDataRequest.EvaluationDataType = EvaluationDataType.Long;

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));

            evaluationDataRequest.EvaluationDataType = EvaluationDataType.Boolean;
            evaluationDataRequest.Value = "2";

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.GameData.Add(evaluationDataRequest));
        }
 public async Task <IActionResult> Add([FromBody] EvaluationDataRequest newData)
 {
     if ((await _authorizationService.AuthorizeAsync(User, newData.CreatingActorId, HttpContext.ScopeItems(ClaimScope.Group))).Succeeded ||
         (await _authorizationService.AuthorizeAsync(User, newData.CreatingActorId, HttpContext.ScopeItems(ClaimScope.User))).Succeeded)
     {
         var data   = newData.ToActorDataModel();
         var exists = _actorDataCoreController.KeyExists(data.GameId, data.ActorId, data.Key);
         if (exists)
         {
             var existing  = _actorDataCoreController.Get(data.GameId, data.ActorId, new[] { data.Key });
             var firstData = existing.ElementAt(0);
             data.Id = firstData.Id;
             _actorDataCoreController.Update(data);
         }
         else
         {
             _actorDataCoreController.Add(data);
         }
         var dataContract = data.ToContract();
         return(new ObjectResult(dataContract));
     }
     return(Forbid());
 }
        public void CanCreate()
        {
            var key             = "GameData_CanCreate";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var evaluationDataRequest = new EvaluationDataRequest
            {
                CreatingActorId    = loggedInAccount.User.Id,
                GameId             = game.Id,
                Key                = key,
                Value              = "Test Value",
                EvaluationDataType = EvaluationDataType.String
            };

            var response = Fixture.SUGARClient.GameData.Add(evaluationDataRequest);

            Assert.Equal(evaluationDataRequest.CreatingActorId, response.CreatingActorId);
            Assert.Equal(evaluationDataRequest.GameId, response.GameId);
            Assert.Equal(evaluationDataRequest.Key, response.Key);
            Assert.Equal(evaluationDataRequest.Value, response.Value);
            Assert.Equal(evaluationDataRequest.EvaluationDataType, response.EvaluationDataType);
        }
        public void CanGetMultipleLeaderboardStandingsForActor()
        {
            var key             = "Leaderboard_CanGetMultipleLeaderboardStandingsForActor";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);
            var count           = 10;

            for (var i = 1; i < count + 1; i++)
            {
                var gameData = new EvaluationDataRequest
                {
                    Key = key,
                    EvaluationDataType = EvaluationDataType.Long,
                    CreatingActorId    = loggedInAccount.User.Id,
                    Value  = i.ToString(),
                    GameId = game.Id
                };

                Fixture.SUGARClient.GameData.Add(gameData);
            }

            var standingsRequest = new LeaderboardStandingsRequest
            {
                LeaderboardToken      = key,
                LeaderboardFilterType = LeaderboardFilterType.Top,
                PageLimit             = 10,
                PageOffset            = 0,
                GameId           = game.Id,
                MultiplePerActor = true
            };

            var standingsResponse = Fixture.SUGARClient.Leaderboard.CreateGetLeaderboardStandings(standingsRequest);

            Assert.Equal(count, standingsResponse.Count());
            Assert.Equal(count.ToString(), standingsResponse.First().Value);
        }
예제 #18
0
 public void AddAsync(EvaluationDataRequest data, Action <EvaluationDataResponse> onSuccess, Action <Exception> onError)
 {
     AsyncRequestController.EnqueueRequest(() => Add(data),
                                           onSuccess,
                                           onError);
 }
예제 #19
0
        /// <summary>
        /// Create a new Match Data record.
        /// </summary>
        /// <param name="data"><see cref="EvaluationDataRequest"/> object that holds the details of the new Match Data.</param>
        /// <returns>A <see cref="EvaluationDataResponse"/> containing the new Match Data details.</returns>
        public EvaluationDataResponse AddData(EvaluationDataRequest data)
        {
            var query = GetUriBuilder(ControllerPrefix).ToString();

            return(Post <EvaluationDataRequest, EvaluationDataResponse>(query, data));
        }