Microsoft DirectX 8.0 (C++)

ロビー可能ゲームとの通信

ロビー クライアントとそれに関連するロビー サーバーとの通信は、都合のよい方法で自由に処理できる。Microsoft® DirectPlay® では、ロビー クライアントがロビー可能ゲーム アプリケーションと通信する方法だけが指定されている。

ロビー クライアントは、ゲーム アプリケーションと直接通信しない。代わりに、DirectPlay ロビー クライアント オブジェクト (CLSID_DirectPlay8LobbyClient) と、その IDirectPlay8LobbyClient インターフェイスを通じて通信する。ゲーム アプリケーションがロビー可能なら、この結果、ロビー対象アプリケーション オブジェクトがゲームにメッセージを渡す。ロビー クライアントは、IDirectPlay8LobbyClient インターフェイスを使って以下のことを実行できる。

  DirectPlay ロビー クライアントは、ロビー可能かどうかにかかわらず、あらゆるアプリケーションを起動できる。ただし、ゲームの進行中に DirectPlay を使ってロビー クライアントに応答できるのは、ロビー可能アプリケーションだけである。

ロビー クライアント オブジェクトは、ロビー クライアントが実装したコールバック関数を通じて、ロビー クライアントと通信する。ロビー クライアント オブジェクトには、初期化時に関数ポインタが渡される。ロビー クライアント オブジェクトは、このコールバック関数を使って、以下のような情報をロビー クライアントに送信できる。

アプリケーションの起動

アプリケーションには、起動時にゲーム固有のデータ ブロックを渡すことができる。ロビー クライアントからロビー可能アプリケーションが起動されると、アプリケーションはロビー対象アプリケーション オブジェクトを作成し、初期化する。情報は、この初期化メソッドを通じてゲームに渡される。

ロビー対象アプリケーション オブジェクトが初期化されると、ユーザーが接続されたことを示すメッセージがロビー クライアントに届く。このメッセージが持つ主な目的の 1 つは、アプリケーションがロビー可能であることをロビー クライアントに知らせることである。起動後にある程度の時間が経過しても、ロビー クライアントに接続メッセージが届かない場合には、ゲームがロビー可能でないので、この接続をあきらめることができる。

アプリケーションの起動後

ロビー可能ゲームが始まると、ロビー クライアントは比較的暇になる。ユーザーのメッセージの多くは、ゲーム トポロジに応じて、ほかのプレーヤーに直接送信されるか、またはゲーム サーバーに送信される。ただし、切断やホストの移行といったイベントが発生すると、DirectPlay からロビー クライアントにメッセージが送信される。これらのメッセージにより、ロビー クライアントがロビー サーバーに状態変化を渡すことが可能になる。たとえば、ホストが移行した場合、ロビー サーバーは UI に新しいホストを反映できる。

アプリケーションは、ロビー クライアントにメッセージを渡すこともできる。このメッセージには事実上あらゆるデータを格納できる。また、用途にも制限はない。ロビー クライアントは、通常、そのデータをロビー サーバーに渡して処理を任せる。たとえば、ゲームの終了時に、ロビー サーバーのハイスコア一覧を更新するため、アプリケーションからロビー サーバーにメッセージを送信してもよい。