通信内容を記録する
通信機能を実装していると、必ずといっていいほど後から再現させたい事があります。 特に通信相手の環境がなかなか用意できない時などは必須の機能です。
そこでObjectDelivererにログファイルへの通信内容の保存と、その再生機能を実装しました。
サンプル
保存と再生機能を使ったサンプルです。
ここでの通信内容は800px x 450px 32bitARGBのキャプチャされたビットマップなので、60fps(=16.66ms)毎に1440000byte = (800 x 450 x 4)のデータが送受信されています。
データの流れとしては [WPFアプリ]→(共有メモリ)→[UE4アプリ]→(ログファイル) という流れを繰り返しています。
記録用の動画キャプチャも並列して動かしていたため、さすがにカクついていますがなんとか動きはしています。
ObjectDelivererのログ保存機能と再生機能のサンプル。
— ayuma (@ayuma_x) February 6, 2019
WPFのアプリの映像を共有メモリ経由で表示しながらログファイルに保存して、後から読み込んでもう一度再現してます。
ちょっと重くてカクついてますが。#UE4 #UE4Study #ObjectDeliverer pic.twitter.com/fbdxyxK9nO
ログファイルへの保存機能
ObjectDelivererのStart時にProtocolLogWriterをセットして使用します。
Sendを呼ぶことでログファイルへデータが書き込まれます。
ログファイルには書き込み毎に開始時からの経過時間もmsecオーダーで記録されます。
ログファイルの再生機能
ObjectDelivererのStart時にProtocolLogReaderをセットして使用します。
Startを呼ぶとログファイルに記録された時間を経過する毎にReceiveDataイベントが呼ばれます。 そのため通常の相手がいる通信の時と同じように受信データの処理を行う事ができます。
まとめ
ログファイルへの保存と再生機能を実装することができて、当初ObjectDelivererに実装したいと考えていた機能もだいぶ消化することができました。
あとはMessage Packを使ったシリアライズを行ってのObjectの送受信が実装できればひと段落です。