Platform SDK: DirectX |
IDirectPlay4::Receive メソッドによって DPID_SYSMSG というプレーヤー ID から返されるメッセージは、システム メッセージである。すべてのシステム メッセージは、dwType の値によって指定される識別子から始まる。IDirectPlay4::Receive メソッドによって返されるバッファを汎用メッセージ (DPMSG_GENERIC) にキャストし、dwType 要素を調べることができる。この要素は、DPSYS_ という接頭辞の付くメッセージ タイプ識別子のいずれかに等しい値を持つ。アプリケーションでシステム メッセージの種類を判断したら、バッファを適切な構造体 (接頭辞 DPMSG_ で始まる) にキャストして、データを読み取る。
アプリケーションでは、以下のシステム メッセージを処理できるようにしておく必要がある。
dwType の値 | メッセージ構造体 | 原因 |
---|---|---|
DPSYS _ADDGROUPTOGROUP |
DPMSG_ADDGROUPTOGROUP | 既存のグループに既存のグループが追加された。 |
DPSYS _ADDPLAYERTOGROUP |
DPMSG_ADDPLAYERTOGROUP | 既存のグループに既存のプレーヤーが追加された。 |
DPSYS_CHAT | DPMSG_CHAT | チャット メッセージが届いた。 |
DPSYS _CREATEPLAYERORGROUP |
DPMSG_CREATEPLAYERORGROUP | 新しいプレーヤーまたはグループが作成された。 |
DPSYS _DELETEGROUPFROMGROUP |
DPMSG_DELETEGROUPFROMGROUP | グループがグループから削除された。 |
DPSYS _DELETEPLAYERFROMGROUP |
DPMSG_DELETEPLAYERFROMGROUP | プレーヤーがグループから削除された。 |
DPSYS _DESTROYPLAYERORGROUP |
DPMSG_DESTROYPLAYERORGROUP | 既存のプレーヤーまたはグループが破棄された。 |
DPSYS_HOST | DPMSG_HOST | 現在のホストがセッションを離れ、このアプリケーションが新しいホストになった。 |
DPSYS _SECUREMESSAGE |
DPMSG_SECUREMESSAGE | デジタル署名または暗号化が施されたメッセージが届いた。 |
DPSYS _SENDCOMPLETE |
DPMSG_SENDCOMPLETE | 非同期送信が完了した。 |
DPSYS _SESSIONLOST |
DPMSG_SESSIONLOST | セッションの接続が失われた。 |
DPSYS _SETGROUPOWNER |
DPMSG_SETGROUPOWNER | グループの所有者が変更された。 |
DPSYS _SETPLAYERORGROUPDATA |
DPMSG_SETPLAYERORGROUPDATA | プレーヤーまたはグループのデータが変更された。 |
DPSYS _SETPLAYERORGROUPNAME |
DPMSG_SETPLAYERORGROUPNAME | プレーヤーまたはグループの名前が変更された。 |
DPSYS _SETSESSIONDESC |
DPMSG_SETSESSIONDESC | セッション記述が変更された。 |
DPSYS _STARTSESSION |
DPMSG_STARTSESSION | ロビー サーバーが、セッションを開始するように要求している。 |
DirectPlay4.Receive メソッドによって返され、プレーヤー ID DPID_SYSMSG からのものであるとマークされているメッセージは、システム メッセージである。すべてのシステム メッセージは、Long という型識別子から始まる。
システム メッセージを解析するには、最初に DirectPlayMessage.ReadLong メソッドを使用して、その型識別子を取得する必要がある。次に、DirectPlayMessage のさまざまな読み取りメソッドを使用して、メッセージ データの要素を取り出す。要素は、メッセージ タイプに記載されているのと同じ順序で取り出す必要がある (「CONST_DPSYSMSGTYPES」を参照)。
プレーヤー メッセージとシステム メッセージに使用される標準の読み取りメソッドに加えて、DirectPlay はシステム メッセージを解析するための以下のメソッドを提供する。
ReadSysChatString、ReadSysMsgConnection、および ReadSysMsgSessionDesc は、読み取りポインタの位置に関係なく呼び出すことができる。また、これらのメソッドを呼び出しても、読み取りポインタは進まない。一方、ReadSysMsgData を呼び出せるのは、メッセージ内の前のデータがすべて取り出されている場合だけである。また、このメソッドを呼び出すと、読み出しポインタが進む。これは、最初の 3 つのメソッドは使用するデータの基盤となるメッセージ構造体内での場所を常に把握しているが、ReadSysMsgData を使用すると、異なるメッセージ タイプの異なる場所からデータを取り出すことができるからである。