ConnectorListener クラス
データポートの Connector において発生する各種イベントに対するコー ルバックを実現するリスナクラスの基底クラス。
コアロジックがOutPortに対してデータ書き込み、InPort側でデータが取 得されるまでの間で発生する各種イベントをフックするコールバックを設 定することができる。なお、リスナークラスは2種類存在し、バッファフ ルや送信時のコールバックで、その時点で有効なデータをファンクタの引 数として受け取る ConnectorDataListener であり、もう一方はデータエ ンプティやバッファ読み込み時のタイムアウトなどデータが取得できない 場合などにコールされるファンクタの引数に何もとらならい ConnecotorListener がある。
ConnectorListener クラスによって関連する動作をフックしたい場合、以 下の例のように、このクラスを継承し、コネクタの情報を引数に取る以下 のようなコールバックオブジェクトを定義し、データポートの適切なコー ルバック設定関数からコールバックオブジェクトをセットする必要がある。
class MyListener
: public ConnectorListener
{
public:
MyListener(const char* name) : m_name(name) {}
virtual ~MyListener() {}
virtual ReturnCode operator()(ConnectorInfo& info)
{
std::cout << "Data Listener: " << m_name << 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.
addConnectorListener(ConnectorListenerType::ON_BUFFER_EMPTY,
new MyListener("ON_BUFFER_EMPTY"));
:
第1引数の "ON_BUFFER_EMPTY" は、コールバックをフックするポイントで あり、以下に列挙する値を取ることが可能である。データポートには、接 続時にデータの送受信方法について、インターフェース型、データフロー 型、サブスクリプション型等を設定することができるが、これらの設定に よりフックされるポイントは異なる。以下に、インターフェースがCORBA CDR型の場合のコールバック一覧を示す。
OutPort:
- Push型: Subscription Typeによりさらにイベントの種類が分かれる。
- Flush: Flush型にはバッファがないため ON_BUFFER 系のイベントは発生しない
- New型
- Periodic型
- ON_BUFFER_EMPTY
- ON_BUFFER_READ_TIMEOUT
- ON_SENDER_EMPTY
- ON_SENDER_ERROR
- ON_CONNECT
- ON_DISCONNECT
- Pull型
- ON_BUFFER_EMPTY
- ON_BUFFER_READ_TIMEOUT
- ON_SENDER_EMPTY
- ON_SENDER_TIMEOUT
- ON_SENDER_ERROR
- ON_CONNECT
- ON_DISCONNECT
InPort:
- Push型:
- ON_BUFFER_EMPTY
- ON_BUFFER_READ_TIMEOUT
- ON_CONNECT
- ON_DISCONNECT
- Pull型