Microsoft DirectX 8.0 (C++)

クライアント/サーバー ゲームの通常のプレー

Microsoft® DirectPlay® のメッセージは、基本的には、クライアントとサーバーの間でやり取りされるゲーム関連のデータ ブロックである。DirectPlay は、データ ブロックの内容や形式を限定せずに、データをやり取りするためのメカニズムのみを提供する。ゲームの進行中には、通常、各クライアントとサーバーの間で、メッセージが間断なくやり取りされる。これらのメッセージの主な目的は、各ユーザーのアプリケーションに同じ UI を表示するために、ゲームの状態の同期をとることにある。ただし、メッセージは、これに限らずゲーム固有の多様な目的に使用できる。

ゲーム (特に変化の速いゲーム) では、メッセージングを慎重に管理しなければならない場合が多い。DirectPlay は、流出するメッセージを、ターゲットが処理できるレベルに減速 (スロットリング) する。重要なメッセージを確実に届けるため、メッセージをあまり高速で送信しないように注意しなければならない。DirectPlay での効率的なメッセージング処理については、「ネットワーキングの基本」を参照すること。

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

クライアントにメッセージを送信するには、IDirectPlay8Server::SendTo を呼び出す。クライアントに、データが付いた DPN_MSGID_RECEIVE メッセージが届く。

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

サーバーにメッセージを送信するには、IDirectPlay8Client::Send を呼び出す。サーバーに、データが付いた DPN_MSGID_RECEIVE メッセージが届く。

  DirectPlay にはクライアント間の通信メカニズムはなく、クライアントとサーバーの間の通信メカニズムだけが用意されている。クライアント間の通信は、すべてサーバー アプリケーションで実装する必要がある。

グループの使用

多くのゲームは、プレーヤーをグループ分けできるようになっている。たとえば、チーム対戦型ゲームでは、チームのプレーヤー全員を 1 つのグループのメンバにしてもよい。DirectPlay では、クライアント/サーバー ゲームのサーバーが、プレーヤーのグループを作成できる。DirectPlay のグループは、通常はゲームで定義されるグループに対応するが、グループ作成の目的が限定されているわけではない。DirectPlay のグループは、基本的にはメッセージングを簡略化する手段である。グループを定義すると、IDirectPlay8Server::SendTo を 1 回呼び出すだけで、グループ メンバ全員にメッセージを送信できるようになる。

DirectPlay のグループを作成するには、IDirectPlay8Server::CreateGroup を呼び出す。この結果、メッセージ ハンドラに、詳細が付いた DPN_MSGID_CREATE_GROUP メッセージが届く。このメッセージには、グループにメッセージを送信するために使用するグループ ID が含まれる。グループを作成したら、次に IDirectPlay8Server::AddPlayerToGroup を呼び出してプレーヤーを追加する。

グループを確立すると、そのグループにデータを送信できるようになる。これには、dpnid パラメータにグループ ID を設定して IDirectPlay8Server::SendTo を呼び出す。この結果、グループ メンバ全員に、データが付いた DPN_MSGID_RECEIVE メッセージが届く。

グループからプレーヤーを削除するには、IDirectPlay8Server::RemovePlayerFromGroup を呼び出す。最後に、グループを使い終わったら、IDirectPlay8Server::DestroyGroup を呼び出せば破棄できる。