(57)【要約】種々のオペレーティングシステム及び通信プロトコルを使用して種々のハードウェアプラットホーム間でマルチプレーヤーゲームのプレイを容易にするマルチプレーヤーコンピュータゲーム、システム及び開発方法。クライアント計算装置のプロセッサに関連して動作し得る特殊目的ソフトウェアがマルチプレーヤーコンピュータゲームを形成する。特殊目的ソフトウェアは、特定のマルチプレーヤーコンピュータゲームに対する機能を与えるアプリケーションモジュールと、オペレーティングシステム、並びにクライアント計算装置のハードウェア装置及びプロトコルとの間にインターフェイスを与える。マルチプレーヤーゲームシステムは、種々のプレーヤーによって使用される異なるハードウェアプラットホーム（即ち異なるクライアント計算装置）に関わりなく、複数のプレーヤー間のマルチプレーヤーゲームプレイを容易にする。これで、複数のプレーヤー間のマルチプレーヤーゲームプレイは、各プレーヤーの計算装置のハードウェアプラットホーム、通信プロトコル及びオペレーティングシステムに関わりなく、可能となる。各計算装置に異なるハードウェア及びソフトウェア構成を有しそして種々の通信プロトコルを使用して通信するプレーヤーは、マルチプレーヤーゲームプレイに互いに参加することができる。クロスプラットホームコアと、ソフトウェア開発を簡単化し且つスピードアップする他の基本的技術とを使用して、新たなアプリケーションモジュールが開発される。特定のオペレーティングシステム或いはハードウェア装置又はプロトコルに対するコードは、もはや必要とされない。再使用可能なクロスプラットホームコアは、各々の新たなアプリケーションモジュールに対して一体的なテストを必要としない。というのは、クロスプラットホームコアは、複数のハードウェアプラットホーム、オペレーティングシステム並びにハードウェア装置及びプロトコルで既にテストされて一体化されているからである。
2004514189.tif 000002
【特許請求の範囲】
【請求項１】
データ記憶装置と、そこに記憶されたオペレーティングシステムとを有するコンピュータのプロセッサに関連して動作できるコンピュータコードを含むコンピュータ読み取り可能な媒体であって、上記コンピュータは、ハードウェア装置及び通信装置を含み、上記コンピュータ読み取り可能な媒体は、
アプリケーションモジュールを与え、そして
上記アプリケーションモジュールと、上記オペレーティングシステムを含む任意のオペレーティングシステムとの間の通信を容易にするためのインターフェイスを与える、
というためのコンピュータコードを含むコンピュータ読み取り可能な媒体。
【請求項２】
上記インターフェイスは、上記アプリケーションモジュールと、上記ハードウェア装置を含む任意のハードウェア装置との間の通信を容易にする請求項１に記載のコンピュータ読み取り可能な媒体。
【請求項３】
上記インターフェイスは、更に、上記アプリケーションモジュールと、上記通信装置を含む任意の通信装置との間の通信を容易にする請求項２に記載のコンピュータ読み取り可能な媒体。
【請求項４】
上記インターフェイスは、クロスプラットホームコアを含む請求項１に記載のコンピュータ読み取り可能な媒体。
【請求項５】
上記インターフェイスは、通信エンジンを備え、そしてこの通信エンジンは、
上記アプリケーションモジュールと通信する通信エンジンＡＰＩと、
上記通信エンジンＡＰＩと通信するサービス層と、
上記サービス層、並びにハードウェア装置及び通信装置と通信する装置層と、を含む請求項１に記載のコンピュータ読み取り可能な媒体。
【請求項６】
上記サービス層は、上記アプリケーションモジュールから上記装置層へハードウェアインプリメントコールを転送するハードウェアエミュレーション層であって、上記アプリケーションモジュールへハードウェアエミュレーションを与えることのできるハードウェアエミュレーション層を備えた請求項５に記載のコンピュータ読み取り可能な媒体。
【請求項７】
上記サービス層は、更に、
セッションのためのチャンネルのリストをマネージするためのチャンネルマネージャーと、
上記チャンネルマネージャーが上記チャンネルのリストに対してオペレーションを実行するようにさせるセッションマネージャーと、
上記通信エンジンのメッセージ待ち行列をマネージするためのメッセージ待ち行列マネージャーと、
を含む請求項６に記載のコンピュータ読み取り可能な媒体。
【請求項８】
上記アプリケーションモジュールは、マルチプレーヤーコンピュータゲームを含む請求項１に記載のコンピュータ読み取り可能な媒体。
【請求項９】
上記インターフェイスは、上記コンピュータと別のコンピュータとの間の通信を行えるようにし、そして上記コンピュータのユーザは、上記別のコンピュータのユーザに対して上記マルチプレーヤーコンピュータゲームをプレイする請求項１に記載のコンピュータ読み取り可能な媒体。
【請求項１０】
サーバーを備え、このサーバーは、データ記憶装置と、そこに記憶され且つ上記サーバーのプロセッサに関連して動作し得る特殊目的ソフトウェアとを有し、この特殊目的ソフトウェアは、第１コンピュータのユーザと第２コンピュータのユーザとの間でネットワークを経てマルチプレーヤーコンピュータゲームをプレイできるようにし、上記第１コンピュータは、データ記憶装置と、そこに記憶された第１オペレーティングシステムと、そこに記憶され且つ第１コンピュータのプロセッサに関連して動作し得る特殊目的ソフトウェアとを有し、上記第２コンピュータは、データ記憶装置と、そこに記憶された第２オペレーティングシステムと、そこに記憶され且つ第２コンピュータのプロセッサに関連して動作し得る特殊目的ソフトウェアとを有し、上記第１オペレーティングシステム及び第２オペレーティングシステムの１つ、或いは上記第１コンピュータ及び第２コンピュータの１つは、互いに異なるものであるマルチプレーヤーコンピュータゲームシステム。
【請求項１１】
上記サーバーは、互いに通信しそして所定の機能を各々与える複数のサーバーを備えた請求項１０に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１２】
上記複数のサーバーは、ウェブサーバー、マッチ・メークサーバー、リソースサーバー、ユーザ識別サーバー、チャットサーバー、トーナメントサーバー、ランキングサーバー、理想的サービスファインダー、ドメインネームサーバー及びゲームサーバーを含む請求項１１に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１３】
上記第１及び第２コンピュータ各々にインストールされる特殊目的ソフトウェアは、上記複数のサーバーに設けられる機能のサブセットを与える請求項１２に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１４】
上記特殊目的ソフトウェアは、第１コンピュータのユーザと第２コンピュータのユーザとの間でネットワークを経てマルチプレーヤーコンピュータゲームのプレイを制御する請求項１０に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１５】
上記特殊目的ソフトウェアは、第１コンピュータのユーザと第２コンピュータのユーザとの間でネットワークを経てマルチプレーヤーコンピュータゲームのプレイを部分的に制御する請求項１０に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１６】
第１コンピュータを備え、この第１コンピュータは、データ記憶装置と、そこに記憶され且つ第１コンピュータのプロセッサに関連して動作し得る特殊目的ソフトウェアとを有し、更に、この第１コンピュータは、データ記憶装置と、そこに記憶され且つ第１コンピュータの上記プロセッサに関連して動作し得る第１オペレーティングシステムとを有し、そして
第２コンピュータを備え、この第２コンピュータは、データ記憶装置と、そこに記憶され且つ第２コンピュータのプロセッサに関連して動作し得る特殊目的ソフトウェアとを有し、更に、この第２コンピュータは、データ記憶装置と、そこに記憶され且つ第２コンピュータの上記プロセッサに関連して動作し得る第２オペレーティングシステムとを有し、
上記第１及び第２コンピュータにおける上記特殊目的ソフトウェアは、上記第１コンピュータのユーザと上記第２コンピュータのユーザとの間でネットワークを経てマルチプレーヤーコンピュータゲームをプレイできるようにし、上記第１コンピュータ及び第２コンピュータの１つ、或いは上記第１オペレーティングシステム及び第２オペレーティングシステムの１つは、互いに異なるものであるマルチプレーヤーコンピュータゲームシステム。
【請求項１７】
上記第１及び第２コンピュータの各々は、更に、第１及び第２のハードウェア装置と、第１及び第２の通信装置とを備え、上記第１及び第２コンピュータの各々における上記特殊目的ソフトウェアは、マルチプレーヤーコンピュータゲームであり、これは、
アプリケーションモジュールと、
上記アプリケーションモジュールと、上記第１及び第２のオペレーティングシステムの各々を含む任意のオペレーティングシステムとの間の通信を容易にするためのインターフェイスと、
を含む請求項１６に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１８】
上記インターフェイスは、更に、上記アプリケーションモジュールと、上記第１及び第２のハードウェア装置の各々を含む任意のハードウェア装置との間の通信を容易にする請求項１７に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項１９】
上記インターフェイスは、更に、上記アプリケーションモジュールと、上記第１及び第２の通信装置の各々を含む任意の通信装置との間の通信を容易にする請求項１８に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項２０】
上記インターフェイスは、クロスプラットホームコアを含む請求項１７に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項２１】
上記インターフェイスは、通信エンジンを備え、そしてこの通信エンジンは、
上記アプリケーションモジュールと通信する通信エンジンＡＰＩと、
上記通信エンジンＡＰＩと通信するサービス層と、
上記サービス層、並びにハードウェア装置及び通信装置と通信する装置層と、を含む請求項１７に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項２２】
上記サービス層は、上記アプリケーションモジュールから上記装置層へハードウェアインプリメントコールを転送するハードウェアエミュレーション層であって、上記アプリケーションモジュールへハードウェアエミュレーションを与えることのできるハードウェアエミュレーション層を備えた請求項２１に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項２３】
上記サービス層は、更に、
セッションのためのチャンネルのリストをマネージするためのチャンネルマネージャーと、
上記チャンネルマネージャーが上記チャンネルのリストに対してオペレーションを実行するようにさせるセッションマネージャーと、
上記通信エンジンのメッセージ待ち行列をマネージするためのメッセージ待ち行列マネージャーと、
を含む請求項２２に記載のマルチプレーヤーコンピュータゲームシステム。
【請求項２４】
コンピュータのデータ記憶装置にインストールできそしてコンピュータのプロセッサに関連して動作し得るマルチプレーヤーコンピュータゲームを開発するためのマルチプレーヤーコンピュータゲーム開発方法であって、オペレーティングシステムが上記データ記憶装置にインストールされそしてプロセッサに関連して動作することができ、上記方法は、アプリケーションモジュールと２つ以上のオペレーティングシステムとの間の通信を容易にするためのインターフェイスを与える段階を備えたマルチプレーヤーコンピュータゲーム開発方法。
【請求項２５】
上記インターフェイスは、上記アプリケーションモジュールと、上記ハードウェア装置を含む２つ以上のハードウェア装置との間の通信を容易にする請求項２４に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項２６】
上記インターフェイスは、更に、上記アプリケーションモジュールと、上記通信装置を含む任意の通信装置との間の通信を容易にする請求項２５に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項２７】
上記インターフェイスは、クロスプラットホームコアを含む請求項２４に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項２８】
上記インターフェイスは、通信エンジンを備え、そしてこの通信エンジンは、
上記アプリケーションモジュールと通信する通信エンジンＡＰＩと、
上記通信エンジンＡＰＩと通信するサービス層と、
上記サービス層、並びにハードウェア装置及び通信装置と通信する装置層と、を含む請求項２４に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項２９】
上記サービス層は、上記アプリケーションモジュールから上記装置層へハードウェアインプリメントコールを転送するハードウェアエミュレーション層であって、上記アプリケーションモジュールへハードウェアエミュレーションを与えることのできるハードウェアエミュレーション層を備えた請求項２８に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項３０】
上記サービス層は、更に、
セッションのためのチャンネルのリストをマネージするためのチャンネルマネージャーと、
上記チャンネルマネージャーが上記チャンネルのリストに対してオペレーションを実行するようにさせるセッションマネージャーと、
上記通信エンジンのメッセージ待ち行列をマネージするためのメッセージ待ち行列マネージャーと、
を含む請求項２９に記載のマルチプレーヤーコンピュータゲーム開発方法。
【請求項３１】
上記アプリケーションモジュールは、マルチプレーヤーコンピュータゲームを含む請求項２４に記載のマルチプレーヤーコンピュータゲーム開発方法。
【発明の詳細な説明】
【０００１】
【関連出願に対するクロスレファレンス】
本出願は、２０００年２月１７日に出願されたプロビジョナル特許出願第６０／１８３，３１８号の優先権を請求するものである。
【技術分野】
本発明は、マルチプレーヤー及び改良型シングルプレーヤーコンピュータゲーム、システム及び方法に係る。
【０００２】
【背景技術】
コンピュータゲームのプレーヤーは、常に、より挑発的な、視覚的及び精神的に興奮するゲームを要求する。ゲームは、プレーヤーの注意を保持し、プレーヤーを再三ゲームに引き戻し、そしてマルチプレーヤーゲームのプレイを容易にするものでなければならない。幾つかの形式のマルチプレーヤーゲームのプレイが既に可能であるが（例えば、ビデオアーケード、横並びプラットホームゲームプレイ）、ゲームプレーヤーの熟練度が高まり、今や高性能の計算装置が一般大衆に入手でき、そして今やクイックインターネット接続速度が得られることは、全て、マルチプレーヤーゲームプレイの規格を引き上げる上で役立っている。
【０００３】
まだ可能になっていないことは、異なる計算装置を有するプレーヤー間でマルチプレーヤーゲームをプレイすることである。例えば、横並び型のゲームプレイは、各プレーヤーの計算装置が他のプレーヤーの装置と互換性があることを必要とする。インターネットを介してマルチプレーヤーゲームをプレイする場合でも、多数のプレーヤーが、同じ又は少なくとも互換性のある計算装置をもつことを必要とする。その理由は、各プレーヤーが自分の計算装置で実行するソフトウェアが、他のプレーヤーの装置のソフトウェアと互換性がなければならない（即ち両方向通信ができねばならない）ことである。
【０００４】
又、マルチプレーヤーコンピュータゲームの開発は、現在も、時間浪費で且つ経費がかかる。その１つの理由は、マルチプレーヤーゲームのプレイに対し種々様々なハードウェアプラットホームが現在入手できることである。マルチプレーヤーゲームは、各プラットホームに対し、あるプラットホームから別のプラットホームへのアプリケーションコードのクロスオーバー又は再使用がほとんどないように開発されねばならない。加えて、新たなソフトウェア開発者や、経験のある開発者でも、ハードウェア特有のプロトコル、通信仕様、新たなプラットホーム及び開発ツールに対し、顕著な学習曲線が存在する。従って、マルチプレーヤーコンピュータゲームを開発する現在の方法は、著しい欠点で悩まされている。
【０００５】
【発明の開示】
本発明は、マルチプレーヤーコンピュータゲーム、システム及び開発方法に向けられる。
本発明は、クライアント／サーバー、クライアント／クライアント、又はクライアント／クライアント／サーバー構成のいずれかにおいて異なるハードウェアプラットホーム間でマルチプレーヤーゲームをプレイできるようにクライアント計算装置のプロセッサに関連して動作し得る特殊目的のソフトウェアを提供する。又、本発明は、ネットワークを経てマルチプレーヤーゲームのプレイを容易にしそしてマネージするためにサーバーコンピュータ（又は複数のサーバーコンピュータ）のプロセッサに関連して動作し得る特殊目的のソフトウェアも提供する。クライアントコンピュータ及びサーバーコンピュータ各々における特殊目的のソフトウェアは、ネットワークを経てゲームプレーヤー間に繋ぎ目のない接続を与えるために種々のクライアントコンピュータにインストールされて動作し得る異なるハードウェアプラットホーム及びオペレーティングシステムに関わりなく、クライアントコンピュータ（即ちプレーヤー）及びサーバーコンピュータ間の通信を容易にしそしてマネージする。クライアントの特殊目的ソフトウェア及びサーバーの特殊目的ソフトウェアにより与えられる機能の量は、多数の変数、例えば、マルチプレーヤーゲームの形式、プレーヤーの数、接続構成（例えば、クライアント／クライアント等）、ゲーム状態（例えば、開始、新たなプレーヤー追加、プレーヤー退去、等）に依存する。
【０００６】
本発明の実施形態によれば、マルチプレーヤーコンピュータゲームを容易にするためにクライアントコンピュータのプロセッサに関連して動作し得る特殊目的ソフトウェアは、クライアントコンピュータと、サーバーコンピュータと、少なくとも１つの他のクライアントコンピュータであってそこにインストールされてそのプロセッサに関連して動作し得る特殊目的ソフトウェアを有するような他のクライアントコンピュータとの間の通信を容易にする複数の要素（例えば、モジュール、ライブラリー、サブシステム、等）を備えている。クライアントコンピュータに設けられる要素は、特定のマルチプレーヤーゲームに必要とされるマルチプレーヤー機能のレベルに依存する。
【０００７】
クライアントコンピュータは、本発明による特殊目的ソフトウェアが動作するときに関与するプロセッサを有する計算装置を備えている。このような計算装置は、例えば、パーソナルコンピュータ（デスクトップ、ラップトップ）、ハンドヘルド計算装置（例えば、パーソナルデジタルアシスタント（ＰＤＡ）、例えば、Ｐａｌｍ（登録商標）、ＢｌａｃｋＢｅｒｒｙ（登録商標））、コンピュータゲームコンソール（例えば、Ｓｏｎｙ　Ｐｌａｙｓｔａｔｉｏｎ（登録商標）及びＰｌａｙｓｔａｔｉｏｎ　２、Ｓｅｇａ　Ｄｒｅａｍｃａｓｔ（登録商標））、セルラー装置、及び現在知られている他の、今後開発される、マルチプレーヤーゲームプレイに適した計算装置を含むが、これらに限定されない。
【０００８】
又、本発明は、例えば、インターネットのようなネットワークを経てマルチプレーヤーコンピュータゲームプレイを容易にするためのマルチプレーヤーゲームシステムにも向けられる。本発明のこの実施形態によれば、互いに且つネットワークに接続できるサーバー又は複数のサーバーは、各々、複数のクライアントコンピュータ間でそのネットワークを経てマルチプレーヤーゲームプレイを容易にするために各プロセッサに関連して動作し得る特殊目的のソフトウェアを含む。本発明の種々の実施形態に基づき、単一サーバー、単一位置における複数のサーバー、又は複数の地理的に変位されたサーバーが設けられる。サーバーは、マルチプレーヤーゲームプレイを容易にするためにクライアントコンピュータに種々の機能を与える。例えば、サーバーは、クライアント（即ちプレーヤー）登録情報、マルチプレーヤーゲームシステムにおける全サーバーの名前及び位置の論理的マップ、ゲームプレイ中にプレーヤーに与えられるか又は使用できるようにされるリソース（しかし、セキュリティ又は効率の理由でクライアントコンピュータには与えられない）、及び以下で詳細に述べる種々の他の機能及び情報を維持することができる。
【０００９】
本発明のシステムのサーバーアーキテクチャーは、他の特徴及び効果の中でも、柔軟性、頑丈さ及び性能改善を与える。典型的に、サーバーは、あるカテゴリーの機能を与える。本質的に、サーバーＡは、機能Ａを与える。本発明により与えられるようなネットワーク環境内では、時には冗長で（即ちバックアップを与える）、時には完全に個別で且つ異なるものである種々の機能を与える１組のサーバーが存在する。同じ形式（即ち機能）のサーバーが一緒に働くときには、それらは、一次機能、拡張性、負荷バランス、迅速応答、ひいては、ゲーム性能、信頼性、一貫性を与え、そして一緒に働くことができる。他方、異なる機能を与えるサーバーは、機能改善を与えるように協働してもよいし、しなくてもよい。
【００１０】
本発明のマルチプレーヤーゲームシステムの整合されたサーバー構成は、互いに協働するように特に設計されそして意図された複数のサーバーを効果的に提供する。これは、本発明のシステムの全体的な機能を向上させる。本発明によって設けられるサーバーは、サービスが相補的であり、そして互いの機能の全部又は幾つかをてこ入れすることができる。本発明の重要な利益の１つは、サーバーの相互動作性において与えられる。異なるアプリケーションを、特定の他のアプリケーションと相互動作するように開発することができる。これは、通常、アプリケーションを一緒に作用させるためのカスタム解決策をエンジニアに開発させることにより行われる。しかしながら、本発明のシステムのようなより進歩したシステムは、種々のアプリケーションを、カスタム解決策なしに、種々の他のアプリケーションと共に作用できるようにする１組のインフラストラクチャーツールを提供する（例えば、あるワードプロセスプログラムにより与えられるが、ワードプロセスプログラム以外のアプリケーションにも使用できる「カット＆ペースト」機能と同様に）。本発明の実施形態によるサーバーの相互動作性及び機能の「共用」は、例えば、サービスファインディングツール、共通ユーザ登録、共通認証／セキュリティ、共通アドミニストレーション、オープンデータベース、共通プロトコル、共通データフォーマット、及び他のシステムと共に動作する機能を与えるが、これらに限定されるものではない。
【００１１】
又、本発明は、ソフトウェアエンジニアが、各ハードウェアプラットホーム、通信プロトコル又はオペレーティングシステム（ＯＳ）に対する特定のアプリケーションコードを書く必要性を排除することにより、新たなマルチプレーヤーコンピュータゲームの迅速な開発を（即ちソフトウェア開発）を容易にするソフトウェア開発方法にも向けられる。本発明のこの実施形態によれば、ソフトウェア開発者は、ゲームがプレイされるか又は通信プロトコルが使用されるハードウェアプラットホーム又はＯＳに関与せずに、マルチプレーヤーゲームアプリケーションに特有のソフトウェアコードを書くだけでよい。本発明によれば、クロスプラットホームコアは、特定のアプリケーションコードと、オペレーティングシステム、ハードウェア装置、及び計算装置の通信プロトコル（これらは一般に１つの計算装置から次の計算装置で相違する）との間にインターフェイスを与える。従って、ソフトウェア開発者は、クロスプラットホームコアに対するコードしか必要とせず、これは、ハードウェアプラットホーム又はオペレーティングシステムに関わりなく常に同じである。クロスプラットホームコアは、アプリケーションコードとクライアント計算装置との間の全通信（クライアント計算装置とサーバーとの間の通信を含む）を取り扱う。
【００１２】
【発明を実施するための最良の形態】
本発明の他の観点、特徴及び機能は、添付図面を参照した以下の詳細な説明から明らかとなろう。しかしながら、正しい縮尺でない添付図面は、単に本発明を例示するもので、本発明を何ら限定するものではなく、本発明は、特許請求の範囲のみによって限定されるものとする。
多数の図面にわたって同じ要素が同じ参照番号で示された添付図面を参照して以下に詳細に説明する。
【００１３】
本発明は、種々のオペレーティングシステム及び通信プロトコルを使用する種々のハードウェアプラットホーム間でのマルチプレーヤーゲームのプレイを容易にするマルチプレーヤーコンピュータゲーム、システム及び開発方法に向けられる。マルチプレーヤーコンピュータゲームのプレーヤーを表現するために、ここでは、「クライアント」、「ユーザ」及び「プレーヤー」という語が交換可能に使用される。
ここで使用する「マルチプレーヤーゲーム」という語は、例えば、スポーチシミュレーションゲーム、例えば、バスケットボール、ベースボール、フットボール、ホッケー、モータークロス、レスリング、カーレース、スキー、及び実質上少なくとも２人のプレーヤー間の競争、高速ツイッチ型ゲーム、例えば、第１パーソン射撃ゲーム、２人のプレーヤーが交替でゲームをプレイする交替ベースのゲーム、例えば、チェス、カードゲーム、チェッカー、等、並びに数百又は数千のプレーヤーが同時にゲームをプレイする大規模マルチプレーヤーゲームを含むが、これらに限定されるものではない。
【００１４】
本発明は、マルチプレーヤーコンピュータゲームを形成するためにクライアント計算装置のプロセッサに関連して動作し得る特殊目的のソフトウェアを提供する。この特殊目的のソフトウェアは、特定のマルチプレーヤーコンピュータゲームのための機能を与えるアプリケーションモジュールと、クライアント計算装置のオペレーティングシステム及びハードウェア装置及びプロトコルとの間のインターフェイスを与える。例えば、アプリケーションモジュールは、レース型ゲーム、スポーツ型ゲーム等のための機能を与える。このアプリケーションモジュールは、アプリケーションモジュールと、計算装置ハードウェア、オペレーティングシステム及び必要なプロトコルとの間の全ての通信を取り扱うクロスプラットホームコアと通信する（即ち両方向データ交換）。従って、本発明によれば、異なるマルチプレーヤーゲーム機能を与えるために異なるアプリケーションモジュールが書き込まれ、異なるアプリケーションモジュールの各々は、同じクロスプラットホームコアに関連して使用され、種々のマルチプレーヤーコンピュータゲームを形成する。
【００１５】
又、本発明は、種々のプレーヤーにより使用される異なるハードウェアプラットホーム（即ち異なるクライアント計算装置）に関わりなく、複数のプレーヤー間のマルチプレーヤーゲームのプレイを容易にするシステムも提供する。各クライアント計算装置は、同じマルチプレーヤーアプリケーションモジュール（又はコード）を実行し、そして各クライアント計算装置は、クロスプラットホームコアを備えている。又、各クライアント計算装置は、種々のプレーヤー間でのマルチプレーヤーゲームのプレイを容易にするために特殊目的ソフトウェアを有するサーバーと通信する。このサーバーは、クライアント計算装置に与えられた機能を改善及び／又は補足する種々の機能を提供し、そして一般的に、モデム−モデム又は直接リンクのようなネットワーク（例えば、インターネット、イントラネット（ＬＡＮ、ＷＡＮ）又は他のネットワーク）を経てマルチプレーヤーゲームのプレイをマネージしそして容易にする。
【００１６】
本発明の種々の実施形態によれば、各プレーヤーの計算装置のハードウェアプラットホーム、通信プロトコル及びオペレーティングシステムに関わりなく、複数のプレーヤー間でのマルチプレーヤーゲームプレイが今や可能となる。従って、本発明によれば、各計算装置に異なるハードウェア及びソフトウェア構成を有しそして種々の通信プロトコルを使用して通信しているプレーヤーが、マルチプレーヤーゲームのプレイに互いに参加することができる。
【００１７】
本発明によれば、本発明のクロスプラットホームコア及び他の基本的技術（例えば、通信エンジン、クライアント／サーバーアーキテクチャー）を使用して、ソフトウェアの開発を簡単化しそしてスピードアップする新規なアプリケーションモジュールが開発される。特定のオペレーティングシステム又はハードウェア装置又はプロトコルに対するコードは、もはや必要とされない。従って、ソフトウェア開発インターバルが著しく短縮される。更に、再使用可能なクロスプラットホームコアは、新たな各アプリケーションモジュールに対する一体化テストを必要としない。というのは、クロスプラットホームコアは既にテストされ、そして複数のハードウェアプラットホーム、オペレーティングシステム及びハードウェア装置及びプロトコルと一体化されているからである。
【００１８】
「コンピュータ」、「計算装置」及び「計算ハードウェア」（並びにその変形）という語は、ここでは交換可能に使用され、広い意味に解釈することが意図される。これらの語は、本発明の範囲又は内容を定義又は限定するものではない。コンピュータ（クライアント又はサーバー）は、次の要素の幾つか又は全部を含む。プロセッサ（例えば、中央処理ユニット（ＣＰＵ））、メモリ（例えば、ＲＡＭ、ＲＯＭ）、ハードドライブユニット（ＨＤＵ）、通信インターフェイス（例えば、モデム、ＲＯＭ　ＢＩＯＳ）、データ入力装置（例えば、キーボード、マウス、等）、及びディスプレイ。又、コンピュータは、付加的な既知のハードウェア要素及び装置（例えば、ジョイスティック）も含み、サーバー及びクライアントコンピュータの構成は、本発明を限定するものではない。又、それらは、クライアント又はサーバーコンピュータの全体的なオペレーションを与える汎用ソフトウェアも含み、そしてオペレーティングシステム、商業的に入手できるソフトウェア（例えば、データベース）、通信ソフトウェア等も含む。コンピュータは、例えば、パーソナルコンピュータ（デスクトップ、ラップトップ）、ハンドヘルド計算装置（例えば、パーソナルデジタルアシスタント（ＰＤＡ）、例えば、Ｐａｌｍ（登録商標）、ＢｌａｃｋＢｅｒｒｙ（登録商標））、コンピュータゲームコンソール（例えば、Ｓｏｎｙ　Ｐｌａｙｓｔａｔｉｏｎ（登録商標）及びＰｌａｙｓｔａｔｉｏｎ　２、Ｓｅｇａ　Ｄｒｅａｍｃａｓｔ（登録商標））、セルラー装置、及び現在知られている他の、今後開発される、マルチプレーヤーゲームプレイに適した計算装置を含むが、これらに限定されない。
【００１９】
特殊目的のソフトウェアは、本発明の機能を与え、１つ以上のウェブネーティブモジュール、ライブラリーファイル等を含んでもよく、クライアント及び／又はサーバーコンピュータに常駐してもよく、そして汎用ソフトウェアを使用してもよい。ここでの説明から当業者に明らかなように、特殊目的ソフトウェアを（即ちコード）を形成するのに使用されるプログラミング言語（Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）等）は、設計選択上のルーチン的問題である。従って、本発明は、そのソフトウェアをコード化するのに使用されるプログラミング言語により定義される特殊目的ソフトウェアの特定実施形態に限定されるものではない。
【００２０】
さて、添付図面の図１Ａ−１Ｇを特に参照すれば、本発明によりマルチプレーヤーコンピュータゲームをプレイするためのシステムが参照番号１００で一般的に示されている。本発明のシステム１００は、クライアント／サーバーアーキテクチャーを使用するもので、これは、クライアントコンピュータ２００がサーバー１２０を経て他のクライアントコンピュータ２００に接続することを必要とし、そして直接的なクライアント−クライアント（即ちプレーヤー対プレーヤー）接続を防止する（例えば、図１Ａ−１Ｅを参照）。このような構成は、各プレーヤーの帯域巾要求を減少し、プレーヤー間の判断実行の際にサーバーによる介入を容易にし、そしてゲームプレイの全ての観点を「監督」しそしてサーバー１２０に設けられたあるデータへのクライアントアクセスを制限することにより高いセキュリティを与える。本発明のクライアント／サーバーアーキテクチャーの好ましい実施形態は、少なくとも１つのサーバー１２０が設けられた中央データセンター２０を与える。
【００２１】
或いは又、システム１００は、全てのプレーヤー（即ちクライアント）が、図１Ｆに示すように、互いに直接通信するピア対ピアアーキテクチャー（即ちクライアント対クライアント）を使用してもよい。このようなアーキテクチャーでは、中央データセンター２０もサーバー１２０もなく、クライアントコンピュータ２００は、互いに直接接続しそして通信することができる。マルチプレーヤーゲーム機能は、以下に詳細に述べるように、各クライアントコンピュータ２００によって与えられる。
【００２２】
更に別に、システム１００は、図１Ｇに示すように、クライアント／サーバーとピア対ピアアーキテクチャーとの間のハイブリッド構成を使用してもよい。クライアントコンピュータ２００間の通信は、クライアントが互いに直接通信するピア対ピアモデルと、クライアントがサーバーのみを経て互いに通信するクライアント／サーバーモデルとの組み合わせでもよい。サーバーレフリー１２０は、不正に対してゲームのプレイを監視し、そして適切な処置をとる（例えば、サーバー１２０への不正接続をドロップする）。
【００２３】
図１Ａを参照し続け、そして更に図２を参照すると、本発明のシステム１００の実施形態は、一次データセンター２０を備え、これは、各々複数のコンピュータより成る少なくとも２つの実質的に同一のサーバーコンピュータ１２０を有し、これは、例えば、ウェブサーバー１２２、マッチ・メークサーバー１２４、リソースサーバー１２６、ユーザ（クライアント）識別サーバー１２８、チャットサーバー１８０、トーナメントサーバー１８２、ランキングサーバー１８４、理想的サービスファインダー１３０、ドメインネームサーバー１３２、及びゲームサーバー１３４を含むが、これらに限定されない。或いは又、これらのサーバーにより提供される機能（以下で詳細に述べる）は、単一のサーバー１２０（又は一次及びバックアップサーバー１２０）において与えられてもよいし、或いは少数のサーバーを構成するように適当にグループ編成されてもよい。サーバーコンピュータ１２０は、各サーバー１２０とネットワーク１０との間に配置されたファイアウオール１１０、並びにサーバーやオペレーティングシステムにおけるセキュリティアルゴリズムのようなソフトウェアにより、許可されないデータ等への無断アクセス、暴露に対して保護され、従って、ここでは「保護された」サーバーとも称される。この保護されたサーバー１２０は、例えば、インターネットのような公衆ネットワークに直接的にアクセス又は接続することができない。これらのサーバー１２０は、通常、データ記憶装置１４０、１４２のデータベース１４４、１４６に記憶された慎重さを要する情報（例えば、クライアント識別及び勘定データ）を有する。
【００２４】
又、一次データセンター２０は、本発明のマルチプレーヤーゲームシステム１００の一部分として公衆サーバーコンピュータ１１２０も備えている。これらサーバーコンピュータ１１２０は、ネットワーク１０に直接接続され、そしてクライアントコンピュータ２００によりアクセスできる。この公衆サーバーコンピュータ１１２０は、機器、ファイアウオール、オペレーティングシステム、サーバーアプリケーション、ルーター、或いは他の既知の又は今後開発されるアプリケーション又は装置により与えられる設計上の選択の問題として付加的なセキュリティをもつことができる。例えば、ウェブサーバー１２２及びリソースサーバー１２６が公衆サーバーコンピュータ１１２０を構成してもよい。
【００２５】
保護されたサーバー１２０は、一次データセンター２０に内蔵されたバックエンドネットワーク１５０（例えば、ローカルエリアネットワーク（ＬＡＮ））に接続される。このバックエンドネットワーク１５０は、実際には、一次データセンター２０を構成するビルディングに対しローカルで且つそれに収容された布線型（例えば、ねじれ対、同軸、ファイバー等）又はワイヤレス（例えば、赤外線、高周波等）のネットワークを含む（ここに述べる説明から当業者に明らかなように、一次データセンター２０は１つ以上のビルディングより成ってもよい）。各々データベース１４４、１４６が設けられたデータ記憶装置１４０、１４２が、保護されたサーバー１２０に接続される。好ましい実施形態では、データ記憶装置１４２及びそこに設けられたデータベース１４６は、データ記憶装置１４０及びデータベース１４４の各々の鏡像を与える。データ記憶装置１４０、１４２及びデータベース１４４、１４６は、以下で詳細に説明する。１つ以上のバックアップサーバーコンピュータ（２１２０）がバックアップデータセンター３０に設けられ、これは、プライベート仮想接続（ＰＶＣ）４０及びファイアウオール１１０を経て一次データセンター２０のバックエンドネットワーク１５０に接続される。
【００２６】
一次データセンター２０とネットワーク１０との間の接続は、インターネットサービスプロバイダー（ＩＳＰ）により提供される一次接続６０及び二次接続６２を経て行われる。一次及び二次の両接続６０、６２は、設計選択上のルーチン的問題として布線接続でもよいしワイヤレス接続でもよい。
更に、図１Ａを参照すると、更に別のサーバーコンピュータがネットワーク１０に接続されて、本発明によるマルチプレーヤーゲームプレイのある機能を与えるようにしてもよい。例えば、公衆サーバー１３２０は、一次データセンター２０から離れて配置されるが、地理的にはクライアント（例えば、クライアントＡ）に接近してもよい。ゲームのプレイ中には、一次データセンター２０からではなく、公衆サーバー１３２０からクライアントＡに、ある機能を与えることが、より効率的となる。本発明は、この状態を可能にし且つ容易にする。加えて、不正行為サーバー１２２０がネットワーク１０に接続され、そしてゲームプレイ中にクライアントコンピュータ２００へある機能を同様に与えることができる。
【００２７】
本発明のシステム１００における各クライアントコンピュータ２００には、そのコンピュータのプロセッサに関連して動作し得る特殊目的のソフトウェアがインストールされる。この特殊目的のソフトウェアは、各クライアントコンピュータ２００のハードウェアプラットホーム、オペレーティングシステム、並びにハードウェア及び通信プロトコルには関わりなく、クライアントコンピュータ２００間のマルチプレーヤーゲームプレイを容易にする。ネットワーク構成（例えば、図１Ａ−１Ｇを参照）に基づいて、クライアントコンピュータ２００とサーバー１２０との間の通信、又はクライアントコンピュータ２００間の直接的な通信は、クライアントコンピュータ２００におけるこの特殊目的のソフトウェアにより容易にされる。サーバー１２０にインストールされそしてそのプロセッサに関連して動作し得る特殊目的のソフトウェアは、クライアントコンピュータ２００間のマルチプレーヤーゲームのプレイを容易にしそして整合させる。サーバー１２０及びクライアントコンピュータ２００の各々により提供される機能は、ネットワーク構成に依存する。例えば、図１Ｄに示すように、サーバー１２０は、全てのクライアントデータを単に通過させるだけで、全ての機能が各クライアントコンピュータ２００に与えられてもよい。或いは又、図１Ｅに示すように、サーバー及びクライアントコンピュータ（この実施形態では２０／８０）間に機能を割り振ってもよい。更に、図１Ｆの構成では、各クライアントコンピュータ２００に全機能が与えられる。
【００２８】
次に、図２を参照し、一次データセンター２０の保護されたサーバーコンピュータ１２０について詳細に説明する。上述したように、サーバー１２０は、１つ以上のコンピュータを備え、このコンピュータは、例えば、ウェブサーバー１２２、マッチ・メークサーバー１２４、リソースサーバー１２６、ユーザ（クライアント）識別サーバー１２８、チャットサーバー１８０、トーナメントサーバー１８２、ランキングサーバー１８４、理想的サービスファインダー１３０、ドメインネームサーバー１３２、及びゲームサーバー１３４を含むが、これらに限定されない。或いは又、これらサーバーの幾つかは、例えば、その特定のサーバーの機能と、サーバーに記憶されるデータの重要性とに基づいて、非保護のサーバー（例えば、図１Ａの１１２０）として設けられてもよい。どのサーバーが保護されたサーバーとして設けられそしてどのサーバーが非保護のサーバーとして設けられるかは、設計選択上のルーチン的事柄である。図２に示す各サーバーは、個別のスイッチ１３６を経てネットワーク１０に接続されてもよいし、又は複数のサーバーが単一のスイッチ１３６を共用してもよい。図２に示す接続は、サーバーとネットワーク１０との間に得られる多数の異なる接続スキームの１つを例示するものに過ぎず、本発明の範囲を限定するものとして解釈すべきではない。
【００２９】
図２に示す種々のサーバーにより与えられる機能は、本発明に基づき、複数のクライアントコンピュータ２００によりマルチプレーヤーゲームのプレイを個々に及び／又は集合的に容易にしそしてマネージする。以下に詳細に述べるように、いずれかのサーバー（及びその各々の機能）は、特定のゲームアクティブティに基づき、システム１００により特定の時間に使用されそしてクライアントコンピュータ２００によりアクセスされる。例えば、マッチ・メークサーバー１２４及びその機能は、プレーヤー（即ちクライアントコンピュータ２００）が最初にサーバー１２０へ接続を試み、そしてマルチプレーヤーゲームのプレイに参加するときに、利用される。しかしながら、そのプレーヤーがゲームサーバー１３４への接続を確立すると、マッチ・メークサーバー１２４及びその機能は、もはや必要とされない。同様に、サーバークラスター１２０の他のサーバーは、マルチプレーヤーゲームのプレイ中に、クライアントコンピュータ２００により種々の時間及び種々の異なるやり方で使用することができる。
【００３０】
種々のサーバー１２０及び各クライアントコンピュータ２００により本発明の実施形態に基づいて与えられるマルチプレーヤー機能は、一般に、各コンピュータにインストールされてプロセッサに関連して動作し得る特殊目的のソフトウェアにより与えられ、そしてある場合には、これも各コンピュータにインストールされて各プロセッサに関連して動作し得る汎用ソフトウェアで与えられる。特定のマルチプレーヤーゲームのマルチプレーヤー機能要求と、システム１００の構成（例えば、クライアント／サーバー、クライアント／クライアント等）とに基づいて、サーバー１２０及びクライアントコンピュータ２００の両方に同じ又は同様の機能が与えられてもよい。最小限、クライアントコンピュータ２００に与えられる機能は、サーバー１２０に与えられる機能のサブセットである。この関係は、クライアントコンピュータの機能、サーバーの機能及びそれらの間の相互関係が示された図３に概略的に示されている。図３は、単一のサーバー１２０に対して単一のクライアントコンピュータ２００を示しているが、同じ又は同様の機能を有する多数のクライアントコンピュータ２００が、図３に示すように、サーバー１２０の機能を「マップ」してもよいことに注意されたい。
【００３１】
更に、図３を参照し、本発明の実施形態に基づき特殊目的ソフトウェアによりクライアントコンピュータ２００に与えられる機能について以下に詳細に説明する。当業者に明らかなように、特殊目的のソフトウェアは、設計選択上のルーチン的事柄として、現在知られている又は今後開発される記憶媒体（例えば、ＣＤ−ＲＯＭ、ＤＶＤ等）に設けられてもよいし、クライアントコンピュータ２００（ＲＯＭ又はカートリッジに含まれた）にその全部又は一部がダウンロードされてもよいし、或いはその他の方法でクライアントコンピュータ２００のメモリにロードされてもよい。この機能は、ネームサービス２０２、ゲーミング２０４、ロビー２０６（マッチ・メーカー２０８及びチャット２１０の要素を含む）、トーナメント２１２、ランキングシステム２１４、ユーザ登録２１６、並びにリソースアップ／ダウン２１８の要素を含む複数の要素によって与えられる。各要素は、クライアントコンピュータ２００と、サーバー１２０により与えられる種々の機能との間の通信を容易にするための機能を与える。
【００３２】
図３に示す実施形態では、クライアントコンピュータ２００の特殊目的ソフトウェアにより与えられる各機能は、それに対応する相補的な機能をサーバー１２０に有している。図３に示すクライアントコンピュータ２００とサーバー１２０との間の接続は、機能するものであるが、ゲームのプレイ中に特定のポイントに必要とされる機能に基づいて、全部が同時に存在しなくてもよい。例えば、理想的サービスファインダー１３０及びネームサービス要素２０２は、理想的サービスファインダー１３０のデータベースに与えられる記号名を介して、クライアントコンピュータ２００の特殊目的ソフトウェアにより与えられない種々のリソース及び他の機能を識別しそして探索するための機能を与える。例えば、ゲームサーバー１３４は、一次データセンター２０の一部分として設けられると共に、公衆サーバー１３２０の一部分としても設けられる。ゲームのプレイ中に、クライアントコンピュータ２００は、ゲームサーバー１３４からの情報であって、一次データセンター２０のゲームサーバー１３４よりもプレーヤーに地理的に接近した公衆サーバー１３２０に位置するゲームサーバー１３４からそのプレーヤーに与えることのできる情報を必要とする。理想的サービスファインダーの機能は、その接近したゲームサーバー１３４の位置探索を容易にする。理想的サービスファインダーの機能による記号名の使用は、ゲームサーバーのネットワーク位置をハードコード化する必要性を排除し、従って、所望のリソース又は機能のネットワーク位置の移動を許す。システム１００には、２つ以上の理想的サービスファインダー１３０を設けてもよい（即ち、一次データセンター２０及び公衆サーバー１３２０の両方に理想的サービスファインダー１３０が設けられてもよい）。２つ以上の理想的サービスファインダー１３０が設けられる場合には、記号名のデータベースが、システム１００の全理想的サービスファインダー１３０へ複写される。
【００３３】
更に、図３を参照すれば、ゲームサーバー１３４及びゲーミング要素２０４は、ゲーミング機能を与え、これは、ゲーム内ライブラリーを与えることを含み、ゲームプレイ中にプレーヤー間のゲームデータ通信を容易にする。ゲームサーバー１３４は、サーバー１２０によるクライアントコンピュータ２００間の通信を容易にするための機能を与える。ゲームサーバー１３４には、ゲーム状態及び同期情報と、ゲームマネージメントの責務（種々のクライアントコンピュータ２００と、サーバー１２０を含む種々のサーバーとの間の）とが記憶される。それに対応するゲーミング要素２０４は、クライアントコンピュータ２００とゲームサーバー１３４との間の接続（クライアント／サーバーアーキテクチャー）、又はクライアントコンピュータ２００間の接続（ピア対ピアアーキテクチャー）を容易にする。
【００３４】
マッチ・メークサーバー１２４及びマッチ・メーカー２０８の要素は、プレーヤーが定義した要求（例えば、ゲーム名、プレーヤーの数、ルール、ピング（ｐｉｎｇ）時間）を満足するゲームサーバー１３４をネットワーク１０においてプレーヤーが探索できるようにするマッチ・メーキング機能を与える。マッチ・メークサーバー１２４は、ネットワーク１０内に配置されたゲームサーバー１３４のデータベースを有し、このデータベースには各ゲームサーバー１３４の仕様（例えば、ゲームの形式、同時プレーヤーの数、等）が含まれるのが好ましい。システム１００には、２つ以上のマッチ・メークサーバー１２４が設けられてもよい。
【００３５】
次に、図８Ａ−８Ｃを参照し、マッチ・メークサーバー１２４の機能を詳細に説明する。マッチ・メークサーバー１２４は、１つ以上のマルチプレーヤーゲーム、例えば、ゲームＸ、ゲームＹ、等に対するゲームサーバー１３４のリストをそのデータベースに記憶している。クライアントコンピュータ２００がマッチ・メーク要素２０８を経てゲームＸに対するゲームサーバーを要求するときには、マッチ・メークサーバー１２４は、使用可能なゲームＸのゲームサーバー１３４をクライアントコンピュータ２００へ返送することができる。その情報がマッチ・メークサーバー１２４からクライアントコンピュータ２００に返送されると、クライアントコンピュータ２００は、ゲームＸのゲームサーバー１３４のいずれかにおけるマルチプレーヤーゲームのプレイに接続しそして参加することができる。同様に、マッチ・メークサーバー１２４は、クライアントコンピュータ２００をゲームＹのゲームサーバー１３４へ向けることができる。例えば、クライアントコンピュータ２００がゲームＹに参加しようとする場合には、クライアントコンピュータ２００に常駐するマッチ・メーク要素２０８によりマッチ・メークサーバー１２４へ要求が通信される（図中、１で示す）。マッチ・メークサーバー１２４は、クライアントコンピュータに使用可能なゲームＹのサーバー１３４を決定し、そしてこれらサーバーのリストをクライアントコンピュータ２００へ通信する（図中、２で示す）。クライアントコンピュータ２００が最終的に接続するゲームＹのサーバー１３４の選択は、クライアントコンピュータ２００のユーザに委ねられる。図８Ａにおいて、クライアントコンピュータは、ゲームサーバーＳｙｌに接続するよう選択している（図中、３で示す）。
【００３６】
或いは又、図８Ｂに示すように、マッチ・メークサーバー１２４は、特定ゲームＸのゲームサーバー１３４をクライアントコンピュータ２００へ返送することができ、次いで、クライアントサーバー２００は、これに接続してゲームＸのマルチプレーヤーゲームのプレイに参加することができる。図８Ｂでは、クライアントコンピュータは、ゲームＸのサーバー１３４のリストに対する要求をゲームサーバー１２４へ通信する（マッチ・メーク要素２０８を経て）（図中、１で示す）。ゲームサーバー１２４は、ゲームサーバーＳｘ２に関する情報をクライアントコンピュータ２００へ返送する（図中、２で示す）。次いで、クライアントコンピュータ２００は、ゲームサーバーＳｘ２への接続を確立する（図中、３で示す）。
【００３７】
図８Ｃに示す別の実施形態では、複数のマッチ・メークサーバー１２４には、１つ以上のマルチプレーヤーゲーム、例えば、ゲームＸ、ゲームＹ、ゲームＺ、等に対するゲームサーバー１３４のリストが各々記憶される。この構成は、高い信頼性を与えると共に、複数のマッチ・メークサーバー１２４間に負荷バランスを与える。１つのマッチ・メークサーバー１２４に問題が生じているか又は複数のクライアントコンピュータ２００からの要求が殺到する場合には、別のマッチ・メークサーバー１２４がマッチ・メーク機能を与えることができる。ゲームＸのサーバーに対するクライアントコンピュータＡからの要求は、マッチ・メークサーバー１（ＭＭ１）又は２（ＭＭ２）により取り扱われ、これら両サーバーは、ゲームＸサーバーに関する情報を有する。同様に、マッチ・メークサーバー２（ＭＭ２）及び３（Ｍ３）は、ゲームＹのサーバーに対する要求を取り扱いことができる。
【００３８】
マッチ・メークサーバー１２４の上記実施形態（図８Ａ−８Ｃに示す）の各々において、ゲームサーバー１３４を探索するためのクライアントコンピュータ２００からの要求は、ゲームサーバー１３４及びクライアントコンピュータ２００に望まれる幾つかの性能特性と、それらの間の接続とを含む。例えば、クライアントは、マッチ・メークサーバー１２４への要求において、ゲーム名、プレーヤーの数、ルール、ゲームがプレイされる世界、及びピング時間（例えば、最良の性能、最小待ち時間、ランダム選択等）のような基準を提出する。
【００３９】
チャットサーバー１８０及びチャット要素２１０は、プレーヤーがネットワーク１０を経て通信（通常はテキストメッセージにより）できるようにするチャット機能を与え、即ちインスタントメッセージ、チャット・ルームメッセージ、グループメッセージ等を送信及び受信できるようにする機能を与える。チャットサーバーは、第１クライアントコンピュータ２００（例えば、クライアントＡ）のチャット要素２１０からテキストメッセージを受信することができる。メッセージに含まれているのは、希望の受信者（例えば、クライアントＢ、クライアントＣ、等）の識別である。チャットサーバー１８０は、そのメッセージを受信し、受信者を解釈し、そしてメッセージを、希望の受信者のクライアントコンピュータ２００のチャット要素２１０により受け取られるように送信する。
【００４０】
トーナメントサーバー１８２及びトーナメント要素２１２は、複数のクライアントコンピュータ２００間でのトーナメントゲームプレイを容易にするトーナメント機能を与える。トーナメントサーバー１８２は、登録されたクライアントがゲームトーナメントに参加することによりゲームの力量を実証するための場を与え、このサーバーは、他のプレーヤーに勝るその成功性により実証される力量に基づいてプレーヤーを排除したりランク付けしたりする。
ランク付けサーバー１８４及びランク付けシステム要素２１４は、個人及び／又はグループプレーヤーの統計学的情報を追跡し、プレーヤーを比較し、プレーヤーをランク付けし、等々を行うためのランク付け機能を与える。
【００４１】
ユーザ（クライアント）識別サーバー１２８及びユーザ登録要素２１６は、プレーヤーを登録し、各プレーヤーに対する独特のプレーヤー識別子を指定し、各プレーヤーのプレーヤープロフィールを定義し、そしてシステム１００を経てゲームサービスへのプレーヤーアクセスを許可又は拒絶するユーザ識別及び登録機能を与える。ユーザ（クライアント）識別サーバー１２８は、一次データセンター２０に設けられたデータ記憶装置１４０及びデータベース１４４と直接通信する。新たなクライアントは、先ず登録されねばならず、その登録は、ユーザ識別サーバー１２８により記憶される。
【００４２】
リソースサーバー１２６及びリソースアップ／ダウンロード要素２１８は、クライアントが、ゲームプレイ中に他のサーバーからクライアントコンピュータ２００へゲームリソースをアップロード及びダウンロードできるようにするリソース機能を与える。例えば、クライアントは、新たなゲームグラフィック、更新されたスポーツ統計情報、生産後の広告、及びクライアントカスタマイズデータ（例えば、レーストラック、プレーヤー代表、等）をダウンロードすることができる。又、クライアントは、クライアントカスタマイズデータをアップロードすることもできる（例えば、クライアントコンピュータからリソースサーバー１２６へ）。リソースサーバー１２６は、一次データセンター２０に設けられ、そしてマスターリソースサーバーとして機能し、そしてネットワーク１０における使用可能な全リソースの位置に関する完全なデータを含むのが好ましい（例えば、他の全ての公衆サーバー１３２０、不正行為サーバー１２２０、及び他の非保護のサーバー１１２０）。
【００４３】
又、サーバー１２０（又はサーバー１２０を構成する上記サーバーの１つ以上）は、ユーザ（クライアント）識別サーバー１２８に関連して動作し得る仲間リストマネージャーも形成する。例えば、クライアントコンピュータ２００は、そのクライアントの仲間（仲間リストマネージャーにより与えられた）しかそのゲームに参加できないような適当な制限命令で特定のマルチプレーヤーゲームを開始することができる。
又、クライアントの特定の要求に最も適するサービスをクライアントが探索できるようにする理想的サービスファインダーも、サーバー１２０により（又は１つ以上の上記サーバーにより）形成される。例えば、クライアントは、ＩＰに関連したアドレスの問題を経験せずに、インターネット（即ちネットワーク１０）において最適なサービスを探索することができる。理想的サービスファインダーは、登録されたサービス（即ち理想的サービスファインダーが気付くサービス）に関するデータ（例えば、性能、位置フィードバック等）を維持し、そしてそのデータを使用して特定のクライアント要求に対する理想的サービスを選択する。
【００４４】
次いで、図４Ａ及び４Ｂを参照すれば、本発明の実施形態に基づきクライアントコンピュータ２００のプロセッサに関連して動作し得る特殊目的のソフトウェアは、モジュールの集合体であるクロスプラットホームコア（ＣＰＣ）３２０を使用し、これは、多数のハードウェア及びオペレーティングシステムプラットホームに関連してそこで動作し得る同様のプログラム（即ちゲーム）をプログラマーが最小限の開発オーバーヘッドで開発できるようにする。例えば、ＣＰＣ３２０は、Ｗｉｎｄｏｗｓ９５、９８、ＮＴ、Ｗｉｎ２０００、ＷｉｎｄｏｗｓＣＥ、Ｌｉｎｕｘ、Ｓｏｌａｒｉｓオペレーティングシステム、及び種々のハードウェアプラットホーム及びゲーミングコンソールと互換性をもつクロスプラットホームを与える。本発明のＣＰＣ３２０は、第１オペレーティングシステムに関連して第１ハードウェアプラットホームで動作するようにインストールされたマルチプレーヤーコンピュータゲーム（又は実際には他のソフトウェア）が、第２オペレーティングシステムに関連して第２ハードウェアプラットホームで動作するようにインストールされたマルチプレーヤーコンピュータゲーム（ほとんどの場合、同じマルチプレーヤーコンピュータゲーム）と継ぎ目なく通信できるようにする。ＣＰＣ３２０は、ゲームアルゴリズム及びプログラムが、オペレーティングシステム、システムアプリケーションプログラマーインターフェイス（ＡＰＩ）、メモリ、ファイルシステム、スレッド、時間等の相違に関わりなく、異なるハードウェアプラットホームで動作できるようにするクロスプラットホーム通信を与える。従って、パーソナルコンピュータにインストールされた本発明を使用するマルチプレーヤーゲームを実行しているニュージャージー州に在住のプレーヤーＡは、Ｓｅｇａ　Ｄｒｅａｍｃａｓｔ（登録商標）にインストールされた同じマルチプレーヤーゲームを有するカリフォルニア州に在住のプレーヤーＢに対してプレイすることができる。
【００４５】
又、特殊目的のソフトウェアは、アプリケーションモジュール即ちコード３０２と、クライアントコンピュータ２００のオペレーティングシステム３１０、ハードウェア装置３１２及び通信プロトコル３１４との間の通信（即ち両方向データ転送）を容易にするための通信（ｃｏｍｍ）エンジン４０２も備えている。この通信エンジン６００（ｃｏｍｍエンジンＡＰＩとも称される）は、幾つかのハードウェア装置間の通信のための標準的な機能、例えば、データの選択、初期化、接続及び装置に対する送信／受信を与えるクロスプラットホームライブラリーである。通信エンジン６００は、サービス層４１０及び装置層４５０を備えている。ＣＰＣ３２０及び通信エンジン６００は、ソフトウェアアプリケーションを開発するための通信基礎を与え、ハードウェア、ソフトウェア及びプロトコルの独立性を与え、そしてカスタマイズ可能なソフトウェアアルゴリズムの特徴を与える。ＣＰＣ３２０は、マルチプレーヤーコンピュータゲームを書き込むときにソフトウェアプログラマーが通信細部（即ちプロトコル）について考える必要性を排除する。
【００４６】
ＣＰＣ３２０は、計算装置のハードウェアプラットホーム及びオペレーティングシステムを識別し、クロスプラットホームＡＮＳＩ　Ｃライブラリー、クロスプラットホームハードウェアエミュレーション層（ＨＥＬ）を与え、そして解除及びデバッグオプションを与える。ＣＰＣ　ＡＮＳＩ　Ｃライブラリーは、メインシステムファイル、例えば、ハードウェアプラットホームターゲット及び記憶形式ファイル、ＡＮＳＩ　Ｃ互換性層ファイル、及び進歩型ハードウェアブストラクション層（ＨＡＬ）ファイルを含む。これらのファイルは、次いで、以下に詳細に述べるように、ＣＰＣ３２０の種々のサブ要素を含む。種々のサブ要素は、個々にコールすることもできるし、或いはそれらのグループファイル又は完全なファイルリストを介してコールすることもできる。
プラットホームターゲット及び記憶形式ファイルは、プラットホーム特有機能及びクロスプラットホーム形式の規格を決定するのに必要とされる全ての定義及び定数を含む。
【００４７】
ＡＮＳＩ　Ｃ互換性層ファイルは、ＡＮＳＩ　Ｃ互換性機能の定義を含む。ＡＮＳＩ互換性層ファイルは、ＡＮＳＩ　Ｃライブラリーに見出される機能を与える。これは、例えば、メモリ、ストリング及びマス（ｍａｔｈ）のような標準的特徴を含むが、これに限定されない。ＡＮＳＩ　Ｃ互換性層ファイルは、オペレーティングシステムの偏差を伴わずにこれらの特徴を与える。例えば、ＡＮＳＩ　Ｃは時間機能を実施するための標準的な方法を定義するが、あるオペレーティングシステムは、その標準の変形形態を使用する。従って、多数のオペレーティングシステムにわたって搬送できる時間機能を開発することは困難である。ＡＮＳＩ　Ｃ互換性層ファイルは、任意のオペレーティングシステムにおける時間機能をアクセスするためのＡＮＳＩ等価インターフェイスを提供することによりこの問題を排除する。更に、あるオペレーティングシステムは、全ＡＮＳＩ　Ｃライブラリーを与えない。この場合に、本発明のＡＮＳＩ　Ｃ互換性層ファイルは、欠落（ｍｉｓｓｉｎｇ）機能を与える。
【００４８】
進歩型ＨＡＬファイルは、ＡＮＳＩ　Ｃ規格の一部分として含まれない機能を含む。これは、どんなオペレーティングシステムが実行されているかを定義する機能、充分標準的であるが使用できないか又は全プラットホームにおいて一貫していないスレッド、デバッグ及び他の重要な機能を含む。例えば、Ｃ＋＋の新たな削除機能をこれらファイルにおいて定義することができる。
【００４９】
次いで、図４Ａ及び４Ｂを参照し、本発明の特殊目的ソフトウェアの要素及びアーキテクチャーについて以下に詳細に述べる。本発明により構成されたマルチプレーヤーゲームは、図４Ａに一般的に示されそして参照番号３００で一般的に示されたアーキテクチャーを有する。このゲーム３００は、ゲーム形式（例えば、スポーツ、高速トウッチ（ｔｗｉｔｃｈ）、交替ベース等）に特有のアプリケーションソフトウェアを含むアプリケーション要素又はモジュール３０２を含む。このアプリケーションモジュール３０２は、クロスプラットホームコア（ＣＰＣ）３２０の頂部に位置する通信（ｃｏｍｍ）エンジン６００を含むコア技術に直接インターフェイスする。ＣＰＣ３２０は、多数のハードウェア及びオペレーティングシステムプラットホームで実行される同様のプログラム（例えば、マルチプレーヤーコンピュータゲーム）をプログラマーが最小のソフトウェア開発オーバーヘッドで開発できるようにする複数のファイル（即ち、モジュールの集合体）を含む。ＣＰＣ３２０は、Ｗｉｎｄｏｗｓ９５、９８、ＮＴ、Ｗｉｎ２０００、ＷｉｎｄｏｗｓＣＥ、Ｌｉｎｕｘ、Ｕｎｉｘ（登録商標）、Ｓｏｌａｒｉｓ及び種々のゲーミングコンソールとのクロスプラットホーム互換性を与える。従って、マルチプレーヤーコンピュータゲームは、任意のハードウェア及びソフトウェアプラットホーム及びコンフィギュレーションに関連して動作し、そして他のハードウェア及びソフトウェアプラットホーム及びコンフィギュレーションと通信するように迅速に且つ容易に開発することができる。
【００５０】
通信エンジン６００は、アプリケーションモジュール３０２と、オペレーティングシステム３１０並びに各通信装置ハードウェアプラットホームに特有の種々のハードウェア装置３１２及び通信プロトコル３１４との間にインターフェイスを与える。アプリケーションモジュール３０２を書き込むときに、ソフトウェア開発者は、特定のオペレーティングシステムに対するコードも必要としないし、特定のハードウェアプラットホームのハードウェア又はプロトコル要求を考慮する必要もない。むしろ、アプリケーションモジュール３０２は、通信エンジン６００へインターフェイスするように書き込まれ（即ちコード化され）、任意のオペレーティングシステムにおいて実行され、そして通信エンジン６００によりサポートされるハードウェア装置及び通信プロトコルを使用することができる。通信エンジン６００は、プログラミングネットワークアプリケーションをより速く、簡単に、より効率的にそしてより頑丈にする汎用のクロスプラットホーム通信エンジンである。これは、マルチプレーヤーゲーム及びウェブベースアプリケーションに対する技術的な基礎を与える。通信エンジン６００は、クロスプラットホームの必要性を満足し、そしてオペレーティングシステム、例えば、Ｍｉｃｒｏｓｏｆｔ　Ｗｉｎｄｏｗｓ９５、９８、２０００、ＮＴ、及びＣＥ、Ｌｉｎｕｘ、Ｓｏｌａｒｉｓ、ＳＧＩ、パーソナルデジタルアシスタント（ＰＤＡ）オペレーティングシステム、及びワイヤレスオペレーティングシステムをサポートすることができるが、これらに限定されるものではない。以上の説明から当業者に明らかなように、他の現在知られている又は今後開発されるオペレーティングシステムも、通信エンジン６００によってサポートすることができる。
【００５１】
通信エンジン６００は、通信エンジンＡＰＩ４０２を備え、これは、メインモジュール４０４、メッセージ（ｍｓｇ）モジュール４０６、外部ａｐｉ（ｅｘ＿ａｐｉ）モジュール４０８、エラー（ｅｒｒ）モジュール４１２、及びサービスプロトコル（ｓｖｃ　ｐｒｏｔ）モジュール４１４を含む。メッセージモジュール４０６は、クライアントがメモリの割り当て及び速度の問題について注意する必要なく通信エンジンインフラストラクチャーを経てデータを送信する一般的な方法をアプリケーション３０２に与える。エラーモジュール４１２は、通信エンジン６００にエラーが発生したことをクライアントに知らせる方法として通信エンジン６００により使用される。広範囲なエラーに伴い、エラーモジュール４１２の機能を拡張するためにヘルパー機能が与えられる。これらのヘルパーは、エラーのテキスト表示である。サービスプロトコルモジュール４１４は、圧縮及び暗号化のように一般的に使用されるサービスをクライアントに提供することにより通信エンジン６００の機能を拡張する。
【００５２】
通信エンジン６００は、サービス層４１０とインターフェイスし、このサービス層は、チャンネルマネージャー（ｃｈａｎ　ｍｇｒ）４１６と、セッションマネージャー（ｓｅｓｓ　ｍｇｒ）４１８と、メッセージ待ち行列マネージャー（ｍｓｇ　ｑｕｅｕｅ　ｍｇｒ）４５２とを含む。チャンネルマネージャー４１６は、セッションに対するチャンネルリストをマネージする。セッションマネージャー４１８は、そのチャンネルリストに対してオペレーションを実行させることによりチャンネルマネージャー４１６を駆動する。装置層チャンネルを経て実行する必要のあるタスクは、チャンネルマネージャー４１６を経て処理される。その一例は、装置層４５０を経てメッセージを送信することである。各チャンネルは、送信及び受信待ち行列、装置プロトコル、装置情報、アドレス情報、ソフトウェアプロトコルスタック及びコンフィギュレーション情報を含む。
【００５３】
サービス層４１０は、特定のオペレーティングシステム（ＯＳ）のアプリケーションモジュール３０２、ハードウェア装置及び通信プロトコル要求をシールドする。プログラマーは、サービス層４１０に対するコードを必要とするだけであり（通信エンジン６００を経て）、このサービス層は、オペレーティングシステム並びに種々の装置及びプロトコルへインターフェイスするためにアプリケーションモジュール３０２に必要とされる全ての変換を実行する。又、サービス層４１０は、アプリケーションモジュール３０２により進歩型エンジンプロトコルへのアクセスを与えると共に、ソフトウェア開発者がカスタムアプリケーションプロトコルを容易に挿入できるようにする。
【００５４】
サービス層４１０は、一般に、ハードウェア実施コールを装置層４５０へ転送するので、ハードウェアエミュレーション層（ＨＥＬ）と考えられ、そしてハードウェア特徴／エミュレーションを供給する。又、サービス層４１０は、必要に応じて、アプリケーションモジュール３０２が使用できる任意の内部プロトコルを供給することもできる。又、サービス層４１０は、アプリケーションモジュール３０２がそれ自身のプロトコルを供給できるようにもし、これは、サービス層プロトコルスタック４２０内の異なるポイントに挿入することができ、その一例が図５に示されている。このプロトコルスタック４２０は、圧縮４２２、暗号化４２４、キープ・アライブ４２６及びストリームサポート４２８のような上位プロトコル機能と、進歩型ルーティング技術４３０、エラー修正４３４、バッファリング４３６、保証されたメッセージ４３８、仮想ＩＳＰ４４０、及び挿入ノイズ／デバッグ４４２を含む下位プロトコル機能とを含む。
【００５５】
プロトコルスタック４２０により送信プライオリティを使用して、帯域巾を最適化し、プロトコルバッファマネージメントを最適化し、そしてＣＰＵの使用を節約することができる。本質的に、これは、出て行くパケットを、もし可能であれば、単一の出て行くパケットに合成できるようにする。到来する及び出て行く各パケットは、パックされて処理されねばならず、ＣＰＵコンテクストスイッチ、ハードウェア送信実行、等を生じさせる。最適化が行われない場合には、高いパケットカウントが著しいローカルオーバーヘッド及び待ち時間を生じさせる。アプリケーションモジュール３０２により使用される特定の通信媒体に基づいて、送信プライオリティを最適化することができる。比較的低速の接続（例えば、２８．８Ｋモデム）を使用してインターネットにアクセスするときには、待ち時間が２００ミリ秒（ｍｓ）より長くなる。このような知識をもとに、通常のプライオリティパケットが所定の時間ウインドウ内でグループ編成される。例えば、まだ送信するタイミングとなっていない保留中のパケットは、フラッシュされ、そして高いプライオリティのパケットが送信されようとしている場合に送信される。各送信プライオリティに対する満了時間ウインドウは、送信プライオリティを、次の所定の時間ウインドウ内に送信すべくマップできるように構成される。
【００５６】
サービス層プロトコルスタック４２０のバッファリング４３６プロトコルは、不必要なメモリ割り当て、解放、コピー等を考慮することができる。更に、内部受信バッファは、直接検討され、使用され、そしてコピーされる。最適なパケット操作オペレーションの幾つかの例は、メモリ割り当て／解放／コピーが行われない確率が高い状態でヘッダ／フッタをデータパケットに追加／除去する能力である。動的なプロトコルバッファプールも設けられ、これは、必要に応じて使用するための、予め割り当てられそして以前に構成されたプロトコルバッファを含む。
【００５７】
仮想ＩＳＰプロトコル４４０は、インターネットを経てアプリケーション性能をシミュレーションするための必要な全てのフックを与える。仮想ＩＳＰプロトコル４４０は、インターネットＩＳＰ接続として構成されたＬＡＮ（アプリケーションモジュールの観点から）を使用して、アプリケーションモジュール３０２をテストすることができる。仮想ＩＳＰプロトコル４４０は、サービス層４１０に対し次の状態をシミュレーションできるようにする。接続に対するランダムな欠陥、接続のランダムなロス、バリアンスを伴うランダムな待ち時間注入、及びパケットのランダムなロス。仮想ＩＳＰプロトコル４４０のオプションは、異なる媒体にわたり多数の形式のＩＳＰ接続を与えるように完全に構成することができる。例えば、タイヤ１及びタイヤ３の両インターネット接続をシミュレーションすることができる。高速又は低速接続並びに装置の振舞い、例えば、切断パケットドロップも、仮想ＩＳＰプロトコル４４０を使用してシミュレーションすることができる。
仮想ＩＳＰプロトコル４４０の別の効果は、セキュリティである。通信ソフトウェアがいかに振舞うかを見るためにインターネットに接続することは、もはや必要とされない。
【００５８】
装置層４５０は、通信エンジン６００の低レベル、クロスプラットホーム、装置独立層である。これは、オペレーティングシステム特有のＡＰＩコール、バイト順序付け及びデータ整列についてのプラットホーム特有の問題、並びに全プラットホームに対し共通のＡＰＩを与える装置特有のプログラミング技術を取り扱う。装置層４５０は、全オペレーティングシステム上の異なる通信装置への一体化インターフェイスを与え、即ち直接的及び即時の機能遂行に対し、新たな装置ＡＰＩを追加することにより新たな装置の追加を容易にし、オペレーティングシステム特有の細部をソフトウェアエンジニアから隠し、装置特有の形式又は構造の細部をソフトウェアエンジニアから隠し、装置特有のＡＰＩの細部をソフトウェアエンジニアから隠し、装置に対して直接的なＡＰＩとして使用することができ（例えば、装置層は、一般的な「ＳＥＮＤ（）」コマンドを特定の「ＤｅｖＡｐｉ＿Ｓｅｎｄ（）」コマンドにマップする）、そして意図されたオペレーティングシステム、プラットホーム、ネットワークプロトコル等に関わりなく、アプリケーションモジュール３０２が動作するときに関与する共通のインターフェイスを与える。
【００５９】
装置層４５０は、異なるネットワークプロトコル、オペレーティングシステム及び通信装置に関する実施細部を隠す。このように、ダイヤルインメカニズムを使用してＬｉｎｕｘ　ＯＳ上でモデムをプログラミングすると、ネットワークインターフェイスカード（ＮＩＣ）及びＴＣＰ／ＩＰプロトコルを使用してＷｉｎｄｏｗｓマシンと厳密に同じものが上位レベルからプログラミングされる。アプリケーションモジュール３０２の観点から、サブルーチンコールの同じシーケンスが使用され、そしてアドレスパラメータのみが相違する。更に、ヘルパーサブルーチンを使用して異なるアドレス形式を作成し、アドレスの実際の実施がユーザから隠されるようにすることもできる。
【００６０】
装置層４５０は、任意のオペレーティングシステムに対し全てのハードウェア装置及びプロトコルへの一体化されたインターフェイスを与える。装置層４５０は、異なるハードウェア、プロトコル実施及び種々のオペレーティングシステムを取り扱う任意のコードを含む全てのハードウェアプラットホーム特有のコードを備えている。従って、新たなオペレーティングシステム、ネットワーク装置又はプロトコルに対する通信エンジン６００のサポートは、装置層４５０のみにおいてそれに対するサポートを追加することにより行うことができる。
装置層４５０は、ハードウェアアブストラクション層（ＨＡＬ）と考えられ、アプリケーションモジュール３０２（サービス層４１０を経て）と、種々の装置（即ちハードウェアプラットホーム）、オペレーティングシステム及びネットワークプロトコルとの間にインターフェイスを与えるためのコードを含む。
【００６１】
通信エンジン６００は、一般に、パススルーモード、同期モード及び非同期モードの３つの使用モードを有する。各モードは、通信エンジン６００の機能を異なる仕方で使用する。これらのモード、及び通信エンジン６００の機能の使用をいかに必要とするかを、図６及び７を参照して説明する。
図６に示されたパススルーモードでは、通信エンジン６００は、装置層４５０の機能へのインターフェイスとして働く。パススルーモードの付加的な特徴は、ネットワーク１０（受信側に対応フィルタをもつ）を経て通信する前にデータを通過するところのデータフィルタをセットする能力である。例えば、データを圧縮及び／又は暗号化した後に送信し、次いで、受信時に、暗号解読及び圧縮解除することができる。
【００６２】
パススルーモードオペレーションの場合に、アプリケーションモジュール３０２は、セッションを生成し、そしてそのセッションにおいてチャンネルを形成してオープンする。接続は、もし適用できれば、受け入れられ、そしてデータを何らかの方法でバッファや待ち行列に入れる必要なく、装置層４５０とアプリケーションモジュール３０２との間で通信エンジン６００を経てデータが直接的に前後に送信される。本質的に、パススルーモードは、アプリケーションモジュール３０２がネットワークプログラムに精通していて単に通信エンジン６００を使用して、装置、プロトコル及びオペレーティングシステムの細部を隠すことを予想するものである。
【００６３】
通信エンジン６００の同期及び非同期モード動作に対するデータ流が図７に示されている。非同期又は同期モードにおいて、通信エンジン６００は、データをバッファし、データフィルタリングサービスを与え、そしてアプリケーションモジュール３０２に対するメッセージを待ち行列に入れる。更に、新たなデータが受け取られたときの新たな接続、チャンネル切断、等の事象に関してライブラリーのユーザ（即ちアプリケーションモジュール３０２）に通知がなされるような事象駆動方法が使用されてもよい。
【００６４】
図７に示された同期モードにおいて、アプリケーションモジュール３０２は、通信エンジン６００がその機能を遂行するときに制御を行う。これは、メッセージ待ち行列や通知方法が使用でき、従って、アプリケーションモジュール３０２をプログラムするときに事象駆動方法を使用できるという点で、パススルーモードとは異なる。しかしながら、通信エンジン６００は、ＣｏｍｍＥｎｇ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓＷｏｒｋ（以下に詳細に述べる）のような同期オペレーション及び機能を行えるようにするサブルーチンをコールすることにより、機能を遂行することが頻繁に且つ明確に許されねばならない。ここで使用する「サブルーチン」という語は、サブルーチン、コールバック、ファンクション等を含み、そしてここでは、そのアプリケーションプログラム（又はそれに関連したアプリケーションプログラム）が、その付加的な機能を有する別のアプリケーションを呼び出し、実行し、実行するようにさせ、等々を行うことにより、アプリケーションプログラムに対し／そのために付加的な機能が与えられる場合を指すものとする。サブルーチンは、アプリケーションプログラムに対してある機能を遂行し、アプリケーションプログラム（又は別のアプリケーションプログラム、サブルーチン、ライブラリー等）からデータを受け取りそしてデータをそこへ通し、そしてアプリケーションプログラムにより指示されて他のサブルーチン等を呼び出すことができる。ここで与えられるサブルーチン名は、単なる例示であり、本発明の説明を容易にするために使用される名前の一例で、これに限定されず、そして本発明の範囲を何ら限定するものではなく、いかなるサブルーチン名を使用してもよいことが当業者に明らかであろう。種々のサブルーチンの機能は、以下に詳細に述べる。
【００６５】
同期モードは、プライオリティメッセージ待ち行列及び事象駆動プログラミング範例の利点を取り入れるのに有用である。同期モードでは、基礎となるネットワークコードにスレッドが使用されず、通信エンジン６００は、アプリケーションモジュール３０２がＣｏｍｍＥｎｇ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓＷｏｒｋのようなサブルーチンをコールするときしかデータの処理を行わない。更に、アプリケーションモジュール３０２は、その機能に特有のコードをもたずに多数のプロトコルサービス（暗号化、圧縮、ストリーミング等の）利点を取り入れることができる。
【００６６】
図７に一般的に示された非同期モードでは、通信エンジン６００は、スレッドを使用して実行され、そして事象が非同期で発生するときにプログラマー（即ちアプリケーションモジュール３０２）に通知できるようにする。例えば、新たな接続が生じるときには、アプリケーションモジュール３０２は、適当な通知方法により通知される。通信チャンネルにデータが得られるときには、アプリケーションモジュール３０２は、データが同様に得られることが通知され、従って、アプリケーションモジュール３０２が事象に対してポーリングする必要性が排除され、そしてアプリケーションモジュール３０２が、通信エンジン６００の周期的な動作を許すことが防止される。
【００６７】
非同期モードは、通信エンジンライブラリーがＣｏｍｍＥｎｇ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓＷｏｒｋサブルーチンをコールする必要がないか、又はネットワーク通信の非同期の実行を取り扱うようにスレッドを形成する必要がないことを除くと、同期モードと同様である。
アプリケーションモジュール３０２がデータを送信するときには、ＣｏｍｍＥｎｇ＿Ｓｅｎｄサブルーチンがコールされ、その結果、メッセージゲットが適当な送信待ち行列に入れられる。送信待ち行列は、最終的に処理され（ＣｏｍｍＥｎｇ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓＷｏｒｋサブルーチンがコールされるか又は内部スレッドがそれを行うとき）、そして各メッセージがＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＳｅｎｄサブルーチンへ通され、該サブルーチンは、次いで、それを適当なチャンネルのプロトコルスタックにルーティングするか又は装置層４５０へと直接的にルーティングする。
【００６８】
通信エンジン６００により与えられる機能は、通信エンジン６００により呼び出されたサブルーチンにより少なくとも部分的に与えられる。これらの種々のサブルーチンは、通信エンジン６００が、アプリケーションモジュール３０２により要求されるように、パススルーモード、同期モード又は非同期モードで動作できるようにする。又、これらサブルーチンは、アプリケーションモジュール３０２を、特定計算装置の特定ハードウェア、オペレーティングシステム及びプロトコル要求からシールドする。従って、通信エンジン６００、サービス層４１０、装置層４５０、及び種々の通信エンジンサブルーチンは、マルチプレーヤーコンピュータゲームの迅速且つ経済的な開発を容易にし、そして計算装置のハードウェア、オペレーティングシステム又はプロトコルの相違に関わりなく、計算装置におけるプレーヤー間の通信を容易にし且つマネージし、ネットワークを経てゲームプレーヤー間に継ぎ目のない遂行を与える。
通信エンジン６００のサブルーチンに対する以下の説明及び名前は、本発明の理解を容易にするための例示に過ぎず、これに限定するものではない。
【００６９】
ＣｏｍｍＥｎｇ＿Ｓｔａｒｔｕｐ
このサブルーチンは、アプリケーションモジュール３０２が必要なライブラリーを初期化するようにする。実施がスタティックライブラリーである場合には、このサブルーチンは、全体的なライブラリーリソースを割り当てそして初期化するためにアプリケーションモジュール３０２により一度だけコールされる。実施が共用ライブラリー（．ｓｏ）であるか、又はダイナミックリンクライブラリー（．ＤＬＬ）である場合には、通信エンジン６００を使用して各々実行可能であり（アプリケーションモジュール３０２の一部分として与えられ、或いはそれにより又はそれに関連して使用される）、他のサブルーチンにアクセスする前にＣｏｍｍＥｎｇ＿Ｓｔａｒｔｕｐサブルーチンをコールする。これは、通信エンジン６００のライブラリーが、性能及びメモリマネージメントの理由で適切に初期化される。
通信エンジン６００は、該通信エンジン６００の現在ユーザの参照カウントを保持し、従って、それ自体でメモリからアンロードして他のクリーンアップタスクを実行できるときが分かる。
【００７０】
ＣｏｍｍＥｎｇ＿Ｓｈｕｔｄｏｗｎ
このサブルーチンは、通信エンジン６００が、そのＡＰＩを使用する実行可能なファイル又はソフトウェアモジュール３０２をもはや必要としないときにコールされる。このサブルーチンをコールすることにより、ライブラリー参照カウントが減少され、そして不必要なリソースが割り当て解除されてシステムへ適宜に戻される（即ち、計算装置のハードウェア及びソフトウェアにより使用されるようにする）。ここに使用する「システム」という語は、一般に、計算装置並びに汎用及び特殊目的ソフトウェアを指す。
【００７１】
ＣｏｍｍＥｎｇ＿ＯｐｅｎＳｅｓｓｉｏｎ
このサブルーチンは、セッションを生成して初期化するためにアプリケーションモジュール３０２によりコールされる。セッションは、３つの方法でオープンすることができる。パススルーオペレーションの場合、ｅＣｏｍｍＳｅｓｓｉｏｎ＿ＰａｓｓＴｈｒｏｕｇｈサブルーチンが読み出され、これにより、サービス層４１０は、データに対して最低限の処理を行い、そして単にデータを装置層４５０へまっすぐに通過させる。同期動作の場合に、ｅＣｏｍｍＳｅｓｓｉｏｎ＿Ｓｙｎｃサブルーチンが呼び出され、これは、スレッドをもたないプラットホームに対して推奨される。このサブルーチンは、システムにスレッドが使用できるかのようにサービス層４１０が機能するのを許す。ｅＣｏｍｍＳｅｓｓｉｏｎ＿Ｓｙｎｃセッションがオープンされたときには、アプリケーションモジュール３０２（又はそのセッションを確立した他のアプリケーション）が、サービス層４１０を適時にチッキングする役目を果たす。
【００７２】
非同期動作の場合、ｅＣｏｍｍＳｅｓｓｉｏｎ＿Ａｓｙｎｃサブルーチンが呼び出され、これは、セッションをオープンする最も効率的で且つ高速な方法を与える。アプリケーションモジュール３０２は、コールバックサブルーチンを経て発生したエラー又はデータについて通知される。
通知を伴う同期又は非同期モードが要求される場合には、ｐＮｏｔｉｆｙＭｅｔｈｏｄＤａｔａパラメータが、通知詳細を与える構造体を指さねばならない。
ＣｏｍｍＥｎｇ＿ＣｌｏｓｅＳｅｓｓｉｏｎ
このサブルーチンは、既存のセッションを破壊しそしてクリーンアップするために呼び出される。
ＣｏｍｍＥｎｇ＿ＧｅｔＤｅｖｉｃｅＣｏｕｎｔ
このサブルーチンは、システムにおける通信装置の数を返送する。
【００７３】
ＣｏｍｍＥｎｇ＿ＧｅｔＣｏｍｍＤｅｖｉｃｅ
このサブルーチンは、ＣＯＭＭ＿ＤＥＶＩＣＥ＿ＩＤ（即ち通信装置）のリスト及び／又は検出された装置のカウントを検索するためにコールされ、他のＡＰＩは、これを使用して、各装置ＩＤに関する更なる情報を決定することができる。ｐＣｏｍｍＤｅｖｉｃｅに対してＮＵＬＬポインタでコールされたときには、検索された項目の数が返送される。アプリケーションモジュール３０２は、（ｓｉｚｅｏｆ（ＣＯＭＭ＿ＤＥＶＩＣＥ＿ＩＤ）＊装置の数）バイトを割り当て、そしてそのバッファを次のコールにおいてこのサブルーチンへ通過させるのが好ましい。
【００７４】
ＣｏｍｍＥｎｇ＿ＧｅｔＤｅｖｉｃｅＣａｐｓ
このサブルーチンは、ＤｅｖｉｃｅＩＤにより指定された装置の能力を返送する。このサブルーチンは、どの装置を使用するかをその形式及び能力に基づいて決定するのに使用できる。
ＣｏｍｍＥｎｇ＿ＧｅｔＤｅｖｉｃｅＴｙｐｅ
これは、ＤｅｖｉｃｅＩＤにより指定された装置の形式を返送するヘルパーサブルーチンである。
ＣｏｍｍＥｎｇ＿ＧｅｔＰｒｏｔｏｃｏｌＣｏｕｎｔ
このサブルーチンは、システムに登録された通信プロトコルの数を返送する。
【００７５】
ＣｏｍｍＥｎｇ＿ＧｅｔＣｏｍｍＰｒｏｔｏｃｏｌｓ
このサブルーチンは、通信装置に代わって通信プロトコルを返送することを除くと、ＣｏｍｍＥｎｇ＿ＧｅｔＣｏｍｍＤｅｖｉｃｅサブルーチンと同様である。ｐＣｏｍｍＰｒｏｔｏｃｏｌに対してＮＵＬＬポインタでコールされると、登録されたプロトコルの数が返送される。（ｓｉｚｅｏｆ（ＣＯＭＭ＿ＰＲＯＴＯＣＯＬ＿ＩＤ）＊プロトコルの数）バイトの割り当ては、バッファされ、そして次のコールの際にこのサブルーチンへ通過される。次いで、発呼者は、各プロトコルの能力を検索することができる。第１パラメータに対してＮＵＬＬポインタでこのサブルーチンではなくＣｏｍｍＥｎｇ＿ＧｅｔＰｒｏｔｏｃｏｌＣｏｕｎｔをコールするのがより効率的であることに注意されたい。
【００７６】
ＣｏｍｍＥｎｇ＿ＧｅｔＰｒｏｔｏｃｏｌＩＤ
このサブルーチンは、通信プロトコルの計算値が与えられると、ＣＯＭＭ＿ＰＲＯＴＯＣＯＬ＿ＩＤを指すポインタを得るためにコールされる。
ＣｏｍｍＥｎｇ＿ＧｅｔＰｒｏｔｏｃｏｌＣａｐｓ
このサブルーチンは、通信プロトコルの能力構造を検索し、これは、指定のプロトコル能力を決定するために使用される。
ＣｏｍｍＥｎｇ＿ＣｒｅａｔｅＣｈａｎｎｅｌ
このサブルーチンは、チャンネルを割り当てるためにコールされる。コンフィギュレーション構造が供給された場合には、それを使用してチャンネルが構成される。さもなければ、チャンネルは、オープンの前又は後に、必要に応じて構成することができる。
【００７７】
ＣｏｍｍＥｎｇ＿ＯｐｅｎＣｈａｎｎｅｌ
このサブルーチンは、テーブル１に示すように、データを送信及び／又は受信するためのチャンネルをオープンするためにコールされる。
2004514189.tif 000003
【００７８】
ＣｏｍｍＥｎｇ＿ＣｌｏｓｅＣｈａｎｎｅｌ
このサブルーチンは、オープンチャンネルをクローズするためにコールされる。必要に応じて際オープンすることができる。このサブルーチンは、既存のチャンネルに割り当てられた全てのリソースを割り当て解除しないことに注意されたい（以下に述べるＣｏｍｍＥｎｇ＿ＤｅｓｔｒｏｙＣｈａｎｎｅｌ。以下ではそれを行う）。
ＣｏｍｍＥｎｇ＿ＤｅｓｔｒｏｙＣｈａｎｎｅｌ
このサブルーチンは、チャンネルを割り当て解除するためにコールされる。もし必要であれば、チャンネルを破壊する前にそれをクローズする。
【００７９】
ＣｏｍｍＥｎｇ＿ＳｅｔＣｈａｎｎｅｌＣｏｎｆｉｇ
このサブルーチンは、以下のテーブル２に示すように、チャンネルの属性及びソフトウェアプロトコルスタックを必要に応じて構成するためにコールされる。
2004514189.tif 000004
【００８０】
ＣｏｍｍＥｎｇ＿ＧｅｔＣｈａｎｎｅｌＣｏｎｆｉｇ
このサブルーチンは、以下のテーブル３に示すように、チャンネル構成の属性を検索するためにコールされる。
2004514189.tif 000005
【００８１】
ＣｏｍｍＥｎｇ＿ＰｅｅｋＭｓｇ
このサブルーチンは、ユーザ（即ち、アプリケーションモジュール３０２又は通信エンジンＡＰＩ４０２）が、待ち行列に次のメッセージがある場合にそれを探索できるようにする。ｐｐＭｓｇパラメータは、通信エンジン６００における内部メッセージバッファを指すポインタが詰められ、読み取り専用として処理されそしてピーキングのみに使用される。ＣｏｍｍＥｎｇ＿ＲｅｃｖＭｓｇ（以下に述べる）サブルーチンは、バッファからメッセージを取り出すためにコールされる。ｐｐＭｓｇがＮＵＬＬである場合には、メッセージポインタが埋められない。このサブルーチンは、データがあるかどうかを指示するコードを単に返送する。メッセージがある場合には、ＣｏｍｍＥｎｇ＿ＰｅｅｋＭｓｇは、ｐｂＤａｔａを非ゼロ値にセットする。メッセージがない場合には、ｐｂＤａｔａが指す値がゼロにセットされる。
【００８２】
ＣｏｍｍＥｎｇ＿ＲｅｃｖＭｓｇ
このサブルーチンは、メッセージ待ち行列からメッセージを検索するためにコールされる。これをコールすると、ポインタｐｐＭｓｇには、適当なメッセージデータ構造体を指すポインタで埋められる。メッセージヘルパーサブルーチン（即ちメッセージクラッカー）は、各メッセージ形式から適当なデータを抽出するためにコールすることができる。発呼者は、終了時にＣｏｍｍＥｎｇ＿ＦｒｅｅＭｓｇをコールすることによりメッセージを割り当て解除しなければならない。
【００８３】
ＣｏｍｍＥｎｇ＿Ｓｅｎｄ
このサブルーチンは、データを送信するためにコールされ、そして以下のテーブル４に定義される。関連セッションに対して（即ち、パススルーモードにおいて）待ち行列バッファリングがイネーブルされない場合には、メッセージが単に送出される（チャンネルのプロトコルスタックにおいてデータフィルタにより任意に処理された後に）。さもなければ、データは、適当な送信待ち行列に入れられ、そして適当な時期に処理される。メッセージが処理されると、それがチャンネルのソフトウェアプロトコルスタックを経て送信され、そして最終的に、装置層４５０へ送信される。最初に、パススルーモードにおいて、チャンネルがプロトコルスタックを使用するように構成された場合には、ＣＯＭＭ＿ＭＳＧ構造が割り当てられ、次いで、データがプロトコルスタックのデータフィルタプロトコルを経てフィルタされる。
2004514189.tif 000006
【００８４】
ＣｏｍｍＥｎｇ＿ＳｅｎｄＭｓｇ
このサブルーチンは、既存のメッセージを送信するのに使用できる。このサブルーチンは、ユーザがカスタムメッセージ形式の送信を希望するとき又は受信したメッセージをエコー処理又は転送すべきときに有用である。
ＣｏｍｍＥｎｇ＿Ｐｅｅｋ
このサブルーチンは、以下のテーブル５に示すように、装置層のＣＯＭＭ＿Ｐｅｅｋ　ＡＰＩへのパススルーサブルーチンである。しかしながら、チャンネルがリモート端からクローズされた場合には、ＣｏｍｍＥｎｇ＿Ｐｅｅｋがこれを検出することは常に可能ではない。時々、このサブルーチンは、データが存在することを首尾良く返送するが、データは、チャンネルがリモート位置でクローズされたというものになる。それ故、チャンネルにおける送信又は受信オペレーションは、切断を検出させる。
2004514189.tif 000007
【００８５】
ＣｏｍｍＥｎｇ＿Ｒｅｃｖ
このサブルーチンは、以下のテーブル６に示すように、チャンネルを経て直接データを受信するためにコールされる。これは、受信されるべきデータがあるか又は時間切れが生じる（チャンネルの構成当たり）までブロックし、従って、発呼者は、直ちに返送しない可能性を取り扱わねばならない。受信チャンネル（即ちＣｈａｎｎｅｌＩＤ）がプロトコルスタックで構成される場合には、データは、発呼者へ返送される前にプロトコルスタックを経て処理される。ＡＰＩが装置層へのパススルーとして使用されない限り、発呼者は、ＣｏｍｍＥｎｇ＿ＲｅｃｖＭｓｇを使用してデータ及びメッセージを非同期で検索しなければならない。ユーザは、返送されたデータバッファを割り当て解除しなければならないことに注意されたい。というのは、このサブルーチンは、データを割り当てそしてそのデータにポインタを返送するからである。
【００８６】
2004514189.tif 000008
【００８７】
ＣｏｍｍＥｎｇ＿ＡｃｃｅｐｔＣｏｎｎｅｃｔｉｏｎ
このサブルーチンをコールすると、チャンネルが接続を待機できる。これは、パススルーモードにおいて接続指向のプロトコルのみで使用されるべきである。
ＣｏｍｍＥｎｇ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓＷｏｒｋ
同期モードにあるときには、ユーザは、通信エンジン６００がそのタスクを実行できるようにするためにこのサブルーチンをコールしなければならない。ユーザは、送信及び／又は受信される必要のあるデータの量を取り扱うに充分なほど頻繁にこのサブルーチンがコールされることを保証しなければならない。
ＣｏｍｍＥｎｇ＿ＡｌｌｏｃＭｓｇ
このサブルーチンは、以下のテーブル７に示すように、入力パラメータに基づいてメッセージを割り当てる。
2004514189.tif 000009
【００８８】
ＣｏｍｍＥｎｇ＿ＦｒｅｅＭｓｇ
このサブルーチンは、ポインタにより指定されたメッセージ構造を解放する（即ち、内部Ｍｓｇプールへ返送する）。
ＣｏｍｍＥｎｇ＿ＩｓＥｒｒｏｒ
このサブルーチンは、ｅＥｒｒｏｒＣｏｄｅがエラーである場合には、非ゼロを返送し、さもなければ、ゼロを返送する。更に、ｅＥｒｒｏｒＣｏｄｅがエラーである場合には、デバッグモードにおいて、エラーメッセージのテキスト記述及びｓｚＦｕｎｃｔｉｏｎＮａｍｅパラメータをプリントアウトし、従って、デバッグ出力が、エラーを検出したサブルーチンの名前を含むようにする。
【００８９】
ＣｏｍｍＥｎｇ＿ＩｓＰｒｏｔｏｃｏｌＳｕｐｐｏｒｔｅｄ
このサブルーチンは、指定の装置（ＤｅｖｉｃｅＩＤ）がＰｒｏｔｏｃｏｌＩＤで指示された装置プロトコルをサポートする場合に非ゼロを返送する。
チャンネルマネージャー４１６のモジュールインターフェイス機能及びそれに関連したサブルーチンは、以下に詳細に説明する。
ＣｈａｎＭａｎ＿ＣｒｅａｔｅＣｈａｎｎｅｌ
このサブルーチンは、チャンネル構造体を形成し、そして指定のフラグに基づいてそれを適切に初期化する。更に、チャンネルは、適切なセッションのチャンネルリストに追加される。これは、チャンネルマネージャー４１６が実施を隠すのでチャンネル構造体を実際に生成するためにＣｏｍｍＥｎｇ＿ＣｒｅａｔｅＣｈａｎｎｅｌ　ＡＰＩサブルーチンによってコールされる。
【００９０】
ＣｈａｎＭａｎ＿ＯｐｅｎＣｈａｎｎｅｌ
このサブルーチンは、実際に、チャンネルをオープンする。チャンネルは、それを使用してデータを送信又は受信する前にオープンしなければならない。これは、ＣｏｍｍＥｎｇ＿ＯｐｅｎＣｈａｎｎｅｌ　ＡＰＩサブルーチンによりコールされる。
ＣｈａｎＭａｎ＿ＩｎｉｔＣｈａｎｎｅｌＦｒｏｍＩＤ
このサブルーチンは、装置層チャンネルＩＤ及びアドレス情報に基づいて通信エンジン６００のチャンネルを初期化する。
【００９１】
ＣｈａｎＭａｎ＿ＣｌｏｓｅＣｈａｎｎｅｌ
このサブルーチンは、チャンネルをクローズするためにコールされる。そのリソースは割り当て解除されず、チャンネルがインアクティブモードに入れられることに注意されたい。これは、チャンネルが含蓄的にクローズされたときに内部でコールされるか、或いはＣｏｍｍＥｎｇ＿ＣｌｏｓｅＣｈａｎｎｅｌ　ＡＰＩサブルーチンを経てコールされる。
ＣｈａｎＭａｎ＿ＤｅｓｔｒｏｙＣｈａｎｎｅｌ
このサブルーチンは、指定のチャンネルを破壊し、そして必要なクリーンアップが実行されることを確保する。クリーンアップは、適当なセッションのチャンネルリストからチャンネルを除去することを含む。このサブルーチンは、チャンネルのリソースを割り当て解除しなければならないとき、例えば、対応するセッションがシャットダウンするか、又はチャンネルがもはや必要とされないときにコールされる。チャンネルが依然としてオープンである場合には、このサブルーチンは、ＣｏｍｍＥｎｇ＿ＣｌｏｓｅＣｈａｎｎｅｌサブルーチンを呼び出してそれをクローズした後に、それを破壊する。これは、チャンネルがいかに破壊されるかに関わらず参照カウントが有効であるように保証する。
【００９２】
ＣｈａｎＭａｎ＿ＩｎｉｔＣｈａｎｎｅｌＬｉｓｔ
このサブルーチンは、指定のセッションに対するチャンネルリストを生成しそして初期化する。チャンネルリストの実施は、チャンネルマネージャー４１６によりセッションマネージャー４１８から隠されるので、このサブルーチンは、チャンネルリストを初期化するためにコールされる。
ＣｈａｎＭａｎ＿ＤｅｓｔｒｏｙＣｈａｎｎｅｌＬｉｓｔ
このサブルーチンは、指定のセッションに対しチャンネルリストを破壊する。
ＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＳｅｎｄ
この送信サブルーチンは、実際の処理（必要に応じて）とデータ又はメッセージの送信とを行うために適当なプロトコルスタックの送信サブルーチンをコールする。メッセージ待ち行列マネージャー４５２は、送信待ち行列を処理するときにこのサブルーチンをコールする。何かを送信すべきときには、ＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＳｅｎｄサブルーチンが最終的にコールされる。このサブルーチンは、そのプロトコルスタックを経てデータをプッシュし、そしてそれをダウン方向に装置層４５０へ送信するように進む。
【００９３】
ＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＲｅｃｖ
このＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＲｅｃｖサブルーチンは、受信したメッセージを、ライブラリーユーザによって検索又はピーク（ｐｅｅｋ）されるべく待ち行列に入れる前に、処理するためにコールされる。このサブルーチンは、プロトコルスタックからメッセージを引き出すためにコールされ、これは、次いで、発呼者によりチャンネルの受信待ち行列に入れられる。しかしながら、プロトコルスタックは、それ自身の受信待ち行列を有し、この場合に、このサブルーチンは、ＣｏｍｍＥｎｇ＿ＲｅｃｖＭｓｇ　ＡＰＩサブルーチンによって直接コールされる。装置層４５０から何か到来するときには、ＣｈａｎＭａｎ＿ＰｒｏｃｅｓｓＲｅｃｖがコールされ、メッセージ待ち行列にデータを入れる前にそれを処理する。
【００９４】
ＣｈａｎＭａｎ＿ＤｏＡｓｙｎｃＷｏｒｋ
このサブルーチンは、チャンネルのプロトコルスタックのチック（ｔｉｃｋ）サブルーチンへのエントリーポイントである。このサブルーチンは、各チャンネルにその処理を行う機会を許すためにセッションマネージャー４１８によりコールされる。
チャンネルコンフィギュレーションマネージャーは、特定の装置、装置プロトコル及びソフトウェアプロトコルスタックを使用するようにチャンネルを構成するのをマネージする。これは、主として、チャンネルコンフィギュレーションサブ構造体におけるタスクを遂行するためにチャンネルマネージャー４１６により駆動されるか、又はチャンネルを構成するために通信エンジン６００により駆動される。
【００９５】
各チャンネルは、それ自身のチャンネル特有のコンフィギュレーションを有する。このコンフィギュレーションは、ソフトウェアプロトコルスタックと、それに関連した装置と、データを搬送するのに使用される装置プロトコルと、送信又は受信或いは送信・受信モードにおいてオープンであるかどうかといった他の属性を含む。
チャンネルコンフィギュレーションマネージャーのモジュールＡＰＩは、次のことを行えるようにする機能を含む。即ち、チャンネルのプロトコルスタックにプロトコルを追加し又は除去し、装置プロトコルを使用するようにセットし（これは、チャンネルを生成するのに必要な属性をセーブし、装置層チャンネルをクローズし、新たな装置プロトコルを使用して別の装置層をオープンし、そして現在Ｃｏｍｍ＿ｃｈａｎｎｎｅｌの装置層チャンネルＩＤを装置層における新たに生成したチャンネルＩＤにセットすることにより、チャンネルマネージャー４１６を介してランタイムに変更可能である）、装置を使用するようにセットし、そして他の属性をセット又は変更するという機能を含む。
【００９６】
ＣｈａｎＣｆｇ＿ＤｅｓｔｒｏｙＣｈａｎＣｆｇ
チャンネルマネージャー４１６は、チャンネルのコンフィギュレーションデータを割り当て解除するためにこのサブルーチンをコールする。
ＣｈａｎＣｆｇ＿ＣｏｐｙＣｈａｎｎｅｌＣｆｇ
このヘルパーサブルーチンは、ソースチャンネルコンフィギュレーション構造体から行先構造体へデータをコピーする。
セッションマネージャー４１８は、セッション及びセッション特有のデータ、例えば、通知メソッド及びチャンネルリストをマネージする。各セッションは、それ自身の通知メソッド、チャンネルリスト、並びにセッション特有のデータ及びライブラリーのコンフィギュレーションを有する。
【００９７】
セッションマネージャー４１８は、チャンネルマネージャー４１６及びメッセージ待ち行列マネージャー４５２を含むライブラリーの他部分を駆動する。チャンネルマネージャー４１６は、セッションのチャンネルリストをマネージする。メッセージ待ち行列マネージャー４５２は、全体的な通信エンジン６００のメッセージ待ち行列をマネージする。
受信したメッセージを取り扱うためにコールバックサブルーチンが装置層４５０に登録される。メッセージが受信されると、それが受信待ち行列に入れられ（メッセージ待ち行列マネージャー４５２へのコールを介して）、次いで、ユーザは、その特定セッションに対して設定された適当な通知メソッドを使用して通知される。
【００９８】
セッションマネージャーのモジュールインターフェイス機能及びそれに関連したサブルーチンについて、以下に詳細に説明する。
ＳｅｓｓＭａｎ＿ＳｔａｒｔＵｐ
このサブルーチンは、セッションマネージャー４１８を始動する。ここでは、全て一回で初期化が行われる。
ＳｅｓｓＭａｎ＿ＳｈｕｔＤｏｗｎ
このサブルーチンは、これがコールされると、セッションマネージャー４１８をシャットダウンし、そしてセッションにより使用される全てのリソースは、クリーンアップされる。
ＳｅｓｓＭａｎ＿ＡｄｄＳｅｓｓｉｏｎ
このサブルーチンは、セッションに特有のデータの全ての必要な割り当てを含んで、セッションを生成しそして初期化する。
【００９９】
ＳｅｓｓＭａｎ＿ＲｅｍｏｖｅＳｅｓｓｉｏｎ
このサブルーチンは、セッションを破壊し、そして指定のセッションに対する必要なクリーンアップを実行する。
ＳｅｓｓＭａｎ＿ＳｅｔＣｏｎｆｉｇ
このサブルーチンは、ユーザが状態によりセッションを構成するのを許す。
ＳｅｓｓＭａｎ＿ＧｅｔＣｏｎｆｉｇ
このサブルーチンは、現在のセッション状態コンフィギュレーションを検索する。
ＳｅｓｓＭａｎ＿ＳｅｔＮｏｔｉｆｉｃａｔｉｏｎＭｅｈｏｄ
このサブルーチンは、特定のセッションに対する通知メソッド及びデータをセットする。
【０１００】
ＳｅｓｓＭａｎ＿ＤｏＳｙｎｃｈｒｏｎｏｕｓ
このサブルーチンは、セッションマネージャー４１８が必要な同期動作を実行できるようにする。このサブルーチンは、次いで、チャンネルマネージャー４１６が、必要に応じて、適当なチャンネル上で同期動作を実行できるようにする。
メッセージ待ち行列マネージャー４５２は、通信エンジン６００のメッセージ待ち行列を管理する。セッションマネージャー４１８は、そのモジュールインターフェイスを経てメッセージ待ち行列マネージャー４５２を駆動する。メッセージ待ち行列マネージャー４５２のアーキテクチャーは、非常に簡単であり、即ちプライオリティに基づいて適当な待ち行列にメッセージを挿入する。装置層４５０に登録されたコールバックサブルーチンを経てメッセージが受信されると、メッセージ待ち行列マネージャー４５２は、チャンネルのプロトコルスタックを経てメッセージを処理し、そしてそのメッセージを適当な待ち行列に入れる。メッセージが、通信エンジン６００の送信サブルーチン（例えば、ＣｏｍｍＥｎｇ＿ＳｅｎｄＭｓｇ）を経て送信されると、メッセージは、そのプライオリティに基づいて送信待ち行列に入れられる。メッセージ待ち行列マネージャー４５２が送信待ち行列を処理すると、チャンネルマネージャー４０４の送信サブルーチン（例えば、ＣｈａｎＭａｎ＿Ｓｅｎｄ）をコールして、プロトコルスタックを経て実際の送信を実行する。
【０１０１】
メッセージ待ち行列マネージャー４５２のモジュールインターフェイス機能及びそれに関連したサブルーチンを次に詳細に説明する。
ＭＱＭａｎ＿Ｓｔａｒｔｕｐ
このスタートアップサブルーチンは、メッセージ待ち行列を生成しそして初期化する。
ＭＱＭａｎ＿Ｓｈｕｔｄｏｗｎ
このシャットダウンサブルーチンは、全待ち行列を破壊しそしてそれ自身の後にクリーンアップする。
ＭＱＭａｎ＿ＩｎｉｔＣｈａｎｎｅｌＱｕｅｕｅ
このサブルーチンは、指定チャンネルの受信メッセージ待ち行列を初期化する。
ＭＱＭａｎ＿ＤｅＩｎｉｔＣｈａｎｎｅｌＱｕｅｕｅ
このサブルーチンは、指定チャンネルの受信メッセージ待ち行列をクリーンアップする。
【０１０２】
ＭＱＭａｎ＿ＩｎｓｅｒｔＳｅｎｄＭｓｇ
このサブルーチンは、プライオリティに基づいて適当な送信待ち行列にメッセージを挿入する。これは、データの送信及び受信を取り扱うメカニズムから最も頻繁にコールされる。このメカニズムは、セッションマネージャー４１８を経て実行される。
ＭＱＭａｎ＿ＰｒｏｃｅｓｓＳｅｎｄＱｕｅｕｅ
このサブルーチンは、送信待ち行列における全てのメッセージを処理するためにセッションマネージャー４１８によりコールされる。本質的に、このサブルーチンは、送信待ち行列を横断し、チャンネルポインタを参照解除し、そしてチャンネルの送信サブルーチンをコールする。
【０１０３】
ＭＱＭａｎ＿ＦｌｉｓｈＳｅｎｄＱｕｅｕｅ
このサブルーチンは、指定のメッセージ待ち行列をフラッシュする。待ち行列に入れられたメッセージは、処理されるか又は破棄される。
ＭＱＭａｎ＿ＩｎｓｅｒｔＲｅｃｖＭｓｇ
このサブルーチンは、適当なチャンネル受信待ち行列にメッセージを挿入する。セッションマネージャー４１８は、装置層４５０に登録されたコールバックサブルーチンを経てメッセージを受信するときにこのサブルーチンをコールする。
ＭＱＭａｎ＿ＰｅｅｋＭｓｇ
このサブルーチンは、指定のチャンネルに対する次のメッセージを指すポインタを返送する。
ＭＱＭａｎ＿ＲｅｍｏｖｅＭｓｇ
このサブルーチンは、指定チャンネルの受信待ち行列からメッセージを除去する。メッセージポインタ自体が指定されない場合には、指定チャンネルの受信待ち行列のヘッドにどんなメッセージがあっても除去される。
【０１０４】
ＭＱＭａｎＦｌｕｓｈＲｅｃｖＱｕｅｕｅ
このサブルーチンは、指定チャンネルの受信待ち行列をフラッシュする。
ＣＰＣ３０２は、次の機能、即ちクロスプラットホームＡＮＳＩ（アメリカン・ナショナル・スタンダーズ・インスティテュート）Ｃライブラリー、標準形式のアクロスプラットホーム及びコンパイラー、標準化されたコンパイラー特徴、プラットホーム形式、Ｕｎｉｃｏｄｅに対するサポート、クロスプラットホームハードウェアエミュレーション層、及び解除及びデバッグオプションを与える。ＣＰＣ３０２は、次のハードウェアプラットホーム（一例であって、これに限定されない）、即ちＷｉｎｄｏｗｓ９５／９８／ＮＴ　４．０／２０００、Ｄｒｅａｍｃａｓｔ用Ｗｉｎｄｏｗｓ　ＣＥ、Ｄｒｅａｍｃａｓｔ用シノビ、Ｌｉｎｕｘ（Ｒｅｄ　ｈａｔ　５．１／５．２／６．０／６．１）、及びＰｌａｙｓｔａｔｉｏｎ２に関連して動作し得る。ここでの説明から当業者に明らかなように、他のハードウェアプラットホームも本発明の精神及び範囲内に包含される。従って、以上に述べたハードウェアプラットホームは、単なる例示に過ぎず、本発明をそれに限定するものではない。サポートされるハードウェアプラットホームは、例えば、Ｃ＿ｔａｒｇｅｔｓ．ｈのようなファイルに定義されてもよい。
【０１０５】
Ｕｎｉｃｏｄｅは、キャラクタを整数として表わすための規格である。各キャラクタに８ビットを使用するＡＳＣＩＩとは異なり、Ｕｎｉｃｏｄｅは、１６ビットを使用し、これは、６５，０００以上の独特のキャラクタを表現できることを意味する。これは、英語言語及び西欧言語プログラム（即ちコンピュータゲーム）には不必要であるが、他の幾つかの言語、例えば、ギリシャ語、中国語及び日本語には必要である。ソフトウェア産業が益々グローバル化されるのにつれて、Ｕｎｉｃｏｄｅは、最終的に、標準的なキャラクタコードフォーマットとしてＡＳＣＩＩに取って代わることになろう。ＣＰＣ３２０は、ＡＳＣＩＩをＵｎｉｃｏｄｅにそしてその逆にも変換するためのマクロを含むことができる。
【０１０６】
以上、本発明の基本的な新規な特徴をその好ましい実施形態に関連して説明したが、当業者であれば、本発明の範囲から逸脱せずに、種々の省略、置き換え、及び変更がなされ得ることが理解されよう。それ故、本発明は、特許請求の範囲のみによって限定されるものとする。
【図面の簡単な説明】
【図１Ａ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの構成を示す回路図である。
【図１Ｂ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの別の構成を示す回路図である。
【図１Ｃ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの更に別の構成を示す回路図である。
【図１Ｄ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの更に別の構成を示す回路図である。
【図１Ｅ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの更に別の構成を示す回路図である。
【図１Ｆ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの更に別の構成を示す回路図である。
【図１Ｇ】
本発明の実施形態により構成されたマルチプレーヤーコンピュータゲームシステムの更に別の構成を示す回路図である。
【図２】
サーバークラスターとして構成されそして図１Ａのマルチプレーヤーコンピュータゲームシステムの一部分として設けられた複数のサーバーの回路図である。
【図３】
本発明の実施形態によりクライアント計算装置のプロセッサに関連して動作し得る特殊目的ソフトウェアにより与えられる種々の要素を示す図である。
【図４Ａ】
本発明の実施形態によるアプリケーションプログラム、クロスプラットホームコア、並びにクライアントコンピュータハードウェア及びオペレーティングシステムのアーキテクチャーを示す図である。
【図４Ｂ】
本発明の実施形態によるアプリケーションプログラム、クロスプラットホームコア、並びにクライアントコンピュータハードウェア及びオペレーティングシステムのアーキテクチャーを示す図である。
【図５】
図４Ａに示すクロスプラットホームコアのサービス層に対するプロトコルスタックを示す図である。
【図６】
本発明のクロスプラットホームコアの通信エンジンのパススルーモードオペレーションに対するデータの流れを示す図である。
【図７】
本発明のクロスプラットホームコアの通信エンジンの同期モードオペレーションに対するデータの流れを示す図である。
【図８Ａ】
本発明によるマッチ・メークサーバーの実施形態を示す図である。
【図８Ｂ】
本発明によるマッチ・メークサーバーの別の実施形態を示す図である。
【図８Ｃ】
本発明によるマッチ・メークサーバーの更に別の実施形態を示す図である。
【図１Ａ】
2004514189.tif 000010
【図１Ｂ】
2004514189.tif 000011
【図１Ｃ】
2004514189.tif 000012
【図１Ｄ】
2004514189.tif 000013
【図１Ｅ】
2004514189.tif 000014
【図１Ｆ】
2004514189.tif 000015
【図１Ｇ】
2004514189.tif 000016
【図２】
2004514189.tif 000017
【図３】
2004514189.tif 000018
【図４Ａ】
2004514189.tif 000019
【図４Ｂ】
2004514189.tif 000020
【図５】
2004514189.tif 000021
【図６】
2004514189.tif 000022
【図７】
2004514189.tif 000023
【図８Ａ】
2004514189.tif 000024
【図８Ｂ】
2004514189.tif 000025
【図８Ｃ】
2004514189.tif 000026
【国際公開パンフレット】
2004514189.tif 000027
2004514189.tif 000028
2004514189.tif 000029
2004514189.tif 000030
2004514189.tif 000031
2004514189.tif 000032
2004514189.tif 000033
2004514189.tif 000034
2004514189.tif 000035
2004514189.tif 000036
2004514189.tif 000037
2004514189.tif 000038
2004514189.tif 000039
2004514189.tif 000040
2004514189.tif 000041
2004514189.tif 000042
2004514189.tif 000043
2004514189.tif 000044
2004514189.tif 000045
2004514189.tif 000046
2004514189.tif 000047
2004514189.tif 000048
2004514189.tif 000049
2004514189.tif 000050
2004514189.tif 000051
2004514189.tif 000052
2004514189.tif 000053
2004514189.tif 000054
2004514189.tif 000055
2004514189.tif 000056
2004514189.tif 000057
2004514189.tif 000058
2004514189.tif 000059
2004514189.tif 000060
2004514189.tif 000061
2004514189.tif 000062
2004514189.tif 000063
2004514189.tif 000064
2004514189.tif 000065
2004514189.tif 000066
2004514189.tif 000067
2004514189.tif 000068
2004514189.tif 000069
2004514189.tif 000070
2004514189.tif 000071
2004514189.tif 000072
2004514189.tif 000073
2004514189.tif 000074
2004514189.tif 000075
2004514189.tif 000076
2004514189.tif 000077
2004514189.tif 000078
2004514189.tif 000079
2004514189.tif 000080
2004514189.tif 000081
2004514189.tif 000082
2004514189.tif 000083
2004514189.tif 000084
2004514189.tif 000085
2004514189.tif 000086
2004514189.tif 000087
2004514189.tif 000088
2004514189.tif 000089
2004514189.tif 000090
2004514189.tif 000091
2004514189.tif 000092
2004514189.tif 000093
2004514189.tif 000094
2004514189.tif 000095
2004514189.tif 000096
2004514189.tif 000097
2004514189.tif 000098
2004514189.tif 000099
2004514189.tif 000100
2004514189.tif 000101
【国際公開パンフレット（コレクトバージョン）】
2004514189.tif 000102
2004514189.tif 000103
【国際調査報告】
2004514189.tif 000104
2004514189.tif 000105
2004514189.tif 000106