ページ

2013年8月23日金曜日

InPortでのデータ受信イベントについて

OpenRTMで開発してる際、InPortにデータが到着したことを検知してある処理を行いたいと思い、データ受信イベントハンドラを記述する方法を探していました。

しかし、OpenRTMのInPortのリファレンスのところにあるイベントハンドラにはそれっぽいものがありません…
散々探し回ってついにやりたいことを実現することはできたのですが、調べていく中でデータポートまわりの自分の理解に大きな勘違いがあったので、それについてメモっておきたいと思います。

大きな勘違いは、Portによってデータのやり取りがなされているわけではない、ということです。
実はInPort/OutPortはポート間の接続を管理しているのみで、実際のデータの送受信はConnectorによって行われています。具体的に図で描くと、

のようになっています。

そのため、データが到着した時に実行するメソッドを登録する先はPortではなく、Connectorになります。この登録にはInPortにあるメソッド、addConnectorDataListenerを用いて行います。

m_DataInputIn.addConnectorDataListener(ConnectorDataListenerType::ON_RECEIVED, dataReceivedListener);

これを踏まえて、今回はデータ転送遅延を計測するコンポーネントを作ってみました。DLはこちらからどうぞ。
InPortからデータが到着した時点で自分のタイムスタンプとデータに付随しているタイムスタンプを比較し、差の時間を表示します。
また、Outportからはコンフィグで設定したサイズのデータが1sおきに送信されます。

0 件のコメント:

コメントを投稿