(57)【要約】 【課題】複数のゲーム機で行われたゲームについてのランキング表示をゲーム機で行えるようにする。【解決手段】複数のゲーム機で行われたゲームのレーティングを統合サーバで集積し、ランキングを決定して各ゲーム機にランキングを伝える。統合サーバはメモリツリーを使用してランキングを決定する。登録のユーザの増減に応じてメモリツリーのノードが保有するカウント値も増減される。【選択図】図１３
2008173518.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令をその上に保存した１つまたは複数のコンピュータ可読媒体であって、前記複数の命令は、ゲーム機の１つまたは複数のプロセッサによって実行される場合に、１つまたは複数のプロセッサに、
ゲーム機のユーザの複数の友人を識別するステップと、
複数の友人のそれぞれについて、複数の友人およびユーザがゲームタイトルについて互いに比較してどのようにランキングされるかの指示を取り出すためにサーバにアクセスするステップと、
ユーザに、複数の友人およびユーザがゲームタイトルについて互いに比較してどれほどよくランキングされるかを表示するステップと
を行わせることを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項２】
複数の友人およびゲームタイトルのランクが互いにどのように比較されるかの指示は、統計サーバによって生成されるランキングを含むことを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項３】
複数の友人およびゲームタイトルのランクが互いにどのように比較されるかの指示は、複数の友人およびユーザのそれぞれについて、友人またはユーザに関連するスコアを含むことを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項４】
複数の命令をその上に保存した１つまたは複数のコンピュータ可読媒体であって、前記複数の命令は、１つまたは複数のプロセッサによって実行される場合に、１つまたは複数のプロセッサに、
取り出すユーザランキングのウィンドウを識別する要求を受信するステップであって、要求は、ウィンドウが配置される場所の基準の指示を含む、ステップと、
基準の指示に関連するユーザランキングより低い１つまたは複数のユーザラインキングを取り出すステップと、
基準の指示に関連するユーザランキングより高い１つまたは複数のユーザラインキングを取り出すステップと、
ユーザランキングのウィンドウの少なくとも一部として、取り出されたランキングを返すステップと
を行わせることを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項５】
基準の指示は、ユーザランキングを含むことを特徴とする請求項４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項６】
基準の指示は、ユーザ識別子を含み、命令は、さらに、１つまたは複数のプロセッサに、基準の指示に関連するユーザランキングを取り出し、ユーザランキングのウィンドウの少なくとも一部として、取り出されたユーザランキングを返すステップを行わせることを特徴とする請求項４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７】
要求は、さらに、ユーザランキングのウィンドウに含めるために基準の指示に関連するユーザランキングより低いユーザランキングの数の指示と、ユーザランキングのウィンドウに含めるために基準の指示に関連するユーザランキングより高いユーザランキングの数の指示とを含むことを特徴とする請求項４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項８】
１つまたは複数のプロセッサに、ユーザランキングを取り出すステップを行わせる命令は、さらに、１つまたは複数のプロセッサに、
ランキングを取り出すためのユーザ識別子を受信するステップと、
複数のレーティンググループのどれにユーザ識別子が割り当てられるかを識別するステップと、
ツリーの葉ノードを識別するステップであって、葉ノードは、ユーザ識別子が割り当てられるレーティンググループに対応する、ステップと、
葉ノードからツリーのルートノードまでのツリー内のパスを、パスに沿った選択されたユーザカウントを合計しながら追跡するステップと、
ユーザ識別子が割り当てられるレーティンググループ内のユーザ識別子の相対位置を識別するステップと、
ランキングとして、相対位置とパスに沿った選択されたユーザカウントの合計との合計を生成するステップと
を行わせることを特徴とする請求項４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項９】
１つまたは複数のプロセッサに、パスに沿った選択されたユーザカウントを合計させる命令が、１つまたは複数のプロセッサに、
初期総カウント値に０をセットするステップと、
葉ノードのそれぞれおよび葉ノードとルートノードとの間のパスに沿ったすべてのノードについて、
ノードが左兄弟を有するかどうかを検査するステップと、
左兄弟に関連するカウント値を総カウント値に加算するステップと
を行わせることを特徴とする請求項８に記載の１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータおよびオンラインシステムに関し、具体的には、オンラインのコンソールベースのゲームの統計システムで決定されたランキングをゲーム機で表示させるための命令を記録したコンピュータ可読媒体に関する。
【背景技術】
【０００２】
従来、専用コンソールを有するゲームシステムは、制限された数のプレーヤ（たとえば２〜４人）に対応する独立の機械であった。パーソナルコンピュータベースのゲームの人気が、部分的にはインターネットを介して多数のリモートプレーヤと共にオンラインでゲームをプレイする能力のゆえに、高まった。したがって、専用ゲームシステムに関する傾向の１つが、インターネットベースのオンラインゲームなどのネットワークを介するゲームを容易にする能力を提供することである。
【０００３】
多くのユーザにとって重要な、そのような機能の１つが、プレーヤランキングを保持する能力である。そのようなランキングを用いると、プレーヤが、最速時間、最高得点、最多アイテム収集など、さまざまなゲーム依存の属性に基づいて他のプレーヤに対して自分をランキングできるようになる。プレーヤが、どのプレーヤがトップ１０またはトップ１００にランク入りしているか、特定のプレーヤのランキングは何か、次の順位のプレーヤのスコアはいくつか（たとえば、ランキングを上げるために何点とる必要があるかをユーザに知らせる）など、これらのランキングに関連するさまざまな情報を提示されることを望むと予想される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、プレーヤの数が増えるにつれて、そのようなランキングを保持するシステムを設計する際に直面する複雑さおよび難しさも、高まる。インターネットを用いると、世界中の個人の間での比較的簡単な通信が可能になり、したがって、ランキングを保持する必要がある可能性があるプレーヤの数が、数百万とは言わないまでも、簡単に数万程度になる可能性がある。現在、システムは、そのような多数のプレーヤと共に提示される時にプレーヤランキングに関するそのような情報を提供できない。
【０００５】
下で説明するオンラインのコンソールベースのゲームの統計システムによって、これらの問題が解決される。
【課題を解決するための手段】
【０００６】
オンラインのコンソールベースのゲームの統計システムをここで説明する。
【０００７】
ある実施形態によれば、ユーザのスコアが、ゲーム機から受信され、スコアテーブル内の、ユーザの識別子が挿入される場所が識別される。ユーザは、複数のスコアグループの１つに割り当てられ、そのスコアグループに関連するユーザ数のカウントが、それ相応に修正される。割り当てられたスコアグループ内のユーザの相対位置も、ユーザに関連付けられ、同一のスコアグループに割り当てられ、そのユーザより低いスコアを有する他のすべてのユーザの相対位置も、それ相応に修正される。
【０００８】
ある他の実施形態によれば、ランキングを取り出すためのユーザ識別子が受信され、このランキングは、識別されたユーザに関連するレーティング（格付け）を他のユーザに関連する他のレーティングとどのように比較するかを示す。ユーザ識別子が複数のレーティンググループのどれに割り当てられるかが識別され、ツリーの葉ノードも識別される。この葉ノードは、ユーザ識別子が割り当てられるレーティンググループに対応する。ツリー内のパスを、葉ノードからツリーのルートノードまで追跡（トラバース）し、パスに沿って選択されたユーザカウントを合計する。ユーザ識別子が割り当てられたレーティンググループ内のユーザ識別子の相対位置が識別され、相対位置と、パスに沿った選択されたユーザカウントの合計との合計としてランキングが生成される。
【発明を実施するための最良の形態】
【０００９】
同一の符号は、本明細書全体を通じて、同様のコンポーネントおよび／または特徴を示すのに使用される。
【００１０】
図１は、例示的環境１００のブロック図である。複数のクライアントデバイス１０２（１）、．．．、１０２（ｎ）が、統計システム１０４に結合される。デバイス１０２およびシステム１０４の間の結合は、システム１０４およびデバイス１０２のそれぞれの間の通信を可能にするさまざまな結合のいずれかとすることができる。一実施形態では、結合に、インターネットが含まれ、任意選択として、１つまたは複数の他のネットワーク（たとえば、ローカルエリアネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ））も含めることができる。
【００１１】
ゲーム機１０２は、専用ゲーム機とすることができ、その代わりに、追加の機能性を含めることができる。たとえば、ゲーム機に、ディジタルＶＣＲとして動作できるようにディジタルビデオ録画機能性を含めることができ、ゲーム機に、テレビジョン信号（放送信号、ケーブル信号、衛星信号など）に同調し、これを復号化できるようにチャネル同調機能性を含めることができるなどである。さらに、異なるタイプのゲーム機１０２が、統計システム１０４を同時に使用することができる。たとえば、２つの異なるゲーム機プラットフォーム（たとえば、２つの異なる製造業者によって製造された専用ゲーム機）の両方が、同一のおよび／または異なるゲームタイトルについてレーティング、属性、および／またはランキングを送信し、受信することができる。
【００１２】
統計システム１０４には、システムメモリ１０６および永続ストア１０８が含まれる。統計システム１０４は、単一のサーバデバイスまたはその代わりに複数のサーバデバイスを使用して実施することができる。複数のサーバデバイスが使用される場合には、複数のデバイスが一緒に働いて、システム１０４の機能性を提供する。システム１０４内のさまざまなサーバデバイスの作業負荷は、さまざまな形のいずれかでさまざまなサーバデバイスの間で分割することができる。たとえば、ランキングの異なる部分を、異なるデバイスによって処理することができ（たとえば、上側のほぼ半分をあるデバイスが処理し、下側のほぼ半分を別のデバイスが処理する）、異なるゲームタイトルまたはゲームタイトル製造業者のランキングを、異なるデバイスによって処理することができ、同一のゲームタイトルの異なる属性を、異なるデバイスによって処理することができるなどである。
【００１３】
システム１０４には、１つまたは複数のレーティングテーブル１１０、１つまたは複数のグループテーブル１１２、属性ストア１１４、および１つまたは複数のメモリツリー１１６が含まれる。メモリツリー１１６は、システムメモリ１０６（たとえば、ランダムアクセスメモリ）内で保持される。メモリツリー１１６は、下で詳細に説明するように、テーブル１１０および１１２の内容に基づいて、必要に応じて（たとえばシステム１０４がブートされる場合）再構築し、システムメモリ１０６にロードすることができる。その代わりに、メモリツリー１１６（ツリー１１６だけの構造またはツリー１１６のデータを伴うツリー１１６の構造）を、永続ストア１０８内で保持することもできる。
【００１４】
さらに、テーブル１１０および１１２ならびに属性ストア１１４が、永続ストア１０８内で保持されるものとして図示されている。さまざまな時に、テーブル１１０および１１２ならびに属性ストア１１４のすべてまたは一部を、システムメモリ１０６に格納することもできる。テーブル１１０または１１２あるいはストア１１４のどの部分が所与の時点でシステムメモリ１０６に含むかは、変更することができ、システム１０４内で使用可能なシステムメモリの量に依存する。
【００１５】
システム１０４では、さまざまな形のいずれかで、テーブル１１０および１１２と属性ストア１１４と（任意選択としてメモリツリー１１６と）を、永続的に保存することができる。１つの例示的実施形態では、システム１０４で、ＳＱＬ（構造化照会言語）データベースを実施して、テーブル１１０および１１２と属性ストア１１４の属性と（任意選択としてメモリツリー１１６と）を保存する。１つまたは複数のＳＱＬ拡張ストアドプロシージャを、テーブル１１０および１１２のデータと属性ストア１１４の属性と（任意選択としてメモリツリー１１６と）を保存する際に、任意選択として使用することもできる。
【００１６】
動作中に、ゲーム機１０２は、そのゲーム機のユーザによってプレイされるゲームの異なる属性に基づくレーティングを生成する。これらのレーティングが生成される正確な形ならびにレーティングが何を表すかは、ゲームタイトルおよびゲーム設計者の望みによって変化する可能性がある。ユーザについて生成されるレーティングは、プレーヤのランキングを生成するのに使用される。これらのランキングを一緒にして、スコアボードとも称する。スコアボードは、全世界に分散した多数のプレーヤのランキングを有することができ、たとえば、１万個または１０万個あるいはそれ以上のユーザランキングを含めることができる。
【００１７】
異なる属性を使用して、レーティングを生成することができる。特定のレーティングを生成するのに使用される属性は、ゲーム設計者またはゲーム製造業者によって定義される。そのような属性の例に、勝ったゲームの数、負けたゲームの数、引き分けのゲームの数、ゲームで得たポイントの総計、ある行動をどれほど速く実行したか、作業を完了するのにどれほどの助けを受けたか、ある時間期間内にユーザが得たアイテムまたはオブジェクトの数、ゲームをプレイした時間などが含まれる。属性は、ゲーム設計者またはゲーム製造業者が望む任意の形で組み合わせることができ、属性が組み合わされる形は、ゲーム設計者またはゲーム製造業者によって定義される（通常は、そのような組合せが、実行中にゲームタイトルによって実行される）。
【００１８】
各ゲームタイトルが、１つまたは複数のレーティングを有する可能性がある。したがって、各レーティングの意味は、変化する可能性がある。たとえば、特定のゲームタイトルが、ユーザのスコアだけである１つのレーティングと、ユーザの最速時間だけであるもう１つのレーティングと、複数の上の属性の組合せであるもう１つのレーティングを有する場合がある。
【００１９】
一実施形態では、システム１０４によってゲームタイトルについて処理されるレーティングのそれぞれについて、異なるスコアボードが保持される。統計システム１０４は、スコアボードごとにレーティングテーブル１１０、グループテーブル１１２、およびメモリツリー１１６を保持する。
【００２０】
さらに、一実施形態では、統計システム１０４が、ゲームタイトルごとに、それが処理する異なるレーティングの数に対する制限を課す。そのような制限の例示的な範囲が、１５〜２０であるが、これより高い限度を使用することもできる。
【００２１】
統計システム１０４を用いると、ゲーム機１０２が、保存のためにシステム１０４にデータを送信し、システム１０４によって保存されたデータを取り出し、システム１０４からランキングを取り出すことができるようになる。ゲーム機は、特定のユーザに関するレーティングならびにこれらのレーティングを生成するのに使用された属性データの両方をシステム１０４に送信することができる。統計システム１０４が、レーティングが生成される形に関係する必要はない。しかし、統計システム１０４は、ゲーム機１０２のストレージデバイスとして動作し、ゲーム機から受信した個々の属性の値を属性ストア１１４に保存する。これらの属性値は、ユーザ識別子によって保存され、ゲーム機が後にユーザに関する情報を取り出すことができるようになっている。たとえば、最近のゲームプレイに鑑みてユーザのレーティングを再計算するゲーム機１０２が、システム１０４によって保存された前の属性を取り出し、これらの属性をユーザの新しいレーティングの計算に使用することができる。
【００２２】
動作中に、統計システム１０４が、ユーザのレーティングを受信する時に、システム１０４は、レーティングがどのゲームタイトルに対応するか、ならびにレーティングがゲームタイトルのどのスコアボードに対応するかを識別する。スコアボードを与えられて、統計システム１０４は、適当なレーティングテーブル１１０にアクセスする。システム１０４は、システム１０４によってサポートされる各ゲームタイトルのスコアボードごとに異なるレーティングテーブル１１０を保持する。特定のスコアボードのレーティングテーブルでは、レーティングがテーブルに含まれるユーザのユーザ識別子、ユーザのレーティング、ユーザに割り当てられたグループ（本明細書ではバケットとも称する）、およびそのグループでのユーザの相対位置が識別される。１つの例示的実施形態では、システム１０４を用いると、各レーティングテーブルで、ユーザ識別子ごとに、１つのレーティング、１つのグループ、および１つの相対位置だけを保持できるようになる。代替実施形態では、ユーザ識別子ごとに、複数のそのようなレーティング、グループ、および相対位置を保持することができる。
【００２３】
ユーザ識別子およびレーティングの両方が、システム１０４によって、ゲーム機１０２から受信される。システム１０４は、受信したレーティングに基づいて、特定のグループをユーザ識別子に（したがって、ユーザに）割り当てる。ユーザ識別子が割り当てられる特定のグループは、下で詳細に説明するように、ユーザのレーティングの変化またはグループの分割に起因するなどにより、経時的に変更することができる。
【００２４】
ユーザの相対位置は、システム１０４によって生成される。相対位置は、そのユーザと同一のバケットに割り当てられた他のユーザに対するユーザの相対的なランクを指す。相対位置は、特定のグループ内のさまざまなユーザをそのレーティングに基づいてランキングすることによって生成される。
【００２５】
システム１０４では、スコアボードごとに、レーティンググループテーブル１１２も保持される。グループテーブル１１２では、ユーザ識別子を割り当てることができる異なるグループまたはバケット、各グループが対応するレーティングの範囲、各グループに現在割り当てられているユーザ識別子のカウント、および閾値の個数のユーザ識別子がそのグループに割り当てられているかどうかを示す値（「フルインデックス」または「グループフルインデックス」と称する）が識別される。ユーザ識別子のこの閾値の値は、システム性能に基づいて経験的に、ゲームタイトルの挙動の観察に基づいて、などのさまざまな異なる形で判定することができる。１つの例示的実施形態では、この閾値の値が、６０〜８０程度であるが、他の値をその代わりに使用することができる。
【００２６】
代替案では、現在各グループに割り当てられているユーザ識別子のカウントを、グループテーブル１１２で保持する必要がない。このカウントは、グループテーブル１１２のカウントの代わりにまたはグループテーブル１１２のカウントに加えて、スコアボードについてメモリツリー１１６で保持することができる。
【００２７】
グループテーブル１１２およびレーティングテーブル１１０を、それぞれ、本明細書ではスコアボードごとの単一のテーブルとして説明するが、その代わりに、特定のスコアボードに関するレーティングテーブルを、複数のテーブルに分割することができ、特定のスコアボードに関するグループテーブルも、複数のテーブルに分割することができる。
【００２８】
図２に、例示的なレーティングテーブル１５０を示し、図３に、例示的なグループテーブル１６０を示す。図からわかるように、レーティングテーブル１５０では、グループ識別子、レーティング、および相対位置を含む、ユーザ識別子ごとの情報が保持される。レーティングテーブル１５０のグループ識別子によって、図３のテーブル１６０内のグループが識別される。グループテーブル１６０では、グループが対応するレーティングの範囲（下および上の値として示されている）、現在各グループに割り当てられているユーザ識別子の数のカウント、およびフルインデックスを含む各グループに関する情報が保持される。代替案では、現在各グループに割り当てられているユーザ識別子の数のカウントを、テーブル１６０内ではなく、テーブル１５０および１６０に対応するメモリツリーで保持することができる。
【００２９】
たとえば、図２および３のテーブル１５０および１６０を見ると、グループ２が、８０から８９までの範囲のレーティングに対応し、現在３つのユーザ識別子を割り当てられている（テーブル１５０にあるユーザ識別子１２、６７、および５７）。グループ２に割り当てられたユーザ識別子について、ユーザ識別子１２は、最高のレーティング（８９）を有し、したがって１の相対位置を有し、ユーザ識別子６７は、第２位のレーティング（８７）を有し、したがって２の相対位置を有し、ユーザ識別子５７は、第３位のランキング（８１）を有し、したがって３の相対位置を有する。
【００３０】
図１に戻ると、システム１０４では、レーティングをレーティングテーブル１１０に追加し、除去することができる。特定のユーザのレーティングが初めて特定のスコアボードについてシステム１０４にサブミットされる時に、新しいレーティングがテーブル１１０に追加される。ユーザが、任意選択として、スコアボードから自分を削除できるようにすることができ、これによって、ユーザの情報が対応するレーティングテーブル１１０から除去される。さらに、ユーザが新しいレーティングを有する（たとえば、ユーザによるゲームプレイの継続によって、ゲームタイトルが新しいレーティングを生成する結果になり、このレーティングがユーザの前のレーティングより高いか低い（または同一である）場合がある）場合に、ユーザの前のレーティングが、レーティングテーブル１１０から削除され、ユーザの新しいレーティングが、レーティングテーブル１１０に追加される。代替案では、ユーザの新しいレーティングが、そのユーザの前のレーティングと同一である場合に、そのような追加および削除を行う必要がない。
【００３１】
図４は、レーティングテーブル１１０にエントリを追加し、レーティングテーブル１１０からエントリを削除する例示的処理２００を示す流れ図である。図４の処理は、統計システム１０４によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはその組合せによって実行することができる。図４の処理を、図１のコンポーネントに関して説明する。
【００３２】
まず、レーティングテーブルエントリを追加または削除する要求を受信する（動作２０２）。追加要求または削除要求は、ゲーム機１０２によって明示的に発行することができ、その代わりに、暗黙（たとえば、ユーザのレーティングを更新または修正する要求（前の項目の削除要求およびシステム１０４による新しいエントリの追加要求に変換される）の発行によって）とすることができる。要求が追加要求である場合には、レーティングテーブル１１０内でユーザを追加する位置を識別する（動作２０４）。ユーザが、ユーザのレーティングに基づいてグループを割り当てられる（動作２０６）。ユーザが割り当てられるグループのカウントを、グループテーブル１１２および／またはメモリツリー１１６内で１つインクリメント（増分）し（動作２０８）、ユーザに、ユーザのグループ内の相対位置を割り当てる（動作２１０）。ユーザと同一のグループに割り当てられ、ユーザより低いレーティングを有する他のすべてのユーザの相対位置を、インクリメントする（動作２１２）。
【００３３】
レーティングテーブルエントリの追加の例を、図２、３、５、および６を参照して見ることができる。８８のレーティングを有する新しいユーザ（ユーザ識別子７６）が、図２のレーティングテーブル１５０に対応するスコアボードに追加されたと仮定する。図５に、ユーザ識別子７６のエントリが追加されている点を除いて図２のレーティングテーブル１５０に類似するレーティングテーブル２５０を示す。ユーザ識別子７６は、８８のレーティングを有し、したがって、バケット２に割り当てられる（図３からわかるように、バケット２は８０〜８９のレーティング範囲を有する）。ユーザ識別子（７６）、バケット識別子（２）、およびレーティング（８８）が、図５のテーブル２５０に追加されている。ユーザ識別子７６を有するユーザは、バケット２に割り当てられたユーザのうちで第２位のスコアを有し、したがって、２の相対位置を割り当てられる。バケット２に割り当てられ、ユーザ識別子７６のレーティングより低いレーティングを有する他のユーザ（すなわち、ユーザ識別子６７および５７）のそれぞれが、相対位置をインクリメントされている。したがって、図５からわかるように、ユーザ識別子６７は、現在は、３の相対位置を有し、ユーザ識別子６７は、４の相対位置を有する。さらに、グループ２にもう１人のユーザが追加されるので、図６のテーブル２６０からわかるように、グループ２のカウントが、４にインクリメントされている（さらにまたはその代わりに、スコアボードに関するメモリツリーのカウントがインクリメントされる）。
【００３４】
図示の例では、レーティングテーブルが、レーティングに基づいてソートされる。したがって、テーブルに新しいエントリを追加する位置は、新しいエントリのレーティングに依存する。レーティングによってレーティングテーブルをソートすることによって、同一バケット内の他のユーザの相対位置を、すばやく識別し、新しいエントリに応答して必要に応じてインクリメントすることができる。代替案では、レーティングテーブルを、他のフィールド（たとえば、ユーザ識別子またはバケット）に基づいてソートすることができる。
【００３５】
一実施形態では、テーブルを保存する形が、データベースサービス（たとえばＳＱＬデータベース）次第である。データベースサービスは、レーティングのグループ全体にアクセスするかそれを取り出し（グループフィールドに対するクラスタ化されたインデックスを使用して）、ユーザ識別子に対するレーティングの高速取り出しをもたらす（通常のインデックスを使用して）のに効率的な形でレーティングのグループを一緒に保つように構成される。エントリがテーブルに追加される（またはそれから削除される）場合に、エントリのデータおよび／または識別子が、データベースサービスに渡され、このデータベースサービスが、特定の挿入または削除を処理する。
【００３６】
システム１０４は、「引き分け」（すなわち、複数のユーザが同一のレーティングを有する状況）を処理するようにも構成される。例示的実施形態では、システム１０４が、レーティングテーブルに既に保存されている別のユーザのレーティングと同一のユーザレーティングに関する追加要求を受信する場合に、新しいユーザエントリが、同一のレーティングを有する他のエントリの下に追加され、前のエントリより大きい相対位置を割り当てられる。したがって、本質的に、「引き分けは先頭に」ということができる。代替案では、他の引き分け処理ポリシを実施することができる（たとえば、ユーザの識別子、ユーザがゲーム機を購入した時刻また日付、ユーザ識別子に関連するユーザ名のアルファベット順に基づくなど）。
【００３７】
図４の動作２０２に戻ると、受信された要求が、削除要求である場合には、適当なレーティングテーブルの削除されるエントリを識別する（動作２１４）。エントリをレーティングテーブルから削除し（動作２１６）、グループテーブル１１２および／またはメモリツリー１１６内の、ユーザが割り当てられたグループのカウントを１つデクリメント（減分）する（動作２１８）。ユーザが割り当てられたのと同一のグループに割り当てられ、ユーザより低いレーティングを有する他のすべてのユーザの相対位置を、１つデクリメントする（動作２２０）。
【００３８】
テーブルエントリの追加および削除の例を、図２、３、７、および８を参照して見ることができる。ゲーム機が、ユーザ（ユーザ識別子５７）の新しいレーティングをサブミットしたと仮定する。このユーザの前のレーティングは、８１であり、新しいレーティングは、９２である。レーティングテーブル１５０内のユーザの前のエントリが削除され、新しいエントリが追加される（これは、異なる順序で行うことができる。前のエントリを削除し、その後、新しいエントリを追加することができ、あるいは、新しいエントリを追加し、その後、前のエントリを削除することができ、あるいは、この２つを実質的に同時に行うことができる）。追加および削除が行われた後の、ユーザに新しいレーティングを反映したレーティングテーブル２７０を、図７に示す。図７からわかるように、グループ２は、現在２人のユーザだけを割り当てられており、ユーザ識別子６７の相対位置が、３から２にデクリメントされている。ユーザ識別子５７の新しいエントリが追加されており、新しいレーティングおよびそのユーザが割り当てられる新しいグループ（グループ１）が示されている。グループ１に割り当てられる唯一のユーザなので、ユーザ識別子５７の相対位置は、１である。さらに、図８からわかるように、図３のグループ化テーブル１６０が、図８のグループ化テーブル２８０に変更され、グループ１のカウントが、０から１にインクリメントされ、グループ２のカウントが、３から２にデクリメントされている（さらにまたはその代わりに、スコアボードのメモリツリーのカウントがインクリメントされる）。
【００３９】
少なくとも部分的に複数のグループに起因して、システム１０４で、レーティングを挿入／削除するための物理的書込の量が減ることに留意されたい。レーティングの挿入／削除は、平均してグループの半分に影響し、最悪の場合にグループ全体に影響するが、この影響される量は、スコアボードの総サイズと比較して、まだ小さい。
【００４０】
図１に戻ると、グループに余りに多数のユーザが割り当てられている（たとえば、グループのカウントが閾値に達した）場合に、グループが、複数のグループに分割される。図９は、グループを分割する例示的処理３００を示す流れ図である。図９の処理は、統計システム１０４によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはその組合せによって実行することができる。図９の処理を、図１のコンポーネントに関して説明する。
【００４１】
システム１０４は、グループカウントが閾値に達するまで待つ（動作３０２）。システム１０４が、待っている間に他のタスクおよび動作を実行していることができることを諒解されたい。グループのカウントが閾値に達したならば、グループの適当な中央を判定する（動作３０４）。この中央は、グループに割り当てられたユーザの数またはグループに対応するレーティング範囲に基づくなど、異なる形で判定することができる。たとえば、レーティング範囲を、単純にほぼ半分に分割することができる（たとえば、範囲が８０〜８９の場合に、適当な中央は８４または８５になる）。もう１つの例として、ユーザの数をほぼ半分に分割することができる（たとえば、グループのカウントが７０であり、グループのレーティング範囲が８０〜８９であり、グループに割り当てられたユーザのうちの３４人が、レーティング８０または８１を有し、グループに割り当てられた他の３６人のユーザが、８２〜８９の範囲のレーティングを有する場合に、適当な中央は、８１または８２になる）。
【００４２】
その後、新しいグループを生成し（動作３０６）、グループに対応するレーティング範囲を、グループと新しいグループの間で分割する（動作３０８）。新しいグループのエントリを、新しいグループのレーティング範囲に基づいて、グループテーブルの適当な位置に追加する。例示的実施形態では、グループテーブルが、レーティング範囲に基づいてソートされる（既に示したように）が、その代わりに他のフィールドをソートの基礎として使用することができる。
【００４３】
レーティング範囲を分割する形を、変更することができる（たとえば、上で動作３０４に関して説明したように、グループのほぼ中央がどのように識別されるかに基づいて）。グループテーブルおよび／またはメモリツリー内のこれらのグループの両方のグループカウントを更新し（動作３１０）、グループ識別子およびグループ内のユーザの相対位置を適当に更新する（動作３１２）。
【００４４】
グループ分割の例を、図１０および１１を参照して見ることができる。カウント閾値が３である（通常は小さすぎる数であるが、説明には有用である）と仮定する。３のカウントを有するグループ２（図３のテーブル１６０を参照されたい）が、その閾値に達し、分割されようとしている。適当な中央は、８４または８５であると判定され、したがって、８０から８４までのレーティング範囲を有する新しいグループ（グループ１１）が生成され、グループ２のレーティング範囲が、８５〜８９に変更される。グループ（２および１１）のそれぞれのカウントが、図１１のグループテーブル３３０でそれ相応に更新されている。さらに、図１０のレーティングテーブル３４０で、ユーザ識別子５７が、現在はグループ１１に割り当てられ、その結果、テーブル３４０のユーザ識別子５７のグループ識別子および相対位置が、それ相応に修正されている。
【００４５】
１つの例示的な実施形態では、グループが分割される場合に、分割されるグループが残され、１つの新しいグループが作成される。その代わりに、分割されるグループを除去し、２つの新しいグループを作成することができる。
【００４６】
もう１つの例示的実施形態では、グループが分割される場合に、分割されるグループが残され、グループの最も高いレーティングを有するユーザがそのグループに割り当てられる。新しいグループが作成され、最も低いレーティングを有するユーザが新しいグループに割り当てられる。２つのグループの間でこの形でユーザを分割することによって、レーティングテーブル内で更新される必要がある相対位置の数が減る。
【００４７】
図９の処理３００、および本明細書の他所で、２つのグループへのグループの分割に言及する。その代わりに、この分割を、ｘウェイ分割とすることができ、このｘは、２以上の任意の値である。たとえば、グループを２つのグループに分割するのではなく、あるグループを、３つのグループ、４つのグループ、５つのグループなどに分割することができる。
【００４８】
グループの分割に似て、グループを組み合わせることもできることに留意されたい。たとえば、連続したレーティング範囲を有する２つのグループを、それらに関連するカウントが十分に少ない場合に、単一のグループに組み合わせることができる。もう１つの例として、空になったグループを削除し、別のグループ（隣接するレーティング範囲を有する）のレーティング範囲を、削除されたグループのレーティング範囲を含むように修正することができる。
【００４９】
図１に戻ると、グループ分割によって、１つの値の範囲（たとえば、上と下の値が同一である）グループがもたらされ、そのグループの閾値カウント値に達する状況が、システム１０４で生じる可能性がある。そのような状況では、同一の範囲を有する追加のグループが生成され、その範囲を有する前のグループが、そのフルインデックス値をセットされる（たとえば０から１に変更される）。
【００５０】
この状況の例を、図１２に示す。グループテーブル３５０が示されており、グループ識別子１５が、１〜１のレーティング範囲を有し、それに割り振られるユーザのカウントが、閾値（限界）である。新しいグループ（グループ識別子３４）が追加され、やはり１〜１のレーティング範囲を有する。グループ識別子１５のフルインデックスが、セットされて（たとえば図示のように１の値）、これがその限界に達したことが示され、グループ識別子３４のフルインデックスが、セットされず（たとえば図示のように０の値）、１のレーティングを有する新しいエントリが、前のグループ（１５）ではなく新しいグループ（３４）に追加されることが示されている。
【００５１】
ユーザのエントリが、レーティングテーブルに追加されるかレーティングテーブルから除去される場合に、ユーザが割り当てられるグループが、追加処理または削除処理の持続時間中に一時的にロックされる。グループの一時的ロックによって、システム１０４が、ロックが解放されるまでそのグループへの他の追加または削除を一切行えなくなる。したがって、たとえば、システム１０４が、新しいエントリをグループ２に追加している間には、新しいエントリが追加されるまで（この時点でロックが解放される）、他のエントリをグループ２に追加するかグループ２から削除することはできない。しかし、他のグループがロックされないことに留意されたい。したがって、グループ２がロックされている場合であっても、そのロックによって、システム１０４が、グループ５にエントリを追加するかグループ５からエントリを削除できなくなることはない。
【００５２】
さらに、グループテーブルおよびレーティングテーブルならびにメモリツリー１１６を使用することによって、システム１０４によってランク情報をすぐに取り出すできるようになる。たとえば、ゲーム機が、特定のユーザに関するランクを要求し（たとえば、ユーザ識別子によって）、システム１０４が、要求されたランクをすぐにゲーム機に返すことができる。特定のユーザのランクを判定するために、メモリツリー１１６が使用される。システム１０４がブートされる場合に、メモリツリー１１６が、システムメモリ１０６にコピーされ、下で説明するように移植される。メモリツリー１１６を永続ストア１０８に保存することによって、システム１０４がリブートされるたびにツリー全体を再生成する必要がなくなる。代替案では、メモリツリー１１６を永続ストア１０８に保存せずに、システム１０４がブートされる場合に再構築することができる（永続ストア１０８に保存されたグループ数および各グループに含まれるレーティングの数を与えられれば）。１つの例示的な実施形態では、メモリツリー１１６が、バイナリツリーであるが、異なる実施形態で、異なるタイプのツリーをその代わりに使用することができる。
【００５３】
メモリツリー１１６は、その最下レベルで、複数の葉ノードを有する。各葉ノードは、特定のグループに対応し、そのグループに割り当てられたユーザのカウントを関連付けられる。葉ノードは、左から右へ、対応するグループがグループテーブルに現れるのと同一の順序で配置される（左端の葉ノードが、最高のレーティング範囲を有するグループに対応する）。各葉ノードは、親ノードを有し、親ノードは、子ノードのそれぞれのカウントの合計を関連付けられる。この親／子関係は、単一のノード（ツリーのルートノード）を有するレベルに達するまで継続される。
【００５４】
図１３に、例示的なメモリツリー３６０を示す。メモリツリー３６０は、図３のグループテーブル１６０で識別される１０個のグループに対応する。葉ノード（レベル（１）３６４内）とグループの間の関係を示すために、グループ識別子３６２の行が示されている。レベル（１）３６４内の各葉ノードは、対応するグループに割り当てられたユーザのカウントが関連付けられている。レベル（２）３６６のノードは、葉ノードに対する親ノードであり、子ノードのカウントの合計を関連付けられている。同様に、レベル（３）３６８のノードは、レベル（２）３６６のノードに対する親ノードであり、レベル（４）３７０のノードは、レベル（３）３６８のノードに対する親ノードである。レベル（５）３７２のルートノードは、レベル（４）３７０のノードに対する親ノードである。
【００５５】
１つの例示的な実施形態では、メモリツリー内のノードに関連するカウント値が、図１の永続ストア１０８に保存されないが、メモリツリーの構造（さまざまなノードの親／子関係）は永続ストア１０８に保存される。その代わりに、メモリツリー内のノードに関連するカウント値も、永続ストア１０８に保存することができる。
【００５６】
図１４は、メモリツリーのユーザカウントを増減する例示的処理３９０を示す流れ図である。図１４の処理は、図１の統計システム１０４によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはその組合せによって実行することができる。図１４の処理を、図１３をさらに参照して説明する。
【００５７】
まず、ユーザカウントをインクリメントまたはデクリメントされなければならないグループに対応する、メモリツリーの葉ノードを識別する（動作３９２）。処理３９０は、その後、グループのカウントをインクリメントするかデクリメントするかに基づいて進行する（動作３９４）。カウントをインクリメントする場合には、葉ノードのユーザカウントをインクリメントし（動作３９６）、その葉ノードからツリーのルートノードまでのパスに沿った各親ノードのユーザカウントもインクリメントする（動作３９８）。しかし、カウントをデクリメントする場合には、葉ノードのユーザカウントをデクリメントし（動作４００）、その葉ノードからツリーのルートノードまでのパスに沿った各親ノードのユーザカウントもデクリメントする（動作４０２）。
【００５８】
図１５は、メモリツリーに基づいてユーザランキングを取り出す例示的処理４１０を示す流れ図である。図１５の処理は、図１の統計システム１０４によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはその組合せによって実行することができる。図１５の処理を、図１３をさらに参照して説明する。
【００５９】
まず、そのランクが望まれるユーザ識別子を受信する（動作４１２）。識別されたユーザが割り当てられるグループに対応するノードを識別し、現在のノードとしてセットする（動作４１４）。小計値に０をセットし（動作４１６）、現在のノードが左兄弟を有するかどうかを検査する（動作４１８）。ノードが左兄弟を有するのは、ノードが、そのノードの左側に配置されたもう１つの子ノードを有する親ノードを有する場合である。たとえば、図１３で、葉ノード３７４が、左兄弟を有する（ノード３７６すなわち親ノード３７８のもう１つの子）が、葉ノード３７６は、左兄弟を有しない。
【００６０】
現在のノードが左兄弟を有する場合には、左兄弟ノードに関連する値を、小計値に加算する（動作４２０）。しかし、現在のノードが左兄弟を有しない場合に、または左兄弟ノードの値を小計値に加算した後に、現在のノードが親ノードを有するかどうかに関して検査を行う（動作４２２）。現在のノードが親ノードを有する場合には、親ノードを現在のノードとしてセットし（動作４２４）、処理は動作４１８に戻る。しかし、現在のノードが親ノードを有しない場合には、処理がルートノードに達しており、ユーザのランクを、この処理によって生成された小計値と、レーティングテーブルから得られるユーザの相対位置との合計と等しくなるようにセットする（動作４２６）。
【００６１】
図１５の例の処理を、図１３のメモリツリー３６０および図２のテーブル１５０を参照して見ることができる。ユーザＩＤ２９を有するユーザのランキングの要求を受信したと仮定する。このユーザは、バケット６（テーブル１５０に示されている）に割り当てられ、このバケットは図１３のノード３７４に対応する。ノード３７４は、左兄弟（ノード３７６）を有し、したがって、左兄弟（ノード３７６）の値（１）が、小計値に加算され、小計値が１になる。ノード３７４は、親すなわちノード３７８を有し、ノード３７８は左兄弟を有しない。ノード３７８も、親すなわちノード３８０を有し、ノード３８０は、左兄弟（ノード３８２）を有する。したがって、左兄弟（ノード３８２）の値（３）が、小計値に加算され、小計値は４になる。ノード３８０は、親すなわちノード３８４を有し、ノード３８４は、左兄弟を有しない。ノード３８４も、親すなわちノード３８６を有し、ノード３８６は、親を有しておらず、したがって、ルートノードである。小計（４）が、ユーザの相対位置（テーブル１５０からわかるように２）に加算され、６というユーザのランクがもたらされる。
【００６２】
図１５の処理が、例示的な処理であり、メモリツリーの構造に基づいて変更できることに留意されたい。たとえば、その代わりに、メモリツリーを、右端の葉ノードが最高のレーティング範囲を有するグループに対応するように構成することができ、その場合に、図１５の処理で、左兄弟ではなく右兄弟を参照しなければならない（動作４１８および４２０で）。
【００６３】
さらに、１つの例示的な実施形態では、メモリツリーが、均一の深さのツリーとして実施され、ルートノードからすべての葉ノードへのパスが同一の長さを有する。これによって、この均一の深さという特性を利用するデータ構造（たとえば周知のヒープデータ構造）を使用できるようになり、メモリツリーの情報のより高速の取り出すをもたらすことができる。しかし、均一の深さという特性を保持するために、グループが分割されるたびにメモリツリー構造が再生成される（および、図１の永続ストア１０８に保存される）。代替実施形態では、他のデータ構造が使用され、メモリツリーは、均一の深さでない。これらの代替実施形態では、ツリーの異なる部分を、異なる深さに延ばすことができ、グループが分割される場合にメモリツリーを再生成する必要がない。
【００６４】
メモリツリーを使用し、特定のグループにユーザを割り当てることによって、特定のユーザのランキングをすぐに判定できるようになる。これは、異なるゲーム機から受信するさまざまなユーザランキング要求にあてはまる。たとえば、ユーザが、特定のスコアボードについてトップ１０またはトップ１００のユーザおよびレーティングを見ることに関心を持つ場合がある。そのような要求には、スコアボードのレーティングテーブルからトップ１０またはトップ１００のユーザおよびレーティングを入手することによって、システム１０４によってすぐに応答することができる。
【００６５】
もう１つの例として、ユーザが、自分のランクならびに友人のランクのグループを見ることに興味を持つ場合がある。そのような友人のリストを、ユーザのゲーム機でおよび／またはユーザのゲーム機からアクセス可能なサービス（たとえば、プレゼンスおよび通知システム（ｐｒｅｓｅｎｃｅ  ａｎｄ  ｎｏｔｉｆｉｃａｔｉｏｎ  ｓｙｓｔｅｍ））によってリモートに、保持することができる。そのような友人のリストに、そのような友人のそれぞれのユーザ識別子が含まれる。ユーザ識別子のリストをシステム１０４に通信することができ、システム１０４は、ユーザおよび友人のそれぞれのランクを取り出し、ユーザへの表示のためにユーザのゲーム機にランクを返す。もう１つの例として、ユーザが、友人に対する相対的な自分のランクを見ることに関心を持つ場合に、ユーザ識別子のリストをシステム１０４に送信し、ランキングを入手するか、その代わりにレーティングだけを入手することができる。システム１０４（またはその代わりにゲーム機）は、入手したランキングまたはレーティングに基づいて、お互いに関して友人にランクを付けることができる。
【００６６】
さらに、ユーザが、ランキングのウィンドウを取り出すことに関心を持つ場合がある。このウィンドウは、トップｙランキングまたはボトムｙランキング（ｙは事実上すべての数である）とすることができ、あるいは、その代わりに、特定のユーザ識別子の周囲に配置することができる（たとえば、ユーザ識別子、ユーザの友人の１人のユーザ識別子、ユーザにゲームをプレイするように求めている別のユーザのユーザ識別子など）。
【００６７】
図１６は、ランキングのウィンドウを取り出す例示的処理４４０を示す流れ図である。図１６の処理は、図１の統計システム１０４によって実施され、ソフトウェア、ファームウェア、ハードウェア、またはその組合せによって実行することができる。
【００６８】
まず、ランキングのウィンドウを識別する要求を、ウィンドウの基準の指示と共に受信する（動作４４２）。基準の指示は、たとえば、特定のランキングまたはユーザ識別子とすることができる。処理４４０は、基準の指示がランキングであるかどうかに基づいて進行する（動作４４４）。基準の指示がランキングである場合には、適当なより高いランキングを識別することができ（動作４４６）、適当なより低いランキングを識別することができる（動作４４８）。適当なより高いランキングおよびより低いランキングは、取り出されるウィンドウのサイズすなわち、どれほどの数のランキングが要求されたかを指す。動作４４２で受信される要求には、ウィンドウのサイズの表示が含まれる（たとえば、要求されるランキングの総数、より高いランキングの数およびより低いランキングの数などによって）。たとえば、ウィンドウが、１０個のランキングになる場合には、適当なより高いランキングを、スコアボード上で基準の指示の真上の５つのランキングとすることができ、適当なより低いランキングを、スコアボード上で基準の指示の真下の５つのランキングとすることができる。スコアボード上の真下および真上のランキングは、レーティングテーブル１５０からすぐに判定することができる。その後、識別されたランキングを、要求されたウィンドウとして要求元のゲーム機に返す（動作４５０）。
【００６９】
動作４４４に戻って、基準の指示がランキングでない（たとえば、ユーザ識別子である）場合には、レーティングテーブルにアクセスして、参照されたユーザが割り当てられるグループおよびそのユーザのグループ内の相対位置を識別する（動作４５２）。ユーザのグループより上位のグループのカウントの合計を識別し（動作４５４）、ユーザの相対位置（レーティングテーブルからの）を、カウントの合計に加算して、ランクを生成する（動作４５６）。動作４５４は、たとえば、図１５の処理４１０を使用することによって実行することができる。動作４５６で生成されたランキングに基づいて、適当なより高いランキングおよびより低いランキングを識別し（動作４４６および４４４８）、識別されたランキングをウィンドウとして要求元に返す（動作４５０）。
【００７０】
図１に戻ると、ゲーム機１０２と統計システム１０４の間の通信は、さまざまなプロトコルのいずれかに従って実行することができる。１つの例示的な実施形態では、アプリケーションプログラミングインターフェース（ＡＰＩ）の組が、統計システム１０４によってゲーム機１０２に公開されて、要求をシステム１０４にサブミットできるようになる。下の表Ｉ〜ＶＩに、ＸＯｎｌｉｎｅＳｔａｔＳｅｔインターフェース、ＸＯｎｌｉｎｅＳｔａｔＧｅｔインターフェース、ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅインターフェース、ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅＧｅｔＲｅｓｕｌｔｓインターフェース、およびＸＯｎｌｉｎｅＳｔａｔＲｅｓｅｔインターフェースを含むＡＰＩの例示的な組を示す。
【００７１】
表Ｉに、ＡＰＩによって使用される例示的な構造体および定数を示す。
【００７２】
表Ｉ
#define XONLINE_STAT_RANK 0xFFFF
#define XONLINE_STAT_RATING 0xFFFE
typedef enum _XONLINE_STAT_TYPE {
XONLINE_STAT_NONE,
XONLINE_STAT_CHAR,
XONLINE_STAT_SHORT,
XONLINE_STAT_LONG,
XONLINE_STAT_LONGLONG,
XONLINE_STAT_FLOAT,
XONLINE_STAT_DOUBLE
} XONLINE_STAT_TYPE;
typedef struct _XONLINE_STAT {
WORD wID;
XONLINE_STAT_TYPE type;
union {
signed char cValue;
signed short sValue;
signed long lValue;
LONGLONG qwValue;
float fValue;
double dValue;
};
} XONLINE_STAT, *PXONLINE_STAT;
typedef struct _XONLINE_STAT_SPEC {
XUID xuidUser;
DWORD dwLeaderBoardID;
DWORD dwNumStats;
PXONLINE_STAT pStats;
} XONLINE_SET_STAT, *PXONLINE_STAT_SPEC;
typedef struct _XONLINE_STAT_USER {
XUID xuidUser;
CHAR szUsername[XONLINE_USERNAME_SIZE];
} XONLINE_STAT_USER, *PXONLINE_STAT_USER;
【００７３】
表ＩＩに、ゲーム機１０２によって、１人または複数のユーザについて１つまたは複数の属性および／またはレーティングを設定するのに使用されるＸＯｎｌｉｎｅＳｔａｔＳｅｔインターフェースを示す。
【００７４】
表ＩＩ
XBOXAPI
HRESULT
WINAPI
XOnlineStatSet(
IN DWORD dwNumStatSpecs,
IN PXONLINE_STAT_SPEC pStatSpecs,
IN HANDLE hWorkEvent,
OUT PXONLINETASK_HANDLE phTask
);
【００７５】
ＸＯｎｌｉｎｅＳｔａｔＳｅｔインターフェースでは、ｄｗＮｕｍＳｔａｔＳｐｅｃｓパラメータに、ｐＳｔａｔＳｐｅｃｓによってポイントされる配列の要素数が格納される。ｐＳｔａｔＳｐｅｃｓパラメータは、新しい属性およびレーティングを含むＸＯＮＬＩＮＥ＿ＳＴＡＴ＿ＳＰＥＣの配列をポイントする。ｈＷｏｒｋＥｖｅｎｔパラメータは、ｐｈＴａｓｋで返されるタスクがより多く作業する準備ができていることを知らせるのに使用される、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）オペレーティングシステムイベントハンドルである。ｐｈＴａｓｋパラメータは、この動作のタスクハンドルを受け取る変数へのポインタである。
【００７６】
ＸＯｎｌｉｎｅＳｔａｔＳｅｔ関数は、動作が成功する場合にＳ＿ＯＫの値を返し、ｐｈＴａｓｋが有効なタスクをポイントする。動作に失敗する場合には、この関数は、ＨＲＥＳＵＬＴエラーのフレーバーを返す。
【００７７】
表ＩＩＩに、ゲーム機１０２によって、１人または複数のユーザの１つまたは複数の属性、レーティング、および／またはランクを取り出すのに使用されるＸＯｎｌｉｎｅＳｔａｔＧｅｔインターフェースを示す。
【００７８】
表ＩＩＩ
XBOXAPI
HRESULT
WINAPI
XOnlineStatGet(
IN DWORD dwNumStatSpecs,
IN OUT PXONLINE_STAT_SPEC pStatSpecs,
IN HANDLE hWorkEvent,
OUT PXONLINETASK_HANDLE phTask
);
【００７９】
ＸＯｎｌｉｎｅＳｔａｔＧｅｔインターフェースでは、ｄｗＮｕｍＳｔａｔＳｐｅｃｓパラメータに、ｐＳｔａｔＳｐｅｃｓによってポイントされる配列の要素数が格納される。ｐＳｔａｔＳｐｅｃｓパラメータは、要求されたデータを受け取るＸＯＮＬＩＮＥ＿ＳＴＡＴ＿ＳＰＥＣの配列をポイントする。ＸＯＮＬＩＮＥ＿ＳＴＡＴ＿ＳＰＥＣ構造体の値部分には、要求されたデータのＩＤだけが格納される。ｈＷｏｒｋＥｖｅｎｔパラメータは、ｐｈＴａｓｋで返されるタスクが作業する準備ができていることを知らせるのに使用される、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）オペレーティングシステムイベントハンドルである。ｐｈＴａｓｋパラメータは、この動作のタスクハンドルを受け取る変数へのポインタである。
【００８０】
ＸＯｎｌｉｎｅＳｔａｔＧｅｔ関数は、動作が成功する場合にＳ＿ＯＫの値を返し、ｐｈＴａｓｋが有効なタスクをポイントする。動作に失敗する場合には、この関数は、ＨＲＥＳＵＬＴエラーのフレーバーを返す。
【００８１】
表ＩＶに、ゲーム機１０２によって、スコアボードから、１ページのユーザおよび属性、レーティング、および／またはランクを取り出すのに使用されるＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅインターフェースを示す。
【００８２】
表ＩＶ
XBOXAPI
HRESULT
WINAPI
XOnlineStatLeaderEnumerate(
IN PXUID pxuidPagePivot,
IN DWORD dwPageStart,
IN DWORD dwPageSize,
IN DWORD dwLeaderboardID,
IN DWORD dwNumStatsPerUser;
IN DWORD *pStatsPerUser;
OUT PXONLINE_STAT_USER pUsers;
OUT PXONLINE_STAT pStats;
IN HANDLE hWorkEvent,
OUT PXONLINETASK_HANDLE phTask
);
【００８３】
ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅインターフェースのパラメータは次の通りである。
【００８４】
ｐｘｕｉｄＰａｇｅＰｉｖｏｔ  このパラメータは、ＮＵＬＬでない場合に、ページのピボットとして使用されるユーザをポイントする。統計サーバは、そのユーザが中央にあるランキングのウィンドウを有するページの取り出すを試みる。
【００８５】
ｄｗＰａｇｅＳｔａｒｔ  開始ランク。０は、スコアボードの先頭であり、ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅ関数は、「ｄｗＰａｇｅＳｉｚｅ」個のエントリを返す。ｄｗＰａｇｅＳｔａｒｔパラメータは、ｐｘｕｉｄＰａｇｅＰｉｖｏｔがＮＵＬＬでない場合には無視される。
【００８６】
ｄｗＰａｇｅＳｉｚｅ  ページ内のエントリの所望の個数。
【００８７】
ｄｗＮｕｍＳｔａｔｓＰｅｒＵｓｅｒ  ｐＳｔａｔｓＰｅｒＵｓｅｒによってポイントされる配列に保存される統計の数。
【００８８】
ｐＳｔａｔｓＰｅｒＵｓｅｒ  ページ内でユーザごとに取り出しなければならない属性のタイトル固有統計ＩＤの配列。
【００８９】
ｐＵｓｅｒｓ  ユーザ情報を受け取る配列。少なくともｄｗＰａｇｅＳｉｚｅユーザを保存できるスペースが必要である。
【００９０】
ｐＳｔａｔｓ  ｐＳｔａｔｓＰｅｒＵｓｅｒで要求されたユーザのデータを受け取る配列。少なくともｄｗＮｕｍＳｔａｔｓＰｅｒＵｓｅｒ×ｄｗＰａｇｅＳｉｚｅエントリを保存するのに十分なスペースが必要である。
【００９１】
ｈＷｏｒｋＥｖｅｎｔ  ｐｈＴａｓｋで返されるタスクが作業する準備ができていることを知らせるのに使用される、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）オペレーティングシステムイベントハンドルである。
【００９２】
ｐｈＴａｓｋ  この動作のタスクハンドルを受け取る変数へのポインタ。
【００９３】
ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅ関数は、動作が成功する場合にＳ＿ＯＫの値を返し、ｐｈＴａｓｋが有効なタスクをポイントする。動作に失敗する場合には、この関数は、ＨＲＥＳＵＬＴエラーのフレーバーを返す。
【００９４】
表Ｖに、ゲーム機１０２によって、ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅによって返されるタスクによって取り出されるエントリの数を取り出すのに使用されるＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅＧｅｔＲｅｓｕｌｔｓインターフェースを示す。
【００９５】
表Ｖ
XBOXAPI
HRESULT
WINAPI
XOnlineStatLeaderEnumerateGetResults(
IN XONLINETASK_HANDLE hTask,
OUT DWORD *pdwReturnedResults,
);
【００９６】
ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅＧｅｔＲｅｓｕｌｔｓインターフェースでは、ｈＴａｓｋパラメータが、ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅによって返されるタスクであり、ｐｄｗＲｅｔｕｒｎｅｄＲｅｓｕｌｔｓパラメータが、このタスクによって実際に取り出されるエントリの数を受け取る変数へのポインタである。
【００９７】
ＸＯｎｌｉｎｅＳｔａｔＬｅａｄｅｒＥｎｕｍｅｒａｔｅＧｅｔＲｅｓｕｌｔｓ関数は、動作が成功する場合にＳ＿ＯＫの値を返し、動作に失敗する場合には、ＨＲＥＳＵＬＴエラーのフレーバーを返す。
【００９８】
表ＶＩに、ゲーム機１０２によって、特定のゲームタイトルに関するユーザのすべてのデータ（そのタイトルについて保持されるすべてのスコアボードのすべての属性、レーティング、およびランクを含む）をリセットするのに使用されるＸＯｎｌｉｎｅＳｔａｔＲｅｓｅｔインターフェースを示す。
【００９９】
表ＶＩ
XBOXAPI
HRESULT
WINAPI
XOnlineStatReset (
IN XUID xUser,
IN HANDLE hWorkEvent,
OUT PXONLINETASK_HANDLE phTask
);
【０１００】
ＸＯｎｌｉｎｅＳｔａｔＲｅｓｅｔインターフェースでは、ｘＵｓｅｒパラメータが、その状態をリセットされるユーザの識別子（ＸＵＩＤ）である。統計システムは、任意選択として、そのユーザがログインしているユーザでなければならないという制限を課すことができる。ｈＷｏｒｋＥｖｅｎｔパラメータは、ｐｈＴａｓｋで返されるタスクが作業する準備ができていることを知らせるのに使用される、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）オペレーティングシステムイベントハンドルである。ｐｈＴａｓｋパラメータは、この動作のタスクハンドルを受け取る変数へのポインタである。
【０１０１】
ＸＯｎｌｉｎｅＳｔａｔＲｅｓｅｔ関数は、動作が成功する場合にＳ＿ＯＫの値を返し、ｐｈＴａｓｋが有効なタスクをポイントする。動作に失敗する場合には、この関数は、ＨＲＥＳＵＬＴエラーのフレーバーを返す。
【０１０２】
図１７は、例示的オンラインゲーム環境５００のブロック図である。複数のゲーム機５０２（１）、５０２（２）、５０２（ｎ）が、ネットワーク５０６を介してセキュリティゲートウェイ５０４に結合される。各ゲーム機５０２は、たとえば、図１のゲーム機１０２とすることができる。ネットワーク５０６は、１つまたは複数のさまざまな普通のデータ通信ネットワークを表す。ネットワーク５０６に、通常は、パケット交換網が含まれるが、回路交換網も含めることができる。ネットワーク５０６に、有線部分および／または無線部分を含めることができる。１つの例示的な実施形態では、ネットワーク５０６に、インターネットが含まれ、任意選択として、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）および／または広域ネットワーク（ＷＡＮ）を含めることができる。ネットワーク５０６の少なくとも一部が、公衆網であり、これは、公にアクセス可能なネットワークを指す。事実上だれもが、公衆網にアクセスすることができる。
【０１０３】
いくつかの状況で、ネットワーク５０６にＬＡＮ（たとえばホームネットワーク）が含まれ、ルーティングデバイスが、各ゲーム機５０２とセキュリティゲートウェイ５０４の間に配置される。このルーティングデバイスは、ネットワークアドレス変換（ＮＡＴ）を実行して、ＬＡＮの複数のデバイスがインターネット上の同一のＩＰアドレスを共用できるようにすることができ、また、悪意があるか有害なユーザによるインターネットを介するアクセスからＬＡＮのデバイスを保護するファイヤウォールとしても動作することができる。
【０１０４】
セキュリティゲートウェイ５０４は、公衆網５０６と私有網５０８の間のゲートウェイとして動作する。私有網５０８は、ローカルエリアネットワークなど、さまざまな普通のネットワークのいずれかとすることができる。私有網５０８ならびに下で詳細に説明する他のデバイスは、セキュアゾーンとして動作するデータセンタ５１０内にある。データセンタ５１０は、信頼される通信を介して通信する信頼されるデバイスから構成される。したがって、セキュアゾーン５１０内での暗号化および認証は不要である。ネットワーク５０８の私有という性質は、ネットワーク５０８の制限されたアクセス可能性を指す。ネットワーク５０８へのアクセスは、ある個人だけに制限される（たとえば、データセンタ５１０の所有者またはオペレータによって制限される）。
【０１０５】
セキュリティゲートウェイ５０４は、１つまたは複数のセキュリティゲートウェイコンピューティングデバイスのクラスタである。これらのセキュリティゲートウェイコンピューティングデバイスによって、集合的にセキュリティゲートウェイ５０４が実施される。セキュリティゲートウェイ５０４には、任意選択として、セキュリティゲートウェイコンピューティングデバイスによって処理される要求を、これらのコンピューティングデバイスの適当な１つに向けるように動作する１つまたは複数の普通のロードバランシングデバイスを含めることができる。この向けることまたはロードバランシングは、さまざまなセキュリティゲートウェイコンピューティングデバイスの負荷をほぼ同一に平衡化することを試みる形で（または、その代わりに、ある他の判断基準に従って）実行される。
【０１０６】
やはりデータセンタ５１０内にあるのが、１つまたは複数のモニタリングサーバ５１２と、１つまたは複数のプレゼンスおよび通知フロントドア５１４、１つまたは複数のプレゼンスサーバ５１６、１つまたは複数の通知サーバ５１８、およびプロファイルストア５２８’（集合的にプレゼンスおよび通知サーバまたはシステム５３０を実施する）と、１つまたは複数のマッチフロントドア５２０および１つまたは複数のマッチサーバ５２２（集合的にマッチサービスを実施する）と、１つまたは複数の統計フロントドア５２４および１つまたは複数の統計サーバ５２６（集合的に統計サービスを実施する）である。サーバ５１６、５１８、５２２、および５２６は、ゲーム機５０２にサービスを提供し、したがって、サービスデバイスと呼ぶことができる。他のサービスデバイスも、１つまたは複数のサービスデバイス５１６、５１８、５２２、および５２６に加えておよび／またはその代わりに含めることができる。さらに、図１７には１つのデータセンタだけが図示されているが、その代わりに、ゲーム機５０２と通信できる複数のデータセンタが存在することができる。これらのデータセンタは、独立に動作することができ、その代わりに、集合的に動作することができる（たとえば、１つの大きいデータセンタをゲーム機５０２から使用可能にするために）。
【０１０７】
ゲーム機５０２は、データセンタ５１０から離れて置かれ、ネットワーク５０６を介してデータセンタ５１０にアクセスする。データセンタの１つまたは複数のデバイスと通信することを望むゲーム機５０２は、データセンタにログインし、コンソール５０２とセキュリティゲートウェイ５０４の間のセキュア通信チャネルを確立する。ゲーム機５０２およびセキュリティゲートウェイ５０４は、やりとりされるデータパケットを暗号化し、認証し、これによって、暗号を破らずにデータパケットを取り込むかコピーする他のデバイスによって理解されることなく、データパケットをそれらの間で安全に伝送できるようにする。ゲーム機５０２からセキュリティゲートウェイ５０４に、またはセキュリティゲートウェイ５０４からゲーム機５０２に通信される各データパケットは、その中にデータを埋め込まれることができる。この埋め込まれたデータを、パケットの内容またはデータ内容と称する。追加情報を、パケットのタイプに基づいて、パケット内に固有の形で含めることもできる。
【０１０８】
コンソール５０２とセキュリティゲートウェイ５０４の間のセキュア通信チャネルは、セキュリティチケットに基づく。コンソール５０２は、鍵配布センタ５２８に対してそれ自体およびコンソール５０２の現在のユーザを認証し、鍵配布センタ５２８からセキュリティチケットを入手する。その後、コンソール５０２は、このセキュリティチケットを使用して、セキュリティゲートウェイ５０４とのセキュア通信チャネルを確立する。セキュリティゲートウェイ５０４とのセキュア通信チャネルを確立する際に、ゲーム機５０２およびセキュリティゲートウェイ５０４は、お互いに対してそれ自体を認証し、その特定のゲーム機５０２およびセキュリティゲートウェイ５０４だけに既知のセッションセキュリティ鍵を確立する。このセッションセキュリティ鍵は、ゲーム機５０２とセキュリティゲートウェイクラスタ５０４の間で転送されるデータを暗号化し、他のデバイス（他のゲーム機５０２を含む）がそのデータを読み取れなくするのに使用される。セッションセキュリティ鍵は、そのデータパケットがそこから来たと主張されるセキュリティゲートウェイ５０４またはゲーム機５０２からのものとしてデータパケットを認証するのにも使用される。したがって、そのようなセッションセキュリティ鍵を使用することによって、セキュア通信チャネルを、セキュリティゲートウェイ５０４とさまざまなゲーム機５０２の間で確立することができる。
【０１０９】
セキュア通信チャネルがゲーム機５０２とセキュリティゲートウェイ５０４の間で確立されたならば、暗号化されたデータパケットを、この２つの間で安全に伝送することができる。ゲーム機５０２が、データセンタ５１０内の特定のサービスデバイスにデータを送信することを望む場合に、ゲーム機５０２は、データを暗号化し、セキュリティゲートウェイ５０４に送信して、そのデータパケットによって目標とされる特定のサービスデバイスに転送するように要求する。セキュリティゲートウェイ５０４は、データパケットを受信し、データパケットの認証および暗号化解除の後に、パケットのデータ内容を、私有網５０８を介して適当なサービスに送信される別のメッセージにカプセル化する。セキュリティゲートウェイ５０４は、データパケットによって目標とされる要求されたサービスに基づいて、メッセージに適当なサービスを判定する。
【０１１０】
同様に、データセンタ５１０のサービスデバイスがデータをゲーム機５０２に通信することを望む場合には、データセンタが、ゲーム機５０２に送信されるデータ内容ならびにそのデータ内容が送信される特定のゲーム機５０２の表示を含むメッセージを、私有網５０８を介してセキュリティゲートウェイ５０４に送信する。セキュリティゲートウェイ５０４は、データ内容をデータパケットに埋め込み、その後、特定のゲーム機５０２によってのみ暗号化解除できるようにデータパケットを暗号化し、セキュリティゲートウェイ５０４からのものとしてデータパケットを認証する。
【０１１１】
本明細書では、主に、セキュリティゲートウェイ５０４とゲーム機５０２の間の暗号化されたデータパケットの通信として説明するが、その代わりに、あるデータパケットを部分的に暗号化することができる（データパケットのある部分が暗号化され、他の部分が暗号化されない）。データパケットのどの部分が暗号化され、どの部分が暗号化されないかは、データセンタ５１０および／またはゲーム機５０２の設計者の望みに基づいて変更することができる。たとえば、設計者は、ゲーム機５０２のユーザが互いに話すことができるようにゲーム機５０２の間で音声データを通信できるようにすることを選択する場合があり、その設計者が、さらに、パケット内の他のすべてのデータを暗号化するが、音声データを暗号化しないことを選択することができる。さらに、もう１つの代替案では、一部のデータパケットを、暗号化される部分を有しない（データパケット全体が暗号化されない）ものとすることができる。データパケットが暗号化されないか部分的に暗号化される場合であっても、そのデータパケットが認証されることに留意されたい。
【０１１２】
セキュリティゲートウェイ５０４内の各セキュリティゲートウェイデバイスは、通常は１つまたは複数のゲーム機５０２とのセキュア通信チャネルに関する責任を負い、したがって、各セキュリティゲートウェイデバイスを、１つまたは複数のゲーム機を管理または処理する責任を負うとみなすことができる。さまざまなセキュリティゲートウェイデバイスは、互いに通信し、互いにメッセージを通信することができる。たとえば、管理の責任を負わないゲーム機にデータパケットを送信する必要があるセキュリティゲートウェイデバイスは、そのゲーム機に送らなければならないデータと共に、メッセージを、他のすべてのセキュリティゲートウェイデバイスに送信することができる。このメッセージが、そのゲーム機を管理する責任を負うセキュリティゲートウェイデバイスによって受信され、そのデバイスが適当なデータをそのゲーム機に送信する。その代わりに、セキュリティゲートウェイデバイスが、どのゲーム機がどのセキュリティゲートウェイデバイスによって処理されているかを知ることができ、これは、各セキュリティゲートウェイデバイスが他のセキュリティゲートウェイデバイスによって処理されるゲーム機のテーブルを保持するなど、明示的とするか、その代わりに、ゲーム機の識別子に基づいてどのセキュリティゲートウェイデバイスが特定のゲーム機に関する責任を負うかを判定するなど、暗黙とすることができる。
【０１１３】
モニタリングサーバ５１２は、データセンタ５１０内のデバイスに、使用不能なゲーム機５０２またはセキュリティゲートウェイ５０４の使用不能なセキュリティゲートウェイデバイスについて知らせるように動作する。ゲーム機５０２は、ハードウェア障害またはソフトウェア障害、コンソールがデータセンタ５１０からログアウトせずに電源を切られた、コンソール５０２へのネットワーク接続ケーブルがコンソール５０２から切り離された、他のネットワーク問題（たとえば、コンソール５０２があるＬＡＮが誤動作しているなど）など、さまざまな異なる理由から使用不能になる可能性がある。同様に、セキュリティゲートウェイ５０４のセキュリティゲートウェイデバイスは、ハードウェア障害またはソフトウェア障害、デバイスの電源が切られている、デバイスへのネットワーク接続ケーブルがデバイスから切り離された、他のネットワーク問題など、さまざまな異なる理由から使用不能になる可能性がある。
【０１１４】
セキュリティゲートウェイ５０４内のセキュリティゲートウェイデバイスのそれぞれが、１つまたは複数のモニタリングサーバ５１２によって監視され、このモニタリングサーバ５１２は、セキュリティゲートウェイデバイスの１つが使用不能になる場合を検出する。セキュリティゲートウェイデバイスが使用不能になった場合には、モニタリングサーバ５１２が、データセンタ５１０内の他のデバイスのそれぞれ（サーバ、フロントドアなど）に、セキュリティゲートウェイデバイスがもはや使用可能でないとのメッセージを送信する。他のデバイスのそれぞれは、それに適すると思われる形でこの情報に基づいて動作する（たとえば、そのセキュリティゲートウェイデバイスによって管理されている特定のゲーム機が、もはやデータセンタ５１０と通信しないと仮定し、それ相応にさまざまなクリーンアップ動作を実行することができる）。その代わりに、あるデバイスだけが、そのようなメッセージをモニタリングサーバ５１２から受信することができる（たとえば、セキュリティゲートウェイデバイスが使用可能であるかどうかに関係するデバイスだけ）。
【０１１５】
セキュリティゲートウェイ５０４は、個々のゲーム機５０２を監視し、ゲーム機５０２の１つが使用不能になる場合を検出する。セキュリティゲートウェイ５０４が、ゲーム機がもはや使用不能であることを検出する場合に、セキュリティゲートウェイ５０４は、使用不能なゲーム機を識別するメッセージをモニタリングサーバ５１２に送信する。それに応答して、モニタリングサーバ５１２は、データセンタ５１０内の他のデバイスのそれぞれに（またはその代わりに選択されたデバイスだけに）ゲーム機がもはや使用不能であるとのメッセージを送信する。他のデバイスのそれぞれは、それに適すると思われる形でこの情報に基づいて動作することができる。
【０１１６】
プレゼンスサーバ５１６は、オンラインゲームに関してデータセンタ５１０にログインした所与のユーザの状況または存在に関するデータを保持し、処理する。通知サーバ５１８は、データセンタ５１０にログインしたプレーヤに宛てられた発信メッセージの複数の通知キューを保持する。プレゼンスおよび通知フロントドア５１４は、セキュリティゲートウェイ５０４とサーバ５１６および５１８の間の仲介物として動作する１つまたは複数のサーバデバイスである。１つまたは複数のロードバランシングデバイス（図示せず）をプレゼンスおよび通知フロントドア５１４に含めて、フロントドア５１４として動作する複数のサーバデバイスの間で負荷を平衡化することができる。セキュリティゲートウェイ５０４は、サーバ５１６および５１８に関するメッセージをフロントドア５１４に通信し、フロントドア５１４は、そのメッセージが通信される特定のサーバ５１６または特定のサーバ５１８を識別する。フロントドア５１４を使用することによって、どのサーバがどのユーザに関するデータを管理する責任を負うかなど、サーバ５１６および５１８の実際の実施形態が、セキュリティゲートウェイ５０４から抽出される。セキュリティゲートウェイ５０４は、プレゼンスおよび通知サービスを目標とするメッセージを単純にプレゼンスおよび通知フロントドア５１４に転送することができ、フロントドア５１４に頼って、サーバ５１６およびサーバ５１８の適当な１つにメッセージをルーティングすることができる。
【０１１７】
マッチサーバ５２２は、オンラインプレーヤのお互いへのマッチングに関するデータを保持し、処理する。オンラインユーザは、ゲームのさまざまな特性と共に、プレイに使用可能なゲームを広告することができる（たとえば、フットボールゲームがプレイされる場所、日中または夜間にあるゲームをプレイできるかどうか、ユーザのスキルレベルなど）。これらのさまざまな特性を、一緒にゲームをプレイするために異なるオンラインユーザをマッチングさせる基礎として使用することができる。マッチフロントドア５２０に、１つまたは複数のサーバデバイス（および、任意選択としてロードバランシングデバイス）が含まれ、マッチフロントドア５２０は、サーバ５１６およびサーバ５１８から抽出するフロントドア５１４に類似する形で、セキュリティゲートウェイ５０４からマッチサーバ５２２を抽出するように働く。
【０１１８】
統計サーバ５２６は、オンラインゲームのさまざまな統計に関するデータを保持し、処理する。統計サーバ５２６は、たとえば、図１の統計システム１０４のサーバデバイスとすることができる。使用される特定の統計は、ゲーム設計者の望みに基づいて変更することができる。統計フロントドア５２４には、１つまたは複数のサーバデバイス（および、任意選択としてロードバランシングデバイス）が含まれ、統計フロントドア５２４は、サーバ５１６およびサーバ５１８から抽出するフロントドア５１４に類似する形で、セキュリティゲートウェイ５０４から統計サーバ５２６を抽出するように働く。
【０１１９】
したがって、セキュリティゲートウェイ５０４が、データセンタ５１０のセキュアゾーン内のデバイスを、信頼されない公衆網５０６から遮蔽するように動作する。データセンタ５１０のセキュアゾーン内の通信は、データセンタ５１０内のすべてのデバイスが信頼されるので、暗号化する必要がない。しかし、データセンタ５１０内のデバイスからゲーム機５０２に通信される情報は、セキュリティゲートウェイクラスタ５０４を介して渡され、ここで、その情報の目標であるゲーム機５０２だけによって暗号化解除できる形で暗号化される。
【０１２０】
図１８に、本明細書で説明する技法を実施するのに使用することができる、汎用コンピュータ環境６００を示す。コンピュータ環境６００は、コンピューティング環境の１つの例にすぎず、コンピュータアーキテクチャおよびネットワークアーキテクチャの使用の範囲または機能性に対する制限を暗示することを意図されたものではない。また、コンピュータ環境６００を、例示的なコンピュータ環境６００に示されたコンポーネントの任意の１つまたは組合せに関する依存性または要件を有するものと解釈してはならない。
【０１２１】
コンピュータ環境６００には、コンピュータ６０２の形の汎用コンピューティングデバイスが含まれる。コンピュータ６０２は、たとえば、図１のシステム１０４、図１７のセキュリティゲートウェイ５０４、図１７のサーバ５１２、５１６、５１８、５２２、および／または５２６、あるいは図１７のフロントドア５１４、５２０、または５２４の少なくとも一部を実施するサーバデバイスとすることができる。コンピュータ６０２のコンポーネントには、１つまたは複数のプロセッサまたは処理ユニット６０４（任意選択として暗号プロセッサまたは暗号コプロセッサを含む）、システムメモリ６０６、およびプロセッサ６０４を含むさまざまなシステムコンポーネントをシステムメモリ６０６に結合するシステムバス６０８を含めることができるが、これらに制限はされない。
【０１２２】
システムバス６０８は、メモリバスまたはメモリコントローラ、周辺バス、ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む、複数のタイプのバスアーキテクチャのいずれかの１つまたは複数を表す。たとえば、そのようなアーキテクチャに、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、および、メザニンバスとも称するＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ（ＰＣＩ）バスを含めることができる。
【０１２３】
コンピュータ６０２には、通常は、さまざまなコンピュータ可読媒体が含まれる。そのような媒体は、コンピュータ６０２によってアクセス可能な任意の使用可能な媒体とすることができ、そのような媒体には、揮発性媒体および不揮発性媒体、取外し可能媒体および取外し不能媒体の両方が含まれる。
【０１２４】
システムメモリ６０６には、ランダムアクセスメモリ（ＲＡＭ）６１０などの揮発性メモリ、および／または読取専用メモリ（ＲＯＭ）６１２などの不揮発性メモリの形のコンピュータ可読媒体が含まれる。起動中などにコンピュータ６０２内の要素の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）６１４が、ＲＯＭ６１２に保存される。ＲＡＭ６１０には、通常は、プロセッサ６０４から即座にアクセス可能および／または処理ユニット６０４によって現在操作されるデータおよび／またはプログラムモジュールが含まれる。
【０１２５】
コンピュータ６０２には、他の取外し可能／取外し不能、揮発性／不揮発性のコンピュータ記憶媒体も含めることができる。たとえば、図７に、取外し不能不揮発性磁気媒体（図示せず）から読み取り、それに書き込むハードディスクドライブ６１６、取外し可能不揮発性磁気ディスク６２０（たとえば「フロッピディスク」）から読み取り、それに書き込む磁気ディスクドライブ６１８、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などの取外し可能不揮発性光ディスク６２４から読み取り、および／またはそれに書き込む光ディスクドライブ６２２が示されている。ハードディスクドライブ６１６、磁気ディスクドライブ６１８、および光ディスクドライブ６２２は、それぞれ、１つまたは複数のデータ媒体インターフェース６２６’によってシステムバス６０８に接続される。その代わりに、ハードディスクドライブ６１６、磁気ディスクドライブ６１８、および光ディスクドライブ６２２を、１つまたは複数のインターフェース（図示せず）によってシステムバス６０８に接続することができる。
【０１２６】
ディスクドライブおよびそれに関連するコンピュータ可読媒体によって、コンピュータ６０２の、コンピュータ可読命令、データ構造体、プログラムモジュール、および他のデータの不揮発性ストレージが提供される。この例には、ハードディスク６１６、取外し可能磁気ディスク６２０、および取外し可能光ディスク６２４が示されているが、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）または他の光ストレージ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、および類似物などの、コンピュータによってアクセス可能なデータを保存できる他のタイプのコンピュータ可読媒体を使用して、例示的なコンピューティングシステムおよび環境を実施することもできることを諒解されたい。
【０１２７】
たとえばオペレーティングシステム６２６、１つまたは複数のアプリケーションプログラム６２８、他のプログラムモジュール６３０、およびプログラムデータ６３２を含む、任意の数のプログラムモジュールを、ハードディスク６１６、磁気ディスク６２０、光ディスク６２４、ＲＯＭ６１２、および／またはＲＡＭ６１０に保存することができる。そのようなオペレーティングシステム６２６、１つまたは複数のアプリケーションプログラム６２８、他のプログラムモジュール６３０、およびプログラムデータ６３２のそれぞれ（またはこれらのある組合せ）によって、分散ファイルシステムをサポートする常駐コンポーネントのすべてまたは一部を実施することができる。
【０１２８】
ユーザは、キーボード６３４およびポインティングデバイス６３６（たとえば「マウス」）などの入力装置を介してコンピュータ６０２にコマンドおよび情報を入力することができる。他の入力装置６３８（具体的には図示せず）に、マイクロホン、ジョイスティック、ゲームパッド、衛星放送送受信用パラボラアンテナ、シリアルポート、スキャナ、および／または類似物を含めることができる。これらおよび他の入力装置は、システムバス６０８に結合される入出力インターフェース６４０を介して処理ユニット６０４に接続されるが、パラレルポート、ゲームポート、またはｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することもできる。
【０１２９】
モニタ６４２または他のタイプの表示装置も、ビデオアダプタ６４４などのインターフェースを介してシステムバス６０８に接続することができる。モニタ６４２に加えて、他の出力周辺装置に、スピーカ（図示せず）およびプリンタ６４６など、入出力インターフェース６４０を介してコンピュータ６０２に接続することができるコンポーネントを含めることができる。
【０１３０】
コンピュータ６０２は、リモートコンピューティングデバイス６４８などの１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。たとえば、リモートコンピューティングデバイス６４８を、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の一般的なネットワークノード、ゲーム機、および類似物とすることができる。リモートコンピューティングデバイス６４８は、コンピュータ６０２に関して本明細書で説明する要素および特徴の多くまたはすべてを含めることができるポータブルコンピュータとして図示されている。
【０１３１】
コンピュータ６０２とリモートコンピュータ６４８の間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）６５０および一般的な広域ネットワーク（ＷＡＮ）６５２として図示されている。そのようなネットワーキング環境は、オフィス、会社全体のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。
【０１３２】
ＬＡＮネットワーキング環境で実施される場合に、コンピュータ６０２は、ネットワークインターフェースまたはネットワークアダプタ６５４を介してローカルネットワーク６５０に接続される。ＷＡＮネットワーキング環境で実施される場合に、コンピュータ６０２に、通常は、広域ネットワーク６５２を介する通信を確立するための、モデム６５６または他の手段が含まれる。モデム６５６は、コンピュータ６０２の内蔵または外付けとすることができるが、入出力インターフェース６４０または他の適当な機構を介してシステムバス６０８に接続することができる。図示されたネットワーク接続が、例示的であることと、コンピュータ６０２および６４８の間で通信リンクを確立する他の手段を使用できることを諒解されたい。
【０１３３】
コンピューティング環境６００と共に図示されたものなどのネットワーク化された環境では、コンピュータ６０２に関して図示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに保存することができる。例として、リモートアプリケーションプログラム６５８が、リモートコンピュータ６４８の記憶装置に常駐する。例示のために、アプリケーションプログラムおよび、オペレーティングシステムなどの他の実行可能プログラムコンポーネントが、この図では別個のブロックとして図示されているが、そのようなプログラムおよびコンポーネントが、さまざまな時にコンピューティング装置６０２の異なるストレージコンポーネントに常駐し、コンピュータのデータプロセッサによって実行されることを理解されたい。
【０１３４】
さまざまなモジュールおよび技法を、プログラムモジュールなど、１つまたは複数のコンピュータまたは他の装置によって実行されるコンピュータ実行可能命令の全般的な文脈で本明細書で説明することができる。一般に、プログラムモジュールには、特定の作業を実行するか特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。通常、プログラムモジュールの機能性は、さまざまな実施形態で望みに応じて組み合わせるか分散させることができる。
【０１３５】
これらのモジュールおよび技法の実施形態を、なんらかの形のコンピュータ可読媒体に保存するか、それを介して伝送することができる。コンピュータ可読媒体は、コンピュータによってアクセス可能なすべての使用可能な媒体とすることができる。制限ではなく例として、コンピュータ可読媒体に、「コンピュータ記憶媒体」および「通信媒体」を含めることができる。
【０１３６】
「コンピュータ記憶媒体」には、コンピュータ可読命令、データ構造体、プログラムモジュール、または他のデータなどの情報の記憶のためのあらゆる方法または技術で実施される、揮発性および不揮発性の、取外し可能および取外し不能の媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、または、所望の情報を保存するのに使用でき、コンピュータによってアクセスすることができる他の媒体が含まれるが、これに制限はされない。
【０１３７】
「通信媒体」は、通常は、搬送波または他のトランスポート機構など、変調されたデータ信号内でコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実施する。通信媒体に、情報配送媒体も含まれる。用語「変調されたデータ信号」は、信号内に情報を符号化する形でその特性の１つまたは複数を設定または変更される信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記の任意の組合せも、コンピュータ可読媒体の範囲に含まれる。
【０１３８】
図１９に、ゲーム機７０１の機能コンポーネントを詳細に示す。ゲーム機７０１は、たとえば、図１のゲーム機１０２とすることができる。ゲーム機７０１は、中央処理装置（ＣＰＵ）７００およびメモリコントローラ７０２を有し、メモリコントローラ７０２は、フラッシュＲＯＭ（読取専用メモリ）７０４、ＲＡＭ（ランダムアクセスメモリ）７０６、ハードディスクドライブ７０８、およびポータブルメディアドライブ７０９を含むさまざまなタイプのメモリへのプロセッサアクセスを容易にする。ＣＰＵ７００は、一時的にデータを保存し、したがってメモリアクセスサイクルの数を減らすレベル１キャッシュ７１０およびレベル２キャッシュ７１２を備え、これによって、処理速度およびスループットが改善される。
【０１３９】
ＣＰＵ７００、メモリコントローラ７０２、およびさまざまなメモリデバイスは、さまざまなバスアーキテクチャのいずれかを使用する、シリアルバス、パラレルバス、メモリバス、周辺バス、およびプロセッサバスまたはローカルバスを含む１つまたは複数のバスを介して相互接続される。たとえば、そのようなアーキテクチャに、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、および、メザニンバスとも称するＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ（ＰＣＩ）バスを含めることができる。
【０１４０】
１つの適切な実施形態として、ＣＰＵ７００、メモリコントローラ７０２、ＲＯＭ７０４、およびＲＡＭ７０６が、共通のモジュール７１４に集積される。この実施形態では、ＲＯＭ７０４が、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスおよびＲＯＭバス（どちらも図示せず）を介してメモリコントローラ７０２に接続されるフラッシュＲＯＭとして構成される。ＲＡＭ７０６は、別のバス（図示せず）を介してメモリコントローラ７０２によって独立に制御される複数のＤＤＲ  ＳＤＲＡＭ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  ＲＡＭ）として構成される。ハードディスクドライブ７０８およびポータブルメディアドライブ７０９は、ＰＣＩバスおよびＡＴＡ（ＡＴ  Ａｔｔａｃｈｍｅｎｔ）バス７１６を介してメモリコントローラに接続される。
【０１４１】
３Ｄグラフィックス処理ユニット７２０およびビデオ符号化器７２２が、高速高解像度グラフィックス処理用のビデオ処理パイプラインを形成する。データは、グラフィックス処理ユニット７２０からディジタルビデオバス（図示せず）を介してビデオ符号化器７２２に運ばれる。オーディオ処理ユニット７２４およびオーディオコーデック（コード化器／復号化器）７２６が、高忠実度ステレオ処理に関する対応するオーディオ処理パイプラインを形成する。オーディオデータは、オーディオ処理ユニット７２４とオーディオコーデック７２６の間で、通信リンク（図示せず）を介して運ばれる。ビデオ処理パイプラインおよびオーディオ処理パイプラインは、テレビジョンまたは他のディスプレイへの伝送のためにＡ／Ｖ（オーディオ／ビデオ）ポート７２８にデータを出力する。図示の実施形態では、ビデオおよびオーディオの処理コンポーネント７２０〜７２８が、モジュール７１４に取り付けられる。
【０１４２】
やはりモジュール７１４上で実施されるのが、ＵＳＢホストコントローラ７３０およびネットワークインターフェース７３２である。ＵＳＢホストコントローラ７３０は、バス（たとえばＰＣＩバス）を介してＣＰＵ７００およびメモリコントローラ７０２に結合され、周辺コントローラ７３６（１）〜７３６（４）のホストとして働く。ネットワークインターフェース７３２は、ネットワーク（たとえば、インターネット、ホームネットワークなど）へのアクセスを提供し、イーサネット（登録商標）カード、モデム、ブルートゥースモジュール、ケーブルモデム、および類似物を含むさまざまな有線または無線のインターフェースコンポーネントのいずれかとすることができる。
【０１４３】
ゲーム機７０１は、２つのデュアルコントローラサポートサブアセンブリ７４０（１）および７４０（２）を有し、このサブアセンブリのそれぞれが、２つのゲームコントローラ７３６（１）〜７３６（４）をサポートする。前面パネル入出力サブアセンブリ７４２が、電源ボタン７３１およびメディアドライブイジェクトボタン７３３ならびにすべてのＬＥＤ（発光ダイオード）またはゲーム機の外表面に露出された他のインジケータの機能性をサポートする。サブアセンブリ７４０（１）、７４０（２）、および７４２は、１つまたは複数のケーブルアセンブリ７４４を介してモジュール７１４に結合される。
【０１４４】
８つのメモリユニット７３４（１）〜７３４（８）が、４つのコントローラ７３６（１）〜７３６（４）に接続可能として、すなわち、コントローラごとに２つのメモリユニットが図示されている。各メモリユニット７３４は、ゲーム、ゲームパラメータ、および他のデータを保存できる追加ストレージを提供する。コントローラに挿入された場合に、メモリユニット７３４に、メモリコントローラ７０２によってアクセスすることができる。
【０１４５】
システム電源モジュール７５０が、ゲーム機７０１のコンポーネントに電力を供給する。ファン７５２が、ゲーム機７０１内の回路を冷却する。
【０１４６】
コンソールユーザインターフェース（ＵＩ）アプリケーション７６０が、ハードディスクドライブ７０８に保存される。ゲーム機の電源が入れられた場合に、コンソールアプリケーション７６０のさまざまな部分が、ＲＡＭ７０６および／またはキャッシュ７１０および７１２にロードされ、ＣＰＵ７００で実行される。コンソールアプリケーション７６０は、ゲーム機で使用可能な異なるメディアタイプにナビゲートする場合に、一貫したユーザ経験を提供するグラフィカルユーザインターフェースを提示する。
【０１４７】
ゲーム機７０１では、暗号化、暗号化解除、認証、ディジタル署名、ハッシュ化、および類似物などの、一般的な暗号機能を実行するために暗号エンジンが実施される。暗号エンジンは、ＣＰＵ７００の一部として実施するか、ＣＰＵで実行され、その結果、ＣＰＵが暗号機能を実行するように構成されるようになる、ハードディスクドライブ７０８に保存されたソフトウェアとして実施することができる。その代わりに、暗号機能を実行するように設計された暗号プロセッサまたは暗号コプロセッサを、ゲーム機７０１に含めることができる。
【０１４８】
ゲーム機７０１は、そのシステムを単純にテレビジョンまたは他のディスプレイに接続することによって、独立システムとして作動させることができる。この独立モードでは、ゲーム機７０１によって、１人または複数のプレーヤが、ゲームをプレイするか、映画を観るか、音楽を聞くことができるようになる。しかし、ネットワークインターフェース７３２を介して使用可能にされるブロードバンド接続性を統合することによって、ゲーム機７０１を、さらに、上で述べたようにオンラインゲームの参加者として作動させることができる。
【０１４９】
本明細書で説明したグループ識別子が、識別子およびそれに符号化されない追加情報であることに留意されたい。たとえば、連続する番号のグループが、連続するレーティング範囲を有するという保証はない（たとえば、グループ２が８７〜８９の範囲を有し、グループ６４が９０〜９２の範囲を有する場合がある）。その代わりに、グループ識別子を、追加の情報または関係を符号化するか暗示する形で実施することができる。
【０１５０】
上の説明では、構造的特徴および／または方法論的動作に固有の言語を使用したが、請求項で定義される本発明が、開示された特定の特徴または動作に制限されないことを理解されたい。そうではなく、特定の特徴および動作は、本発明を実施する例示的な形態として開示されたものである。
【図面の簡単な説明】
【０１５１】
【図１】統計システムを含む例示的環境のブロック図である。
【図２】例示的レーティングテーブルを示す図である。
【図３】例示的グループテーブルを示す図である。
【図４】レーティングテーブルにエントリを追加し、レーティングテーブルからエントリを削除する例示的処理を示す流れ図である。
【図５】もう１つの例示的レーティングテーブルを示す図である。
【図６】もう１つの例示的グループテーブルを示す図である。
【図７】もう１つの例示的レーティングテーブルを示す図である。
【図８】もう１つの例示的グループテーブルを示す図である。
【図９】グループを分割する例示的処理を示す流れ図である。
【図１０】もう１つの例示的レーティングテーブルを示す図である。
【図１１】もう１つの例示的グループテーブルを示す図である。
【図１２】もう１つの例示的グループテーブルを示す図である。
【図１３】例示的メモリツリーを示す図である。
【図１４】メモリツリーのユーザカウントを増減する例示的処理を示す流れ図である。
【図１５】メモリツリーに基づいてユーザランキングを取り出す例示的処理を示す流れ図である。
【図１６】ランキングのウィンドウを取り出す例示的処理を示す流れ図である。
【図１７】例示的オンラインゲーム環境のブロック図である。
【図１８】本明細書に記載の技法を実施するのに使用することができる一般的なコンピュータ環境を示す図である。
【図１９】例示的ゲーム機の機能コンポーネントを詳細に示す図である。
【符号の説明】
【０１５２】
１００  例示的環境
１０２（１）  クライアントデバイス
１０２（ｎ）  クライアントデバイス
１０４  統計システム
１０６  システムメモリ
１０８  永続ストア
１１０  レーティングテーブル
１１２  グループテーブル
１１４  属性ストア
１１６  メモリツリー
１５０  レーティングテーブル
１６０  グループテーブル
【図１】
2008173518.tif 000003
【図２】
2008173518.tif 000004
【図３】
2008173518.tif 000005
【図４】
2008173518.tif 000006
【図５】
2008173518.tif 000007
【図６】
2008173518.tif 000008
【図７】
2008173518.tif 000009
【図８】
2008173518.tif 000010
【図９】
2008173518.tif 000011
【図１０】
2008173518.tif 000012
【図１１】
2008173518.tif 000013
【図１２】
2008173518.tif 000014
【図１３】
2008173518.tif 000015
【図１４】
2008173518.tif 000016
【図１５】
2008173518.tif 000017
【図１６】
2008173518.tif 000018
【図１７】
2008173518.tif 000019
【図１８】
2008173518.tif 000020
【図１９】
2008173518.tif 000021