ObjectDeliverer ログファイル保存機能と再生機能


通信内容を記録する

通信機能を実装していると、必ずといっていいほど後から再現させたい事があります。 特に通信相手の環境がなかなか用意できない時などは必須の機能です。

そこでObjectDelivererにログファイルへの通信内容の保存と、その再生機能を実装しました。

サンプル

保存と再生機能を使ったサンプルです。

ここでの通信内容は800px x 450px 32bitARGBのキャプチャされたビットマップなので、60fps(=16.66ms)毎に1440000byte = (800 x 450 x 4)のデータが送受信されています。

データの流れとしては [WPFアプリ]→(共有メモリ)→[UE4アプリ]→(ログファイル) という流れを繰り返しています。

記録用の動画キャプチャも並列して動かしていたため、さすがにカクついていますがなんとか動きはしています。

ログファイルへの保存機能

ObjectDelivererのStart時にProtocolLogWriterをセットして使用します。

Sendを呼ぶことでログファイルへデータが書き込まれます。

ログファイルには書き込み毎に開始時からの経過時間もmsecオーダーで記録されます。

/images/2019/02/07/001029/20190206235934.png

ログファイルの再生機能

ObjectDelivererのStart時にProtocolLogReaderをセットして使用します。

/images/2019/02/07/001029/20190207000232.png

Startを呼ぶとログファイルに記録された時間を経過する毎にReceiveDataイベントが呼ばれます。 そのため通常の相手がいる通信の時と同じように受信データの処理を行う事ができます。

/images/2019/02/07/001029/20190207000419.png

まとめ

ログファイルへの保存と再生機能を実装することができて、当初ObjectDelivererに実装したいと考えていた機能もだいぶ消化することができました。

あとはMessage Packを使ったシリアライズを行ってのObjectの送受信が実装できればひと段落です。


See also