Microsoft DirectX 8.0 (C++)

ホストの列挙

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

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

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

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

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

  1. IDirectPlay8Peer::SetPeerInfo を呼び出して、プレーヤー用の静的な設定を指定する。
  2. DPN_APPLICATION_DESC 構造体に値を割り当てることにより、ゲームの構成を指定する。
  3. IDirectPlay8Peer::Host を呼び出して、自分がホストの候補であることを通知する。pdnAppDesc パラメータを、この前のステップで定義した DPN_APPLICATION_DESC 構造体に設定する。
  4. 列挙要求を待つ。列挙要求は、コールバック メッセージ ハンドラに送信される DPN_MSGID_ENUM_HOSTS_QUERY メッセージの形をとる。列挙要求に応答するには、DPN_APPLICATION_DESC の内容を設定し、S_OK を返す。その情報が付いた DPN_MSGID_ENUM_HOSTS_RESPONSE メッセージが、ピアに届く。
  5. ピアがセッションへの参加を決めると、DPN_MSGID_INDICATE_CONNECT メッセージが届く。

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