Platform SDK: DirectX |
アプリケーションは、IDirectPlay4::Receive を呼び出して、キューの中の次のメッセージを取り出す。
2 人以上のローカル プレーヤーがいる場合 (つまり、アプリケーションの当該のインスタンスによって、2 人以上のプレーヤーが作成されている場合) は、メッセージの送信側のプレーヤーの ID を Receive メソッドの lpidTo パラメータに渡し、DPRECEIVE_TOPLAYER フラグを設定する必要がある。
メッセージ データを取り出すには、最初に適切な量のメモリを割り当てる必要がある。必要なバッファのサイズを判断するには、最初に lpData パラメータに NULL を設定してメソッドを呼び出すか、または任意のサイズの既存のバッファへのポインタを渡して、*lpdwDataSize に現在の長さを設定する。待機中のメッセージがあるのに、lpData が NULL であるか、またはバッファのサイズが小さすぎる場合、メソッドは DPERR_BUFFERTOOSMALL で失敗し、必要なメモリ量が *lpdwDataSize に返される。その場合は、割り当てを再度実行してメソッドを再試行する。
メソッドが成功し、バッファにメッセージ データが入れられると、そのメッセージがシステム メッセージの場合は、*lpidFrom が DPID_SYSMSG に等しくなる。その場合は、「システム メッセージの使用」のステップに従う。そうでない場合は、「プレーヤー メッセージの使用」のステップに従う。
この処理の例については、Duel サンプルの ReceiveMessages 関数を参照すること。
DirectPlay4.Receive メソッドは、キューの中の次のメッセージを取り出し、メッセージ データを含む DirectPlayMessage オブジェクトを返す。さらに、このメソッドは送信側のプレーヤーの ID (システム メッセージの場合は DPID_SYSMSG) と受信側のプレーヤーの ID を返す。これらは、メソッドに渡された変数に返される。
2 人以上のローカル プレーヤーがいる場合 (つまり、アプリケーションの当該のインスタンスによって、2 人以上のプレーヤーが作成されている場合) は、メッセージの送信側のプレーヤーの ID を Receive メソッドの toPlayerId パラメータに渡し、DPRECEIVE_TOPLAYER フラグを設定する必要がある。
以下のサンプル関数は、待機中のメッセージをすべて取り出す。
' gObjDPlay は DirectPlay4 オブジェクト。 ' gMyPlayerID はプレーヤーの ID。 Sub ReceiveMessages Dim MsgCount as Long Dim MsgType as Long Dim FromPlayerID As Long Dim ToPlayerID As Long Dim dpMsg as DirectPlayMessage MsgCount = gObjDPlay.GetMessageCount(gMyPlayerID) For X% = 1 to MsgCount Set dpMsg = gObjDPlay.Receive(FromPlayerID, _ ToPlayerID, DPRECEIVE_ALL) If FromPlayerID = DPID_SYSMSG Then MsgType = dpMsg.ReadLong() ' ここでシステム メッセージを処理する。 Else ' ここでプレーヤー メッセージを処理する。 End If Next X End Sub
受信したメッセージの処理方法の詳細については、次のトピックを参照すること。