OpenRTM-aist  1.2.1
公開メンバ関数 | 静的公開メンバ関数 | 公開変数類 | 全メンバ一覧
RTC::ConnectorDataListener クラスabstract

ConnectorDataListener クラス [詳解]

#include <ConnectorListener.h>

RTC::ConnectorDataListener の継承関係図
Inheritance graph
[凡例]
RTC::ConnectorDataListener 連携図
Collaboration graph
[凡例]

公開メンバ関数

virtual ~ConnectorDataListener ()
 デストラクタ [詳解]
 
virtual ReturnCode operator() (ConnectorInfo &info, cdrMemoryStream &data)=0
 仮想コールバックメソッド [詳解]
 

静的公開メンバ関数

static const char * toString (ConnectorDataListenerType type)
 ConnectorDataListenerType を文字列に変換 [詳解]
 

公開変数類

 USE_CONNLISTENER_STATUS
 

その他の継承メンバ

- 基底クラス RTC::ConnectorListenerStatus に属する継承公開型
enum  Enum { NO_CHANGE = 0, INFO_CHANGED = 1 << 0, DATA_CHANGED = 1 << 1, BOTH_CHANGED = INFO_CHANGED | DATA_CHANGED }
 

詳解

ConnectorDataListener クラス

データポートの Connector において発生する各種イベントに対するコー ルバックを実現するリスナクラスの基底クラス。

コアロジックがOutPortに対してデータ書き込み、InPort側でデータが取 得されるまでの間で発生する各種イベントをフックするコールバックを設 定することができる。なお、リスナークラスは2種類存在し、バッファフ ルや送信時のコールバックで、その時点で有効なデータをファンクタの引 数として受け取る ConnectorDataListener であり、もう一方はデータエ ンプティやバッファ読み込み時のタイムアウトなどデータが取得できない 場合などにコールされるファンクタの引数に何もとらならい ConnecotorListener がある。

ConnectorDataListener クラスによってデータが関連する動作をフックし たい場合、以下の例のように、このクラスを継承し、コネクタの情報とデー タを引数に取る以下のようなコールバックオブジェクトを定義し、データ ポートの適切なコールバック設定関数からコールバックオブジェクトをセッ トする必要がある。なお、Data Listener には、データとしてマーシャリ ング後のデータを引数に取る ConnectorDataListener と、データを特定 の型にアンマーシャルした後の値を引数に取る、 ConnectorDataListenerT がある。以下の例は、ConnectorDataListenerT の定義例である。

class MyDataListener
  : public ConnectorDataListenerT<RTC::TimedLong>
{
public:
  MyDataListener(const char* name) : m_name(name) {}
  virtual ~MyDataListener() {}
  virtual ReturnCode operator()(ConnectorInfo& info, TimedLong& data)
  {
    std::cout << "Data Listener: " << m_name       << std::endl;
    std::cout << "Data:          " << data.data    << std::endl;
    std::cout << "Profile::name: " << info.name    << std::endl;
    std::cout << "Profile::id:   " << info.id      << std::endl;
    std::cout << "Profile::properties: "           << std::endl;
    std::cout << info.properties;
  };
  std::string m_name;
};

このようにして定義されたリスナクラスは、以下のようにデータポートに 対して、以下のようにセットされる。

RTC::ReturnCode_t ConsoleIn::onInitialize()
{
    m_outOut.
        addConnectorDataListener(ON_BUFFER_WRITE,
                                 new MyDataListener("ON_BUFFER_WRITE"));
   :

第1引数の "ON_BUFFER_WRITE" は、コールバックをフックするポイントで あり、以下に列挙する値を取ることが可能である。データポートには、接 続時にデータの送受信方法について、インターフェース型、データフロー 型、サブスクリプション型等を設定することができるが、これらの設定に よりフックされるポイントは異なる。以下に、インターフェースがCORBA CDR型の場合のコールバック一覧を示す。

OutPort:

構築子と解体子

virtual RTC::ConnectorDataListener::~ConnectorDataListener ( )
virtual

デストラクタ

関数詳解

virtual ReturnCode RTC::ConnectorDataListener::operator() ( ConnectorInfo info,
cdrMemoryStream &  data 
)
pure virtual

仮想コールバックメソッド

データポートの Connector において発生する各種イベントに対するコー ルバックメソッド

RTC::ConnectorDataListenerT< DataType >で実装されています。

static const char* RTC::ConnectorDataListener::toString ( ConnectorDataListenerType  type)
inlinestatic

ConnectorDataListenerType を文字列に変換

ConnectorDataListenerType を文字列に変換する

引数
type変換対象 ConnectorDataListenerType
戻り値
文字列変換結果

参照先 RTC::CONNECTOR_DATA_LISTENER_NUM.

メンバ詳解

RTC::ConnectorDataListener::USE_CONNLISTENER_STATUS

このクラス詳解は次のファイルから抽出されました: