次の方法で共有


LobbyClient

LobbyClient

LobbyClient は、簡単なロビー クライアント アプリケーションである。ローカル システム上の登録済み Microsoft® DirectPlay® アプリケーションが、すべて表示される。ユーザーは、選択したサービス プロバイダを使って、それらのアプリケーションを 1 つ以上起動できる。起動するロビー アプリケーションには、ゲームに参加するか、またはゲームのホストとなることを指示できる。

パス

ソース ファイル : (SDK ルート)\Samples\C++\DirectPlay\LobbyClient

実行可能ファイル :(SDK ルート)\Samples\C++\DirectPlay\Bin

ユーザーズ ガイド

LobbyClient サンプルでは、[Launch App] をクリックしてアプリケーションを起動する前に、起動パラメータを選択できるダイアログ ボックスが表示される。[Active Connections] の一覧には、現在のすべてのロビー アプリケーションへのハンドルが表示される。[Send Message] をクリックすると、ロビー アプリケーションにロビー メッセージが送信される。これは、主にデモの目的で行われる。さらに複雑なロビー クライアントでは、この機能を有効に使って、ロビー アプリケーションが応答するメッセージを渡すことも可能である。

  Internetwork Packet Exchange (IPX) サービス プロバイダを選んだ場合、DirectPlay にアドレスの検索を実行させるには、[use DPNSVR] チェック ボックスをオンにする。

プログラミング上の注意

InitDirectPlay 関数は次の処理を実行する。

  1. CoInitialize を使ってコンポーネント オブジェクト モデル (COM) を初期化する。
  2. CoCreateInstance を使って IDirectPlay8Peer オブジェクトを作成する。
  3. IDirectPlay8Peer::Initialize を呼び出して、メッセージ ハンドラについてインターフェイスに伝える。
  4. CoCreateInstance を使って IDirectPlay8LobbyClient オブジェクトを作成する。
  5. IDirectPlay8LobbyClient::Initialize を呼び出して、ロビー メッセージ ハンドラについてインターフェイスに伝える。

OnInitDialog 関数は次の処理を実行する。

  1. 登録済みのロビー アプリケーションを列挙し、リスト ボックスに表示する。「EnumRegisteredApplications」を参照すること。
  2. DirectPlay サービス プロバイダを列挙し、リスト ボックスに表示する。「EnumServiceProviders」を参照すること。
  3. 新しいサービス プロバイダが選択され、初期化されるたびに、サービス プロバイダのアダプタを列挙する。「EnumAdapters」を参照すること。

[Launch App] をクリックすると、LaunchApp 関数は次の処理を実行する。

  1. DPL_CONNECT_INFO 構造体に情報を格納する。ホスト アドレスとデバイス アドレスをはじめ、DPN_APPLICATION_DESC が含まれるため、この処理は複雑である。「LaunchApp」および「AllocAndInitConnectSettings」を参照すること。
  2. IDirectPlay8LobbyClient::ConnectApplication を呼び出し、DPL_CONNECT_INFO 構造体を渡す。
  3. DPL_CONNECT_INFO 構造体を解放する。この構造体には数多くの DirectPlay アドレスがあるため、この処理は複雑である。「FreeConnectSettings」を参照すること。

DirectPlayLobbyMessageHandler 関数は、次のメッセージを処理できる。

DPL_MSGID_DISCONNECT ロビー アプリケーションの接続は解除された。pDisconnectMsg->hDisconnectId パラメータには、接続解除されたロビー アプリケーションのハンドルが含まれ、pDisconnectMsg->hrReason パラメータにはその理由が含まれる。このサンプルは、メッセージ ボックスを表示する。
DPL_MSGID_RECEIVE ロビー アプリケーションはクライアント データを送信した。このサンプルは、いずれのメッセージにも応答しない。
DPL_MSGID_SESSION_STATUS ロビー アプリケーションの状態が変更された。pStatusMsg->hSender パラメータは、事前に定義されたステータス コードの 1 つを取る。このサンプルはユーザー インターフェイス (UI) を更新し、ロビー状態が更新されたことを示す。しかし、より複雑なロビー クライアントでは、アクションを使うとよい。
DPL_MSGID_CONNECTION_SETTINGS ロビー アプリケーションの接続設定が変更された。このロビー クライアントはアクションを使わない。しかし、より複雑なクライアントでは、アクションを使うとよい。

[Send Message] をクリックすると、SendMsgToApp 関数は IDirectPlay8LobbyClient::Send を呼び出す。hConnection パラメータは受信側のロビー アプリケーションのハンドルに設定され、pBuffer パラメータはメッセージ バッファに設定される。

[Disconnect] をクリックすると、DisconnectFromApp 関数は IDirectPlay8LobbyClient::ReleaseApplication を呼び出す。hApplication パラメータは、接続の解除元となるロビー アプリケーションのハンドルに設定される。