Microsoft DirectX 8.0 (Visual Basic)

ホストの列挙

セッションを準備する 1 つの方法は、セッション ホストが利用可能になったことを本人に通知させることである。この種のセッションを、"ある要素を全要素にコピーするセッション" と言う。ピアまたはクライアントは、利用可能なホストを列挙し、1 つを選択し、接続要求を送信してそのゲームに参加することにより、参加するゲームを探すことができる。詳細については、「ピアツーピア セッション」または「クライアント/サーバー セッション」を参照すること。

ほかの列挙と異なり、利用可能なホストの要求に応答するために必要な情報は、ローカル コンピュータに記憶されていない。代わりに、クライアントまたはピアが要求を (たとえばローカル サブネット上で) 全要素にコピーし、利用可能なホストからの応答を待つ必要がある。一方、ホストは、これらの要求を待ってから適切に応答する必要がある。このように、自分がセッション メンバの候補かセッション ホストかによって、手順は微妙に異なる。

次の手順は、ピアツーピア セッションに利用可能なホストの列挙方法を示している。クライアント/サーバー セッション用の手順も、基本的にこれと同じである。DirectPlay8Peer.EnumHosts は、列挙を開始するメソッドである。主要な設定パラメータは、ApplicationDescDeviceinfo、および AddrHost である。

  1. プレーしたいゲームの GUID を DPN_APPLICATION_DESC 型の guidApplication メンバに割り当て、それを ApplicationDesc パラメータに割り当てる。
  2. 対象のデバイスの DirectPlay8Address オブジェクトを作成し、それを Deviceinfo に割り当てる。このオブジェクトには、ネットワーク接続の確立に必要な情報が格納されている。
  3. 利用可能なホストを特定のコンピュータに照会するには、ホスト コンピュータに対応する DirectPlay8Address オブジェクトを作成し、それを pdpaddrHost に割り当てる。このオブジェクトが空の場合、DirectPlay は pdpaddrDeviceinfo に格納された情報に基づいてアドレスを作成する。アドレス オブジェクトの詳細については、「DirectPlay アドレシング」を参照すること。通常、IP または IPX サービス プロバイダを使用している場合は、この結果、使用中のローカル サブネットへ照会はある要素を全要素にコピーする。
  4. DirectPlay8Peer.EnumHosts を呼び出す。
  5. この結果、DirectPlay は、メッセージ ハンドラの DirectPlay8Event.EnumHostsResponse メソッドに対し、応答するホストそれぞれにつき 1 回ずつ一連の呼び出しを行う。
    1. メッセージ ハンドラに返された情報を調べ、セッションを選択し、DirectPlay8Peer.Connect を呼び出してそのセッションへの参加を要求する。

ある要素を全要素にコピーするセッションのホストとなるには、自分が利用可能なことを通知し、照会または接続要求を待つ。次の手順はピアツーピア ホストに適用されるが、クライアント/サーバー ホスト用の手順も基本的にこれと同じである。

  1. DirectPlay8Peer.SetPeerInfo を呼び出して、プレーヤー用の静的な設定を指定する。
  2. DPN_APPLICATION_DESC 型に値を割り当てることにより、ゲームの構成を指定する。
  3. DirectPlay8Peer.Host を呼び出して、自分がホストの候補であることを通知する。AppDesc パラメータを、この前のステップで定義した DPN_APPLICATION_DESC 型に設定する。
  4. 列挙要求を待つ。列挙要求は、メッセージ ハンドラの DirectPlay8Peer.EnumHostsQuery メソッドへの呼び出しの形をとる。列挙要求に応答するには、DPN_APPLICATION_DESC 型の内容を設定し、fRejectMsg を FALSE に設定する。
  5. ピアがセッションへの参加を決めると、DirectPlay からメッセージ ハンドラの DirectPlay8Event.IndicateConnect メソッドが呼び出される。

ゲームを準備および起動する方法の詳細については、「ピアツーピア セッション」および「クライアント/サーバー セッション」を参照すること。