Class: Gs2::Ranking::Client
- Inherits:
-
Core::AbstractClient
- Object
- Core::AbstractClient
- Gs2::Ranking::Client
- Defined in:
- lib/gs2/ranking/Client.rb
Overview
GS2-Ranking クライアント
Constant Summary
- @@ENDPOINT =
'ranking'
- @@VARIATION =
'a'
Class Method Summary collapse
-
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。.
-
.VARIATION(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。.
Instance Method Summary collapse
-
#create_game_mode(request) ⇒ Array
ゲームモードを作成
ゲームモードを作成すると、ゲームモードの設定としてランキングが昇順なのか、降順なのかを設定できます。
レースゲームのようなタイムの値が小さいほど上位のランキングの場合は昇順を、
アクションゲームなどで、スコアの値が大きいほど上位のランキングの場合は降順を選択します。
他に、集計間隔を15分以上、24時間以下で分単位で設定できます。
ランキングを更新したい間隔に合わせて設定することになります。
集計処理毎に費用が発生するため、高頻度であればあるほど利用料金は高くなります。
. -
#create_ranking_table(request) ⇒ Array
ランキングテーブルを作成
GS2-Ranking を利用するには、まずランキングテーブルを作成する必要があります。
1つのランキングテーブルには複数のゲームモードのランキングを格納することができます。
. -
#delete_game_mode(request) ⇒ Object
ゲームモードを削除.
-
#delete_ranking_table(request) ⇒ Object
ランキングテーブルを削除.
-
#describe_game_mode(request, pageToken = nil, limit = nil) ⇒ Array
ゲームモードリストを取得.
-
#describe_ranking_table(pageToken = nil, limit = nil) ⇒ Array
ランキングテーブルリストを取得.
-
#get_estimate_rank(request) ⇒ Array
スコアを指定しておおよその順位を取得
指定したスコアを取ったと仮定して何位ぐらいになれるのか、といった指標を計算する際に利用します。
原則1000位単位でおおよその順位を応答します。
上位プレイヤーに対しては1000位単位の解像度では情報が不足している場合があると思いますので、
応答が上位プレイヤーだった場合は、更に #get_ranking で上位のスコアを取得して
さらに詳細な順位に絞り込んで情報提供する。というのもユーザ体験をよく出来ると思います。
. -
#get_game_mode(request) ⇒ Array
ゲームモードを取得.
-
#get_my_rank(request) ⇒ Array
自分の順位を取得
自分の順位を取得できます、応答される値は集計時点での正確な値となります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#get_ranking(request, offset = nil, limit = nil) ⇒ Array
ランキングを取得
ランキングを取得します。
ランキングにはユーザID、スコア、メタデータといった基本情報のほかに、インデックスと順位が付加されています。
インデックスは先頭を1とした位置情報で、順位は同一スコアのユーザを同一順位として計算された値です。
ランキングの性質上、同一スコアでも別順位として扱いたい場合は順位の代わりにインデックスを利用することで実現できます。
ランキングデータはランダムアクセスができますので、#get_my_rank で自分の順位を取得して、
その前後のランキンデータを取得する。というような処理も実現できます。
. -
#get_ranking_table(request) ⇒ Array
ランキングテーブルを取得.
-
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
constructor
コンストラクタ.
-
#put_score(request) ⇒ Array
スコアを登録
スコアの登録は一時的にバッファリングされ、定期的にランキングデータとして書き込まれます。
そのため、スコア登録直後にランキング集計が開始された場合は、集計結果に含まれない可能性があります。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#update_game_mode(request) ⇒ Array
ゲームモードを更新.
-
#update_ranking_table(request) ⇒ Array
ランキングテーブルを更新.
Constructor Details
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
コンストラクタ
18 19 20 |
# File 'lib/gs2/ranking/Client.rb', line 18 def initialize(region, gs2_client_id, gs2_client_secret) super(region, gs2_client_id, gs2_client_secret) end |
Class Method Details
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。
23 24 25 26 27 28 29 |
# File 'lib/gs2/ranking/Client.rb', line 23 def self.ENDPOINT(v = nil) if v @@ENDPOINT = v else return @@ENDPOINT end end |
.VARIATION(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。
32 33 34 35 36 37 38 |
# File 'lib/gs2/ranking/Client.rb', line 32 def self.VARIATION(v = nil) if v @@VARIATION = v else return @@VARIATION end end |
Instance Method Details
#create_game_mode(request) ⇒ Array
ゲームモードを作成
ゲームモードを作成すると、ゲームモードの設定としてランキングが昇順なのか、降順なのかを設定できます。
レースゲームのようなタイムの値が小さいほど上位のランキングの場合は昇順を、
アクションゲームなどで、スコアの値が大きいほど上位のランキングの場合は降順を選択します。
他に、集計間隔を15分以上、24時間以下で分単位で設定できます。
ランキングを更新したい間隔に合わせて設定することになります。
集計処理毎に費用が発生するため、高頻度であればあるほど利用料金は高くなります。
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/gs2/ranking/Client.rb', line 234 def create_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end body = {} if request.has_key?('gameMode'); body['gameMode'] = request['gameMode']; end if request.has_key?('asc'); body['asc'] = request['asc']; end if request.has_key?('calcInterval'); body['calcInterval'] = request['calcInterval']; end query = {} return post( 'Gs2Ranking', 'CreateGameMode', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode', body, query); end |
#create_ranking_table(request) ⇒ Array
ランキングテーブルを作成
GS2-Ranking を利用するには、まずランキングテーブルを作成する必要があります。
1つのランキングテーブルには複数のゲームモードのランキングを格納することができます。
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/gs2/ranking/Client.rb', line 83 def create_ranking_table(request) if not request; raise ArgumentError.new(); end body = {} if request.has_key?('name'); body['name'] = request['name']; end if request.has_key?('description'); body['description'] = request['description']; end query = {} return post( 'Gs2Ranking', 'CreateRankingTable', @@ENDPOINT, @@VARIATION, '/ranking', body, query); end |
#delete_game_mode(request) ⇒ Object
ゲームモードを削除
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
# File 'lib/gs2/ranking/Client.rb', line 326 def delete_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} return delete( 'Gs2Ranking', 'DeleteGameMode', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], query); end |
#delete_ranking_table(request) ⇒ Object
ランキングテーブルを削除
159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/gs2/ranking/Client.rb', line 159 def delete_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} return delete( 'Gs2Ranking', 'DeleteRankingTable', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'], query); end |
#describe_game_mode(request, pageToken = nil, limit = nil) ⇒ Array
ゲームモードリストを取得
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/gs2/ranking/Client.rb', line 192 def describe_game_mode(request, pageToken = nil, limit = nil) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'DescribeGameMode', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode', query); end |
#describe_ranking_table(pageToken = nil, limit = nil) ⇒ Array
ランキングテーブルリストを取得
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/gs2/ranking/Client.rb', line 54 def describe_ranking_table(pageToken = nil, limit = nil) query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'DescribeRankingTable', @@ENDPOINT, @@VARIATION, '/ranking', query); end |
#get_estimate_rank(request) ⇒ Array
スコアを指定しておおよその順位を取得
指定したスコアを取ったと仮定して何位ぐらいになれるのか、といった指標を計算する際に利用します。
原則1000位単位でおおよその順位を応答します。
上位プレイヤーに対しては1000位単位の解像度では情報が不足している場合があると思いますので、
応答が上位プレイヤーだった場合は、更に
#get_ranking で上位のスコアを取得して
さらに詳細な順位に絞り込んで情報提供する。というのもユーザ体験をよく出来ると思います。
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 |
# File 'lib/gs2/ranking/Client.rb', line 483 def get_estimate_rank(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} if request.has_key?('score'); body['score'] = request['score']; end return get( 'Gs2Ranking', 'GetEstimateRank', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking/estimate', query); end |
#get_game_mode(request) ⇒ Array
ゲームモードを取得
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/gs2/ranking/Client.rb', line 269 def get_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} return get( 'Gs2Ranking', 'GetGameMode', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], query); end |
#get_my_rank(request) ⇒ Array
自分の順位を取得
自分の順位を取得できます、応答される値は集計時点での正確な値となります。
accessToken
には
Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 |
# File 'lib/gs2/ranking/Client.rb', line 445 def get_my_rank(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } query = {} return get( 'Gs2Ranking', 'GetMyRank', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking/rank', query, header); end |
#get_ranking(request, offset = nil, limit = nil) ⇒ Array
ランキングを取得
ランキングを取得します。
ランキングにはユーザID、スコア、メタデータといった基本情報のほかに、インデックスと順位が付加されています。
インデックスは先頭を1とした位置情報で、順位は同一スコアのユーザを同一順位として計算された値です。
ランキングの性質上、同一スコアでも別順位として扱いたい場合は順位の代わりにインデックスを利用することで実現できます。
ランキングデータはランダムアクセスができますので、#get_my_rank で自分の順位を取得して、
その前後のランキンデータを取得する。というような処理も実現できます。
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 |
# File 'lib/gs2/ranking/Client.rb', line 367 def get_ranking(request, offset = nil, limit = nil) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end query = {} if offset; query['offset'] = offset; end if limit; query['limit'] = limit; end return get( 'Gs2Ranking', 'GetRanking', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking', query); end |
#get_ranking_table(request) ⇒ Array
ランキングテーブルを取得
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/gs2/ranking/Client.rb', line 111 def get_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end query = {} return get( 'Gs2Ranking', 'GetRankingTable', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'], query); end |
#put_score(request) ⇒ Array
スコアを登録
スコアの登録は一時的にバッファリングされ、定期的にランキングデータとして書き込まれます。
そのため、スコア登録直後にランキング集計が開始された場合は、集計結果に含まれない可能性があります。
accessToken には
Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'lib/gs2/ranking/Client.rb', line 406 def put_score(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end body = {} if request.has_key?('score'); body['score'] = request['score']; end if request.has_key?('meta'); body['meta'] = request['meta']; end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } query = {} return post( 'Gs2Ranking', 'PutScore', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'] + '/ranking', body, query, header); end |
#update_game_mode(request) ⇒ Array
ゲームモードを更新
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
# File 'lib/gs2/ranking/Client.rb', line 302 def update_game_mode(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end if not request.has_key?('gameMode'); raise ArgumentError.new(); end if not request['gameMode']; raise ArgumentError.new(); end body = {} if request.has_key?('calcInterval'); body['calcInterval'] = request['calcInterval']; end query = {} return put( 'Gs2Ranking', 'UpdateGameMode', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'] + '/mode/' + request['gameMode'], body, query); end |
#update_ranking_table(request) ⇒ Array
ランキングテーブルを更新
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/gs2/ranking/Client.rb', line 138 def update_ranking_table(request) if not request; raise ArgumentError.new(); end if not request.has_key?('rankingTableName'); raise ArgumentError.new(); end if not request['rankingTableName']; raise ArgumentError.new(); end body = {} if request.has_key?('description'); body['description'] = request['description']; end query = {} return put( 'Gs2Ranking', 'UpdateRankingTable', @@ENDPOINT, @@VARIATION, '/ranking/' + request['rankingTableName'], body, query); end |