Microsoft DirectX 8.0 (C++)

クライアント/サーバー セッションへの接続

すべてのクライアントは、ホストに接続して明示的にセッションに加わる必要がある。このことは、ロビーを通じて準備されたセッションでも同じである。接続により、クライアントがセッションのメンバになり、クライアントとの通信に必要な情報がホストに提供される。ホストでは、接続要求を受け付けることも拒否することもできる。

サーバー アプリケーション

クライアントがセッションへの参加を試みると、ホストに DPN_MSGID_INDICATE_CONNECT メッセージが届く。プレーヤーの参加を許可する場合は、S_OK を返す。要求を拒否する場合は、それ以外の値を返す。どちらの場合も、クライアントには応答が入った DPN_MSGID_CONNECT_COMPLETE メッセージが届く。ここでプレーヤー コンテキスト値を定義してもよいし、DPN_MSGID_CREATE_PLAYER メッセージが届くまで待ってもよい。プレーヤー コンテキスト値の詳細については、「プレーヤー コンテキスト値の使い方」を参照すること。

プレーヤーがセッションへの接続に成功すると、全クライアントとサーバーに、新しいプレーヤーの ID (DPNID) が付いた DPN_MSGID_CREATE_PLAYER メッセージが届く。プレーヤー コンテキスト値を定義する必要があり、それがまだ済んでいない場合には、メッセージ ハンドラがこのメッセージの処理から復帰するまでに、定義しなければならない。復帰すると、プレーヤー コンテキスト値を変更できなくなる。

クライアント アプリケーション

セッションに接続するには、セッション ホストのアドレスが必要になる。アプリケーションがロビー クライアントから接続されている場合は、IDirectPlay8LobbiedApplication::GetConnectionSettings を呼び出せば、ホストのアドレスを取得できる。

セッション ホストのアドレスがわからない場合、IP または IPX サービス プロバイダを使用しているなら、IDirectPlay8Client::EnumHosts を呼び出して利用可能なホストを列挙すれば、ある要素を全要素にコピーするセッションを調べることができる。ホストのアドレスは、利用可能なホストを列挙して取得することもできる。列挙から返される情報には、各ホストのアドレス、ホストとの通信に使用するデバイス、および関連付けられたセッションを記述する DPN_APPLICATION_DESC 構造体が含まれる。

セッションへの参加を要求するには、IDirectPlay8Client::SetClientInfo を呼び出してプレーヤー名を設定してから、選択されたホストのアドレスを指定して IDirectPlay8Client::Connect を呼び出すことによりセッションに接続する。

メッセージ ハンドラに、ホストの応答が付いた DPN_MSGID_CONNECT_COMPLETE メッセージが届く。ホストが接続を受け付けた場合は、関連する構造体の hResultCode メンバが S_OK に設定される。拒否した場合は、hResultCode が DPNERR_HOSTREJECTEDCONNECTION に設定される。