次の方法で共有


ホストの列挙

ホストの列挙

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

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

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

  1. プレイしたいゲームのグローバル一意識別子 (GUID) を DPN_APPLICATION_DESC 構造体の guidApplication メンバに割り当て、その構造体へのポインタを pApplicationDesc パラメータに割り当てる。

  2. デバイスのアドレス オブジェクトを作成し、そのポインタを pdpaddrDeviceinfo に割り当てる。このオブジェクトには、ネットワーク接続の確立に必要な情報が格納されている。

  3. 利用可能なホストを特定のコンピュータに問い合わせるには、そのコンピュータのホスト アドレス オブジェクトを作成し、そのポインタを pdpaddrHost に割り当てる。このパラメータを NULL に設定すると、Microsoft® DirectPlay® は、pdpaddrDeviceinfo に含まれている情報に基づいてアドレス オブジェクトを作成する。アドレス オブジェクトの詳細については、「DirectPlay アドレシング」を参照すること。インターネット プロトコル (IP) または Internetwork Packet Exchange (IPX) サービス プロバイダを使っている場合、通常、この問い合わせは、ローカル サブネットにブロードキャストされる。DPNENUMHOSTS_OKTOQUERYFORADDRESSING フラグを設定すると、サービス プロバイダがユーザーにアドレス情報を要求するダイアログ ボックスを表示することがある。

  4. IDirectPlay8Peer::EnumHosts を呼び出す。

  5. この結果、コールバック メッセージ ハンドラは、応答するホストそれぞれにつき 1 つの DPN_MSGID_ENUM_HOSTS_RESPONSE メッセージを受信する。

    メッセージ ハンドラに返された情報を調べ、セッションを選択し、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 メッセージを受信する。

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