packet_manipulator_simple
packet_manipulator_simple サンプル

概要
packet_manipulator_simple サンプルは Packet Manipulator の基本的な使用方法とプリセットフィルタの設定方法のサンプルとなっています。 サンプルコードでは Packet Manipulator の実装コードのフォーカスしているため、Diarkis Runtime の基本的な実装については関数化して説明等は記載していません。 Diarkis Runtime の基本的な実装について知りたい場合は room_broadcast サンプル や Diarkis モジュール利用の全体的な流れ を参照してください。 また、Packet Manipulator 全般については Packet Manipulator を参照してください。
本サンプルはデバッグ機能のサンプル実装のため Release ビルドはできません。
ローカル環境でサーバーを起動する
サンプルで使用するサーバーを起動するためのチュートリアルを実施して、ローカル環境で Diarkis サーバーを起動します。
packet_manipulator_simple サンプル動作方法
サンプルをビルドして diarkis サーバアドレス, UID, クライアントキー を指定して2つ起動してください。
例)
packet_manipulator_simple.exe 192.168.50.111:7000 1111 AAAA packet_manipulator_simple.exe 192.168.50.111:7000 2222 BBBB
2 ユーザーが Room に接続後、Packet Manipulator のフィルタ設定を変えながら通信を行いフィルタ適用の結果を画面に表示します。
packet_manipulator_simple サンプル解説
本セクションではサンプルの実装ポイントについて解説します。
Packet Manipulator の更新処理実装
Packet Manipulator では内部状態を更新するために定期的に IPacketManipulator::Update を実行する必要があります。
本サンプルではこの処理を専用スレッドを用意して実装しています。具体的には LaunchPacketManipulatorThread で専用スレッドを起動し、ManipulatorLoop で IPacketManipulator::Update を実行しています。 サンプルのコメントにもありますように、この処理の実行頻度が Packet Filter の実行間隔となり、Packet Filter の機能にも影響します。本サンプルではパケット遅延フィルタを利用しており、なるべく遅延の値がぶれないように 30 ms 間隔で IPacketManipulator::Update を呼び出すようにしています。
更新処理に専用スレッドを用意することは必須というわけではなく、ゲームのループで毎フレーム実行するような形でも問題ありません。
プロファイル情報の表示
本サンプルでは FilterApplyPoint::RawUdpReceive へ Packet Filter を適用しています。この Apply Point は Diarkis の UDP 通信すべてに影響する Apply Point で、この Apply Point でパケロスや遅延が発生すると Diarkis のプロファイル情報にも影響するようになっています。本サンプルでは Packet Filter の影響をわかりやすくするためこのプロファイル情報を利用しています。
Packet Manipulator の利用方法の解説
DiarkisGetPacketManipulatorを使用して Packet Manipulator のインスタンスを Diarkis Runtime から取得します。
IPacketManipulator::GetOrAllocFilterSetを使用してFilterApplyPoint::RawUdpReceiveApply Point のIFilterSetを取得します。
IFilterSetはstd::weak_ptrで返されるため、使用する前に有効性をチェックしてください。 また、Filter Set と Apply Point に互換性がない場合は nullptr が返りますのでご注意ください。 本サンプルではIFilterSetのポインタを取得後、プリセットのパケロスフィルターを設定しています。
FilterApplyPoint::RawUdpReceiveは Diarkis が扱うすべての UDP パケットに対して適用されます。本サンプルでは Room と P2P でパケットを送信してプロファイルのパケロス率に影響していることを確認できます。以下、パケットの遅延と複数 Packet Filter 適用のサンプル実装となっていますが、基本的な構造はここまでの流れと同じです。
最終更新
役に立ちましたか?

