ConnectorDataListener クラス
データポートの Connector において発生する各種イベントに対するコー
ルバックを実現するリスナクラスの基底クラス。
コアロジックがOutPortに対してデータ書き込み、InPort側でデータが取
得されるまでの間で発生する各種イベントをフックするコールバックを設
定することができる。なお、リスナークラスは2種類存在し、バッファフ
ルや送信時のコールバックで、その時点で有効なデータをファンクタの引
数として受け取る ConnectorDataListener であり、もう一方はデータエ
ンプティやバッファ読み込み時のタイムアウトなどデータが取得できない
場合などにコールされるファンクタの引数に何もとらならい
ConnecotorListener がある。
ConnectorDataListener クラスによってデータが関連する動作をフックし
たい場合、以下の例のように、このクラスを継承し、コネクタの情報とデー
タを引数に取る以下のようなコールバックオブジェクトを定義し、データ
ポートの適切なコールバック設定関数からコールバックオブジェクトをセッ
トする必要がある。なお、Data Listener には、データとしてマーシャリ
ング後のデータを引数に取る ConnectorDataListener と、データを特定
の型にアンマーシャルした後の値を引数に取る、
ConnectorDataListenerT がある。以下の例は、ConnectorDataListenerT
の定義例である。
{@code
class MyDataListener extends ConnectorDataListenerT {
public MyDataListener(final String name){
super(TimedLong.class);
m_name = name;
}
public ReturnCode operator(ConnectorBase.ConnectorInfo info, TimedLong data) {
System.out.println("Listener: "+m_name);
System.out.println("Data: "+data.data);
System.out.println("Profile::name: "+info.name);
System.out.println("Profile::id: "+info.id);
System.out.println("Profile::properties: ");
System.out.println(info.properties);
};
public String m_name;
};
}
このようにして定義されたリスナクラスは、以下のようにデータポートに
対して、以下のようにセットされる。
{@code
protected ReturnCode_t onInitialize() {
m_outOut.addConnectorDataListener(
ConnectorDataListenerType.ON_BUFFER_WRITE,
new MyDataListener("ON_BUFFER_WRITE"));
:
};
}
第1引数の "ON_BUFFER_WRITE" は、コールバックをフックするポイントで
あり、以下に列挙する値を取ることが可能である。データポートには、接
続時にデータの送受信方法について、インターフェース型、データフロー
型、サブスクリプション型等を設定することができるが、これらの設定に
よりフックされるポイントは異なる。以下に、インターフェースがCORBA
CDR型の場合のコールバック一覧を示す。
OutPort:
- - Push型: Subscription Typeによりさらにイベントの種類が分かれる。
- - Flush: Flush型にはバッファがないため ON_BUFFER 系のイベントは発生しない
- - ON_SEND
- - ON_RECEIVED
- - ON_RECEIVER_FULL
- - ON_RECEIVER_TIMEOUT
- - ON_RECEIVER_ERROR
- .
- - New型
- - ON_BUFFER_WRITE
- - ON_BUFFER_FULL
- - ON_BUFFER_WRITE_TIMEOUT
- - ON_BUFFER_OVERWRITE
- - ON_BUFFER_READ
- - ON_SEND
- - ON_RECEIVED
- - ON_RECEIVER_FULL
- - ON_RECEIVER_TIMEOUT
- - ON_RECEIVER_ERROR
- .
- - Periodic型
- - ON_BUFFER_WRITE
- - ON_BUFFER_FULL
- - ON_BUFFER_WRITE_TIMEOUT
- - ON_BUFFER_READ
- - ON_SEND
- - ON_RECEIVED
- - ON_RECEIVER_FULL
- - ON_RECEIVER_TIMEOUT
- - ON_RECEIVER_ERROR
- .
- .
.
- - Pull型
- - ON_BUFFER_WRITE
- - ON_BUFFER_FULL
- - ON_BUFFER_WRITE_TIMEOUT
- - ON_BUFFER_OVERWRITE
- - ON_BUFFER_READ
- - ON_SEND
- .
.
InPort:
- - Push型:
- - ON_BUFFER_WRITE
- - ON_BUFFER_FULL
- - ON_BUFFER_WRITE_TIMEOUT
- - ON_BUFFER_WRITE_OVERWRITE
- - ON_BUFFER_READ
- - ON_BUFFER_READ_TIMEOUT
- - ON_RECEIVED
- - ON_RECEIVER_FULL
- - ON_RECEIVER_TIMEOUT
- - ON_RECEIVER_ERROR
- .
- - Pull型