ホストの列挙
ホストの列挙
セッションを準備する 1 つの方法は、セッション ホストが利用可能になったことを本人に通知させることである。ピアまたはクライアントは、利用可能なホストを列挙し、1 つを選択し、接続要求を送信してそのゲームに参加することにより、参加するゲームを探すことができる。詳細については、「ピアツーピア セッション」または「クライアント/サーバー セッション」を参照すること。
他の列挙と異なり、利用可能なホストの要求に応答するために必要な情報は、ローカル コンピュータに記憶されていない。代わりに、クライアントまたはピアが要求を (たとえばローカル サブネット上で) 全要素にコピーし、利用可能なホストからの応答を待つ必要がある。一方、ホストは、これらの要求を待ってから適切に応答する必要がある。このように、自分がセッション メンバの候補かセッション ホストかによって、手順は微妙に異なる。
次の手順は、ピアツーピア セッションに利用可能なホストの列挙方法を示している。クライアント/サーバー セッション用の手順も、基本的にこれと同じである。IDirectPlay8Peer::EnumHosts は、列挙を開始するメソッドである。設定する主要なパラメータは、pApplicationDesc、pdpaddrDeviceinfo、pdpaddrHost である。
プレイしたいゲームのグローバル一意識別子 (GUID) を DPN_APPLICATION_DESC 構造体の guidApplication メンバに割り当て、その構造体へのポインタを pApplicationDesc パラメータに割り当てる。
デバイスのアドレス オブジェクトを作成し、そのポインタを pdpaddrDeviceinfo に割り当てる。このオブジェクトには、ネットワーク接続の確立に必要な情報が格納されている。
利用可能なホストを特定のコンピュータに問い合わせるには、そのコンピュータのホスト アドレス オブジェクトを作成し、そのポインタを pdpaddrHost に割り当てる。このパラメータを NULL に設定すると、Microsoft® DirectPlay® は、pdpaddrDeviceinfo に含まれている情報に基づいてアドレス オブジェクトを作成する。アドレス オブジェクトの詳細については、「DirectPlay アドレシング」を参照すること。インターネット プロトコル (IP) または Internetwork Packet Exchange (IPX) サービス プロバイダを使っている場合、通常、この問い合わせは、ローカル サブネットにブロードキャストされる。DPNENUMHOSTS_OKTOQUERYFORADDRESSING フラグを設定すると、サービス プロバイダがユーザーにアドレス情報を要求するダイアログ ボックスを表示することがある。
IDirectPlay8Peer::EnumHosts を呼び出す。
この結果、コールバック メッセージ ハンドラは、応答するホストそれぞれにつき 1 つの DPN_MSGID_ENUM_HOSTS_RESPONSE メッセージを受信する。
メッセージ ハンドラに返された情報を調べ、セッションを選択し、IDirectPlay8Peer::Connect を呼び出してそのセッションへの参加を要求する。
ある要素を全要素にコピーするセッションのホストとなるには、自分が利用可能なことを通知し、照会または接続要求を待つ。次の手順はピアツーピア ホストに適用されるが、クライアント/サーバー ホスト用の手順も基本的にこれと同じである。
- IDirectPlay8Peer::SetPeerInfo を呼び出して、プレーヤ用の静的な設定を指定する。
- DPN_APPLICATION_DESC 構造体に値を割り当てることにより、ゲームの構成を指定する。
- IDirectPlay8Peer::Host を呼び出して、コンピュータがホストの候補であることを公表する。pdnAppDesc パラメータを、前の手順で定義した DPN_APPLICATION_DESC 構造体に設定する。
- 列挙要求を待つ。列挙要求は、コールバック メッセージ ハンドラに送信される DPN_MSGID_ENUM_HOSTS_QUERY メッセージの形となる。列挙要求に応答するには、DPN_APPLICATION_DESC の内容を設定し、S_OK を返す。ピアは、その情報が含まれた DPN_MSGID_ENUM_HOSTS_RESPONSE メッセージを受信する。
- ピアがセッションへの参加を決定すると、DPN_MSGID_INDICATE_CONNECT メッセージを受信する。
ゲームの準備と起動の詳細については、「ピアツーピア セッション」および「クライアント/サーバー セッション」を参照すること。