class App42::Game::ScoreBoardService

ScoreBoard allows storing, retrieving, querying and ranking scores for users and Games across Game Session.

The Game service allows Game, User, Score and ScoreBoard Management on the Cloud. The service allows Game Developer to create a Game and then do in Game Scoring using the Score service. It also allows to maintain a Scoreboard across game sessions using the ScoreBoard service. One can query for average or highest score for user for a Game and highest and average score across users for a Game. It also gives ranking of the user against other users for a particular game. The Reward and RewardPoints allows the Game Developer to assign rewards to a user and redeem the rewards.

E.g. One can give Swords or Energy etc. The services Game, Score, ScoreBoard, Reward, RewardPoints can be used in Conjunction for complete Game Scoring and Reward Management.

@see Game, RewardPoint, RewardPoint, Score

Public Class Methods

new(api_key, secret_key, base_url) click to toggle source

this is a constructor that takes

@param apiKey @param secretKey @param baseURL

# File lib/game/ScoreBoardService.rb, line 36
def initialize(api_key, secret_key, base_url)
  puts "Game->initialize"
  @api_key = api_key
  @secret_key = secret_key
  @base_url = base_url
  @resource = "game/scoreboard"
  @version = "1.0"
end

Public Instance Methods

get_average_score_by_user(gameName, userName) click to toggle source

Retrieves the average game score for the specified user

@param gameName

- Name of the game for which average score has to be fetched

@param userName

- The user for which average score has to be fetched

@return Returns the average game score for the specified user

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 301
def get_average_score_by_user(gameName, userName)
  puts "Get Top Rankings Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(userName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName)
    params.store("userName", userName);
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/#{userName}/average"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_highest_score_by_user(gameName, userName) click to toggle source

Retrieves the highest game score for the specified user

@param gameName

- Name of the game for which highest score has to be fetched

@param userName

- The user for which highest score has to be fetched

@return Returns the highest game score for the specified user

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 161
def get_highest_score_by_user(gameName, userName)
  puts "Get Highest Score By User Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(userName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName)
    params.store("userName", userName)
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/#{userName}/highest"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_lowest_score_by_user(gameName, userName) click to toggle source

Retrieves the lowest game score for the specified user

@param gameName

- Name of the game for which lowest score has to be fetched

@param userName

- The user for which lowest score has to be fetched

@return Returns the lowest game score for the specified user

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 209
def get_lowest_score_by_user(gameName, userName)
  puts "Get Lowest Score By User Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(userName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName)
    params.store("userName", userName)
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/#{userName}/lowest"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_scores_by_user(gameName, userName) click to toggle source

Retrieves the scores for a game for the specified name

@param gameName

- Name of the game for which score has to be fetched

@param userName

- The user for which score has to be fetched

@return Returns the game score for the specified user

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 113
def get_scores_by_user(gameName, userName)
  puts "Get Score By User Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(userName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName)
    params.store("userName", userName)
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/#{userName}"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_top_n_rankings(gameName, max) click to toggle source

Retrieves the Top N Rankings for the specified game

@param gameName

- Name of the game for which ranks have to be fetched

@return Returns the Top rankings for a game

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 347
def get_top_n_rankings(gameName, max)
  puts "Get Top N Rankings Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(max, "Max");
  util.validateMax(max);
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName);
    params.store("max", ""+ max.to_s);
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/ranking/#{max.to_s}"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_top_rankings(gameName) click to toggle source

Retrieves the Top Rankings for the specified game

@param gameName

- Name of the game for which ranks have to be fetched

@return Returns the Top rankings for a game

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 255
def get_top_rankings(gameName)
  puts "Get Top Rankings Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName)
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/ranking"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
get_user_ranking(gameName, userName) click to toggle source

Retrieves the User Ranking for the specified game

@param gameName

- Name of the game for which ranks have to be fetched

@param userName

- Name of the user for which ranks have to be fetched

@return Returns the rank of the User

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 396
def get_user_ranking(gameName, userName)
  puts "get_user_ranking Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(userName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("name", gameName);
    params.store("userName", ""+userName);
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}/#{gameName}/#{userName}/ranking"
    response = connection.get(signature, resource_url, query_params)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end
save_user_score(gameName, gameUserName, gameScore) click to toggle source

Saves the User score for a game

@param gameName

- Name of the game for which score has to be saved

@param gameUserName

- The user for which score has to be saved

@param gameScore

- The sore that has to be saved

@return Returns the saved score for a game

@raise App42Exception

# File lib/game/ScoreBoardService.rb, line 60
def save_user_score(gameName, gameUserName, gameScore)
  puts "Save User Score Called "
  puts "Base url #{@base_url}"
  response = nil;
  scoreboardObj = nil;
  scoreboardObj = Game.new
  util = Util.new
  util.throwExceptionIfNullOrBlank(gameName, "Game Name");
  util.throwExceptionIfNullOrBlank(gameUserName, "User Name");
  begin
    connection = App42::Connection::RESTConnection.new(@base_url)
    body = {'app42' => {"game"=> {
      "name" => gameName,"scores" => { "score" => {
      "value" => gameScore,
      "userName" => gameUserName
      }}}}}.to_json
    puts "Body #{body}"
    query_params = Hash.new
    params = {
      'apiKey'=> @api_key,
      'version' => @version,
      'timeStamp' => util.get_timestamp_utc,
    }
    query_params = params.clone
    params.store("body", body)
    puts query_params
    signature = util.sign(@secret_key, params)
    resource_url = "#{@version}/#{@resource}"
    response = connection.post(signature, resource_url, query_params, body)
    puts "Response is #{response}"
    game = GameResponseBuilder.new()
    scoreboardObj = game.buildResponse(response)
  rescue  App42Exception =>e
    raise e
  rescue  Exception => e
    raise App42Exception.new(e)
  end
  return scoreboardObj
end