Platform SDK: DirectX

動的ロビー接続のサポート

外部ロビー起動の欠点は、アプリケーションのインスタンスが既に実行中の場合でも、ロビー サーバーがロビー クライアントに対して常に新しいインスタンスを起動するように指示することである。動的ロビー接続をサポートすれば、冗長的な起動を避けることができる。

ここでの説明は、アプリケーションが既に実行中であり、接続設定を返すロビー サーバーへの接続が確立されていることを前提とする。

[C++]
  1. スタートアップ時に、CoCreateInstance 関数を使用して IDirectPlayLobby3 インターフェイスを作成する。
  2. ユーザーに、手動接続を確立させるのではなく、"ロビー接続をお待ちください" またはそのエフェクトを示す語を選択させる。その選択が実行された場合に限り、以下のステップを実行する (実装例については、「Duel サンプル」を参照)。
  3. IDirectPlayLobby3::WaitForConnectionSettings を呼び出して、アプリケーションを待機モードにする。このとき、実行は中断されない。アプリケーションがアクティブであり、接続を待機しているということが DirectPlay に伝えられるだけである。したがって、ロビー クライアントが DirectPlayLobby3.RunApplication を呼び出しても、別のインスタンスは起動されない。
  4. IDirectPlayLobby3::ReceiveLobbyMessage を使用して、送信されるロビー メッセージを待機する。待機するメッセージ タイプは DPLSYS_NEWCONNECTIONSETTINGS システム メッセージである。ユーザーがキャンセルした場合は、WaitForConnectionSettings をもう一度呼び出して待機モードをキャンセルすることができる。
  5. システム メッセージを受信したら、ロビーによって渡された接続情報を調べ、必要に応じて設定を変更する。IDirectPlayLobby3::GetConnectionSettings メソッドは、接続設定を含む DPLCONNECTION 構造体を返す。新しく設定を行うには、IDirectPlayLobby3::SetConnectionSettings を使用する。
  6. IDirectPlayLobby3::ConnectEx を呼び出してアプリケーション セッションを作成するか、またはそれに接続する (アプリケーションは DPLCONNECTION.dwFlags を調べて、セッションを作成するか、またはセッションに参加するかを判断する)。
  7. ステップ 5 で取得した DPLCONNECTION 構造体によって提供される名前情報を使用して、プレーヤーを作成する。
[Visual Basic]
  1. スタートアップ時に、DirectX7.DirectPlayLobbyCreate メソッドを使用して DirectPlayLobby3 オブジェクトを作成する。
  2. ユーザーに、手動接続を確立させるのではなく、"ロビー接続をお待ちください" またはそのエフェクトを示す語を選択させる。その選択が実行された場合に限り、以下のステップを実行する
  3. DirectPlayLobby3.WaitForConnectionSettings を呼び出して、アプリケーションを待機モードにする。このとき、実行は中断されない。アプリケーションがアクティブであり、接続を待機しているということが DirectPlay に伝えられるだけである。したがって、ロビー クライアントが DirectPlayLobby3.RunApplication を呼び出しても、別のインスタンスは起動されない。
  4. DirectPlayLobby3.ReceiveLobbyMessage を使用して、送信されるロビー メッセージを待機する。待機するメッセージ タイプは、DPLSYS_NEWCONNECTIONSETTINGS システム メッセージである。ユーザーがキャンセルした場合は、WaitForConnectionSettings をもう一度呼び出して待機モードをキャンセルすることができる。
  5. システム メッセージを受信したら、ロビーによって渡された接続情報を調べ、必要に応じて設定を変更する。DirectPlayLobby3.GetConnectionSettings メソッドは、接続設定を含む DirectPlayLobbyConnection オブジェクトを返す。新しく設定を行うには、DirectPlayLobby3.SetConnectionSettings. を使用する。
  6. DirectPlayLobby3.Connect を呼び出してアプリケーション セッションを作成するか、またはそれに接続する (アプリケーションは、DirectPlayLobbyConnection.GetFlags によって返される値を調べて、セッションを作成するか、またはセッションに参加するかを判断する)。
  7. ステップ 5 で取得した DirectPlayLobbyConnection オブジェクトによって提供される名前情報を使用して、プレーヤーを作成する。