ロビー可能アプリケーション
ロビー可能アプリケーション
ロビー可能アプリケーションは、Microsoft® DirectPlay® ベースのロビー クライアントと連動するようになっている。ロビー クライアントは DirectPlay を使って任意のアプリケーションを起動できるが、ロビー可能アプリケーションには多くの利点がある。
- ゲームの状態が変化すると、ロビー クライアントに対して最新状態が自動的に送られる。
- ロビー クライアントは、標準アプリケーション プログラミング インターフェイス (API) を使ってアプリケーションと通信できる。
- アプリケーションは、標準 API を使ってロビー クライアントと通信できる。
要するに、DirectPlay を使えば、ゲーム固有またはロビー クライアント固有の通信コードはほとんど必要ない。特定のゲームやロビー クライアントのための修正をほとんど (またはまったく) 行わずに、何にでも標準 API を使用できる。
実装の詳細については、「ロビー可能アプリケーションの実装」またはソフトウェア開発キット (SDK) のサンプル (SimplePeer、StagedPeer など) を参照すること。
- ロビー可能アプリケーションの起動
ロビー可能アプリケーションの起動
起動後にロビー可能アプリケーションが実行すべき作業の 1 つは、ロビー対象アプリケーション オブジェクトを作成することである。このオブジェクトの最も重要な機能は、アプリケーションがロビー起動で起動しているかどうかを判断することにある。また、ロビー対象アプリケーションは、ロビー クライアントからメッセージを受信するために、メッセージ ハンドラ コールバック関数を実装する必要もある。基本的な手順は以下のとおりである。
- ロビー対象アプリケーション オブジェクトを作成する。
- オブジェクトを初期化する。
- 初期化メソッドから有効な接続ハンドルが返される場合、アプリケーションはロビー起動で起動している。
- 初期化メソッドから返されたユーザー コンテキスト値を調べる。この値には、ロビー クライアントからのゲーム固有の情報が含まれていることがある。
- ロビー対象アプリケーションのメッセージ ハンドラを通じて受信した接続メッセージを調べる。このメッセージには、ロビー クライアントにメッセージを送信するときに使う識別子 (ID) を含む、さまざまな情報が含まれている。
アプリケーションのロビー起動が成功すると、ホストの移行などのイベントが発生したときに、DirectPlay はロビー クライアントに対して最新の状態を自動的に送信できるようになる。状態の自動更新を有効にするには、IDirectPlay8Peer、IDirectPlay8Client、または IDirectPlay8Server インターフェイスの RegisterLobby メソッドを呼び出す。また、ロビー対象アプリケーションのインターフェイスを使って、ロビー クライアントにメッセージを送信することもできる。
メッセージ ハンドラ関数には、初期化メソッドから復帰する前に、ロビー クライアントからのメッセージが届くことがあるので、注意が必要である。接続メッセージに加えて、ロビー クライアントが接続の設定を変更したか、または接続を切断したときにも、このコールバック関数にメッセージが届く。また、ゲーム固有の情報が含まれたメッセージを、ロビー クライアントからメッセージ ハンドラに直接送信することもできる。
注 複数のスレッドからメッセージを受信することがある。メッセージングを適切に処理するため、ロビー対象アプリケーションのコールバック関数は、再入可能でなければならない。