次の方法で共有


DataRelay

DataRelay

DataRelay サンプルは、SimplePeer と似ている。ただし、ダイアログ ボックスのユーザー インターフェイス (UI) で指定したオプションと共にデータ パケットを送信する点が異なる。

パス

ソース ファイル : (SDK ルート)\Samples\C++\DirectPlay\DataRelay

実行可能ファイル :(SDK ルート)\Samples\C++\DirectPlay\Bin

ユーザーズ ガイド

SimplePeer で説明した手順に従って、セッションのホストとなるか、セッションに接続する。メイン ダイアログ ボックスが表示されたら、ターゲット、サイズ、レート、タイムアウトの各値を選択する。次に、[Push to Send] をクリックする。これにより、指定されたサイズとレートで、データ パケットがターゲットに送信される。[Connection Info] ボックスを使って、接続情報を周期的に収集するターゲットを指定する。

  Internetwork Packet Exchange (IPX) サービス プロバイダを選んだ場合、Microsoft® DirectPlayreg; にアドレスの検索を実行させるには、[use DPNSVR] チェック ボックスをオンにする。

プログラミング上の注意

DataRelay サンプルは、SimplePeer と非常に似た形式である。詳細なプログラミング上の注意については、SimplePeer サンプルの「プログラミング上の注意」を参照すること。

[Push to Send] をクリックすると、UI で指定したミリ秒ごとに消えるタイマが作成される。

タイマが消えると、コールバック関数は SendNetworkData 関数を呼び出して、次の処理を実行する。

  1. アプリケーション定義の構造体を作成する。
  2. アプリケーション ワーカー スレッドに渡す GAMEMSG_DATA_NODE を作成する。このスレッドがノードを処理し、UI を更新してパケットが送信されたことを示す。
  3. DPN_BUFFER_DESC 構造体に情報が格納され、上で作成したアプリケーション定義の構造体へのポインタに渡される。
  4. IDirectPlay8Peer::SendTo メソッドが呼び出され、DPN_BUFFER_DESC 構造体に渡される。
  5. イベント g_hDPDataAvailEvent が設定され、処理できるデータがあることをワーカー スレッドに伝える。

ProcessNetDataProc 関数は、g_hDPDataAvailEvent イベントを受け取ると、ProcessData 関数を呼び出す。この関数は、次の処理を実行する。

  1. クリティカル セクション g_csDataList を入力する。
  2. リンクされたリストをすべて確認し、各ノードを処理する。
  3. IDirectPlay8Peer::ReturnBuffer を呼び出し、DirectPlay が DPN_MSGID_RECEIVE で渡したバッファ スペースを解放できるようにする。

DirectPlayMessageHandler 関数は、DPN_MSGID_RECEIVEDPN_MSGID_SEND_COMPLETE などの異なる種類のメッセージを処理する。