次の方法で共有


ロビー対象アプリケーション コールバック メッセージ ハンドラの実装

ロビー対象アプリケーション コールバック メッセージ ハンドラの実装

メッセージ ハンドラは、ロビー対象アプリケーション オブジェクトがロビー対象アプリケーションとの通信に使うコールバック関数である。ロビー対象アプリケーション メッセージ ハンドラには、以下の情報を渡す 3 つのパラメータがある。

  • メッセージ タイプを示すメッセージ識別子 (ID)。
  • メッセージ データ ブロックへのポインタ。このパラメータは、各メッセージが使う構造体にキャストする必要がある。
  • アプリケーションで定義されたユーザー コンテキストのデータ ブロック (省略可能) へのポインタ。

ユーザー コンテキスト値は、IDirectPlay8LobbyClient::Initialize を呼び出すときにロビー クライアントが定義する。ユーザー コンテキスト値は、別々のオブジェクトから送信されたメッセージを区別する目的などに使える。ユーザー コンテキスト値の詳細については、「プレーヤ コンテキスト値の使い方」を参照すること。

メッセージ ハンドラは、ロビー対象アプリケーション固有の以下の 4 つのメッセージを処理できなければならない。

これらのメッセージの大半は、接続が変化したとき、またはロビー対象アプリケーションが接続情報を要求したときに、ロビー対象アプリケーション オブジェクトが生成する。その例外に、DPL_MSGID_RECEIVE がある。このメッセージは、ロビー クライアントからゲーム アプリケーションにデータを直接渡すために使われる。メッセージ ハンドラ関数の詳細については、「PFNDPNMESSAGEHANDLER」を参照すること。

  Microsoft® DirectPlay® メッセージ ハンドラは、マルチスレッド環境で適切に動作するように書かれていなければならない。 そうでない場合、アプリケーションが正常に機能しない可能性がある。

DPL_MSGID_CONNECT

このメッセージは、ロビー クライアントがアプリケーションをセッションに接続するために IDirectPlay8LobbyClient::ConnectApplication を呼び出したときに、ロビー アプリケーション オブジェクトが送信する。関連する DPL_MSGID_CONNECT 構造体には、次の情報が含まれる。

  • 接続 ID。アプリケーションが、IDirectPlay8LobbiedApplication::Send でロビー クライアントにデータを送信するか、または IDirectPlay8LobbiedApplication::UpdateStatus でセッションの状態を更新する必要があるときは、この ID を使う。
  • ロビー接続データ。
  • 接続コンテキスト値 (省略可能)。DPL_MSGID_CONNECT メッセージを処理するときに、接続のコンテキスト値を設定できる。この値を接続に設定すると、その接続からメッセージを受信するたびに、pvConnectionContext パラメータで値が返される。アプリケーションに複数の接続があり、ロビー アプリケーション共通のメッセージ ハンドラがある場合、この値が役立つ。

DPL_MSGID_CONNECTION_SETTINGS

DirectPlay は、関連するロビー クライアントから、セッションの接続を修正するために IDirectPlay8LobbyClient::SetConnectionSettings メソッドが呼び出されるたびに、このメッセージを送信する。関連する DPL_MSGID_CONNECTION_SETTINGS 構造体には、更新された接続情報が格納される。

DPL_MSGID_DISCONNECT

このメッセージは、ロビー クライアントが IDirectPlay8LobbyClient::ReleaseApplication を呼び出してアプリケーションをセッションから切断するときに送信される。アプリケーションでは、接続をそのリストから削除し、セッションに関連付けられたデータをすべて解放しなければならない。

DPL_MSGID_RECEIVE

このメッセージを使うと、ロビー クライアントからアプリケーションにデータを渡すことができる。DirectPlay は、DPL_MSGID_RECEIVE 構造体で、ロビー クライアントからアプリケーションにデータ ブロックを渡す。このデータの処理は、アプリケーションが行わなければならない。

詳細については、「ロビー対象アプリケーション メッセージ ハンドラのサンプル」を参照すること。