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 関数は次の処理を実行する。
- CoInitialize を使ってコンポーネント オブジェクト モデル (COM) を初期化する。
- CoCreateInstance を使って IDirectPlay8Peer オブジェクトを作成する。
- IDirectPlay8Peer::Initialize を呼び出して、メッセージ ハンドラについてインターフェイスに伝える。
- CoCreateInstance を使って IDirectPlay8LobbyClient オブジェクトを作成する。
- IDirectPlay8LobbyClient::Initialize を呼び出して、ロビー メッセージ ハンドラについてインターフェイスに伝える。
OnInitDialog 関数は次の処理を実行する。
- 登録済みのロビー アプリケーションを列挙し、リスト ボックスに表示する。「EnumRegisteredApplications」を参照すること。
- DirectPlay サービス プロバイダを列挙し、リスト ボックスに表示する。「EnumServiceProviders」を参照すること。
- 新しいサービス プロバイダが選択され、初期化されるたびに、サービス プロバイダのアダプタを列挙する。「EnumAdapters」を参照すること。
[Launch App] をクリックすると、LaunchApp 関数は次の処理を実行する。
- DPL_CONNECT_INFO 構造体に情報を格納する。ホスト アドレスとデバイス アドレスをはじめ、DPN_APPLICATION_DESC が含まれるため、この処理は複雑である。「LaunchApp」および「AllocAndInitConnectSettings」を参照すること。
- IDirectPlay8LobbyClient::ConnectApplication を呼び出し、DPL_CONNECT_INFO 構造体を渡す。
- 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 パラメータは、接続の解除元となるロビー アプリケーションのハンドルに設定される。