Platform SDK: DirectX

メッセージの受信

[C++]

アプリケーションは、IDirectPlay4::Receive を呼び出して、キューの中の次のメッセージを取り出す。

2 人以上のローカル プレーヤーがいる場合 (つまり、アプリケーションの当該のインスタンスによって、2 人以上のプレーヤーが作成されている場合) は、メッセージの送信側のプレーヤーの ID を Receive メソッドの lpidTo パラメータに渡し、DPRECEIVE_TOPLAYER フラグを設定する必要がある。

メッセージ データを取り出すには、最初に適切な量のメモリを割り当てる必要がある。必要なバッファのサイズを判断するには、最初に lpData パラメータに NULL を設定してメソッドを呼び出すか、または任意のサイズの既存のバッファへのポインタを渡して、*lpdwDataSize に現在の長さを設定する。待機中のメッセージがあるのに、lpData が NULL であるか、またはバッファのサイズが小さすぎる場合、メソッドは DPERR_BUFFERTOOSMALL で失敗し、必要なメモリ量が *lpdwDataSize に返される。その場合は、割り当てを再度実行してメソッドを再試行する。

メソッドが成功し、バッファにメッセージ データが入れられると、そのメッセージがシステム メッセージの場合は、*lpidFrom が DPID_SYSMSG に等しくなる。その場合は、「システム メッセージの使用」のステップに従う。そうでない場合は、「プレーヤー メッセージの使用」のステップに従う。

この処理の例については、Duel サンプルの ReceiveMessages 関数を参照すること。

[Visual Basic]

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

受信したメッセージの処理方法の詳細については、次のトピックを参照すること。