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 関数を呼び出して、次の処理を実行する。
- アプリケーション定義の構造体を作成する。
- アプリケーション ワーカー スレッドに渡す GAMEMSG_DATA_NODE を作成する。このスレッドがノードを処理し、UI を更新してパケットが送信されたことを示す。
- DPN_BUFFER_DESC 構造体に情報が格納され、上で作成したアプリケーション定義の構造体へのポインタに渡される。
- IDirectPlay8Peer::SendTo メソッドが呼び出され、DPN_BUFFER_DESC 構造体に渡される。
- イベント g_hDPDataAvailEvent が設定され、処理できるデータがあることをワーカー スレッドに伝える。
ProcessNetDataProc 関数は、g_hDPDataAvailEvent イベントを受け取ると、ProcessData 関数を呼び出す。この関数は、次の処理を実行する。
- クリティカル セクション g_csDataList を入力する。
- リンクされたリストをすべて確認し、各ノードを処理する。
- IDirectPlay8Peer::ReturnBuffer を呼び出し、DirectPlay が DPN_MSGID_RECEIVE で渡したバッファ スペースを解放できるようにする。
DirectPlayMessageHandler 関数は、DPN_MSGID_RECEIVE、DPN_MSGID_SEND_COMPLETE などの異なる種類のメッセージを処理する。