Platform SDK: DirectX

DirectPlay4.Send

DirectPlay4.Send メソッドは、別のプレーヤー、プレーヤーのグループ、またはセッション内のすべてのプレーヤーにメッセージを送信する。

メッセージは、メッセージごとに保証付きまたは保証なしのプロトコルを使用して送信することができる。セッションが保証サーバーによってホストされている場合は、メッセージごとに暗号化 (プライバシを保証するため) またはデジタル署名 (身元を保証するため) を施して、メッセージを送信することができる。

object.Send(fromPlayerId As Long, _
    toPlayerId As Long, _
    flags As CONST_DPSENDFLAGS, _
    msg As DirectPlayMessage) 

パラメータ

object
DirectPlay4 オブジェクトを表すオブジェクト式。
fromPlayerId
送信側プレーヤーの ID。このプレーヤー ID は、コンピュータ上のローカル プレーヤーのいずれかに一致していなければならない。
toPlayerId
メッセージの送信先 ID。メッセージをほかのプレーヤーに送信するには、送信先のプレーヤーの ID を指定する。メッセージをグループ内のすべてのプレーヤーに送信するには、そのグループの ID を指定する。メッセージをセッション内のすべてのプレーヤーに送信するには、定数 DPID_ALLPLAYERS を使用する。メッセージをサーバー プレーヤーに送信するには、定数 DPID_SERVERPLAYER を使用する。プレーヤーは、自らにメッセージを送信することはできない。
flags
メッセージの送信方法を指定する値。デフォルト (flags = 0) では、メッセージは保証なしで送信される。
DPSEND_ENCRYPTED
メッセージを暗号化して送信する。これができるのは、保証セッションの場合だけである。このフラグは、DPSEND_GUARANTEED フラグも設定されている場合に限り、使用できる。メッセージは、DPSYS_SECUREMESSAGE システム メッセージとして送信される。
DPSEND_GUARANTEED
保証された配信方法を使用して、メッセージを送信する。
DPSEND_SIGNED
デジタル署名を加えて、メッセージを送信する。これができるのは、保証セッションの場合だけである。このフラグは、DPSEND_SIGNED フラグも設定されている場合に限り、使用できる。メッセージは、DPSYS_SECUREMESSAGE システム メッセージとして送信される。
msg
送信されるデータを表す DirectPlayMessage オブジェクト。このオブジェクトは、DirectPlay4.CreateMessage メソッドを使用して取得される。また、このオブジェクト自体のメソッドを使用して、オブジェクトにデータを代入することができる。

エラー コード

失敗すればエラーが発生し、Err.Number に次のいずれかの値が設定される。

DPERR_BUSY
DPERR_CONNECTIONLOST
DPERR_INVALIDPARAMS
DPERR_INVALIDPLAYER
DPERR_NOTLOGGEDIN
DPERR_SENDTOOBIG

保証付きと指定されていないメッセージに暗号化または署名のフラグが設定されている場合は、DPERR_INVALIDPARAMS を返す。クライアント アプリケーションが、最初にログオンせずに保証メッセージを送信しようとした場合は、DPERR_NOTLOGGEDIN を返す。

メッセージをグループに送信する場合、戻り値 DP_OK は、必ずしもグループ内のすべてのプレーヤーがメッセージを受信したことを示すわけではない。メッセージを保証付きで送信した場合、DP_OK は、DirectPlay がそのメッセージをグループ内のすべてのプレーヤーに送信するために全力を尽くしたことを意味する。通常、このメッセージを受信しないプレーヤーは、セッションから削除される。これは、それらのプレーヤーの接続に問題があるからである。

注意

非同期送信のオプションを使用する場合は、DirectPlay4.SendEx を使用する。

システム メッセージ以外のメッセージは、保証付きまたは保証なしのどちらかで送信できる。デフォルトでは、非システム メッセージは、保証なしで送信される。これは、DirectPlay が、メッセージが送信先に届いたことを保証しないということである。保証メッセージの送信には、かなりの時間がかかる。最低でも、保証なしのメッセージの 2 倍から 3 倍の時間がかかる。アプリケーションでは、保証メッセージの送信をできるだけ少なくすると共に、メッセージの喪失に耐えられるようにする必要がある。

システム メッセージは、サービス プロバイダが保証メッセージをネイティブにサポートしているかどうか、または DirectPlay プロトコルのフラグが設定されているかどうかに関係なく、常に保証付きで送信される。システム メッセージを保証付きで送信する場合は、DirectPlay プロトコルが自動的に使用される。

システム メッセージ以外のメッセージの場合、アプリケーションが DirectPlay プロトコルのフラグを設定し、メッセージを保証付きで送信すると (DPSEND_GUARANTEED フラグを設定する)、サービス プロバイダが保証メッセージをサポートするかどうかに関係なく、メッセージは保証付きで送信される。

システム メッセージ以外のメッセージの場合、アプリケーションが DirectPlay プロトコルのフラグを設定せず、メッセージを保証付きで送信すると、サービス プロバイダが保証メッセージをサポートする場合に限り、メッセージは保証付きで送信される。サービス プロバイダが保証メッセージをサポートしない場合、DPSEND_GUARANTEED フラグに関係なく、メッセージは保証付きでは送信されない。

アプリケーションは、セッションを作成するときに DPSESSION_DIRECTPLAYPROTOCOL フラグを設定して、DirectPlay プロトコルを開始する。

DirectPlay に付属しているすべてのサービス プロバイダは、破壊を防ぐために、データに対して整合性チェックを実行する。このメソッドを使用して送信されたメッセージは、すべて破壊から保護される。

プレーヤーは、自らにメッセージを送信することはできない。プレーヤーが、DPID_ALLPLAYERS の一部であるグループまたは DPID_ALLPLAYERS にメッセージを送信すると、プレーヤーはそのメッセージのコピーを受け取らない。ただし、セッション記述で DPSESSION_NOMESSAGEID が指定されている場合は例外である。この場合、プレーヤーは、自らがグループに送信したメッセージを受信することができる。このメッセージには、メッセージの送信者を示す DirectPlay の ID ヘッダーが存在しないため、メッセージ ID に基づいてメッセージをフィルタリングすることはできない。

ターゲット コンピュータ上に 2 人以上のプレーヤーがいる場合、メッセージが誰の受信キューに現れるかを判断することはできない。メッセージを受信すると、そのメッセージは、DPID_UNKNOWN というプレーヤーから送信されたように見える。

Send メソッドを使用して送信できるメッセージのサイズに制限はない。DirectPlay は、サイズの大きなメッセージを自動的にパケットに分割 (パケット化) し、受信側でそれらを再度組み立てる。大きなメッセージを保証なしで送信する場合には注意が必要である。パケットが 1 つでも送信先に届かないと、メッセージ全体が無視される。アプリケーションでは、GetCaps を呼び出して、DPCAPS 型の lMaxBufferSize メンバを調べることにより、パケットの最大サイズを判断することができる。

暗号化されたメッセージまたは署名付きのメッセージを送信すると、そのメッセージは、アプリケーション メッセージではなく、DPSYS_SECUREMESSAGE システム メッセージとして転送される。

参照

DirectPlay4.ReceiveDirectPlay4.SendChatMessageCONST_DPIDFLAGS