18#ifndef RTC_CONNECTORLISTENER_H
19#define RTC_CONNECTORLISTENER_H
105#define USE_CONNLISTENER_STATUS \
106 using ReturnCode = ::RTC::ConnectorListenerStatus::Enum; \
107 using ::RTC::ConnectorListenerStatus::NO_CHANGE; \
108 using ::RTC::ConnectorListenerStatus::INFO_CHANGED; \
109 using ::RTC::ConnectorListenerStatus::DATA_CHANGED; \
110 using ::RTC::ConnectorListenerStatus::BOTH_CHANGED
438 static const char*
const typeString[] =
442 "ON_BUFFER_WRITE_TIMEOUT",
443 "ON_BUFFER_OVERWRITE",
448 "ON_RECEIVER_TIMEOUT",
450 "CONNECTOR_DATA_LISTENER_NUM"
452 return typeString[
static_cast<uint8_t
>(type)];
483 ByteData& data,
const std::string& marshalingtype) = 0;
512 template <
class DataType>
534 SerializerFactory::instance().deleteObject(m_cdr);
563 ByteData& cdrdata,
const std::string& marshalingtype)
override
567 if(m_cdr ==
nullptr || m_marshalingtype != marshalingtype)
570 m_marshalingtype = marshalingtype;
582 std::string endian_type{coil::normalize(
583 info.
properties.getProperty(
"serializer.cdr.endian",
"little"))};
584 std::vector<std::string> endian(coil::split(endian_type,
","));
586 if (endian[0] ==
"little")
590 else if (endian[0] ==
"big")
600 ReturnCode ret = this->
operator()(info, data);
603 if (endian[0] ==
"little")
607 else if (endian[0] ==
"big")
641 std::string m_marshalingtype;
914 static const char*
const typeStr[] =
917 "ON_BUFFER_READ_TIMEOUT",
923 "CONNECTOR_LISTENER_NUM"
925 return typeStr[
static_cast<uint8_t
>(type)];
978 using Entry = std::pair<ConnectorDataListener*, bool>;
1079 ByteData& cdrdata,
const std::string& marshalingtype);
1107 template <
class DataType>
1110 std::string type = info.
properties.getProperty(
"marshaling_type",
"cdr");
1111 std::string marshaling_type{coil::eraseBothEndsBlank(
1112 info.
properties.getProperty(
"inport.marshaling_type", type))};
1113 return notify(info, typeddata, marshaling_type);
1136 template <
class DataType>
1139 std::string type = info.
properties.getProperty(
"marshaling_type",
"cdr");
1140 std::string marshaling_type{coil::eraseBothEndsBlank(
1141 info.
properties.getProperty(
"outport.marshaling_type", type))};
1142 return notify(info, typeddata, marshaling_type);
1167 template <
class DataType>
1170 std::lock_guard<std::mutex> guard(
m_mutex);
1178 std::string endian_type{coil::normalize(
1179 info.
properties.getProperty(
"serializer.cdr.endian",
"little"))};
1180 std::vector<std::string> endian(coil::split(endian_type,
","));
1187 if (datalistener !=
nullptr)
1189 ret = ret | datalistener->operator()(info, typeddata);
1205 if (endian[0] ==
"little")
1209 else if (endian[0] ==
"big")
1215 ret = ret | listener.first->operator()(info, tmp, marshalingtype);
1247 using Entry = std::pair<ConnectorListener*, bool>;
1349 std::vector<Entry> m_listeners;
1578 if (holder !=
nullptr)
1580 return holder->
notifyIn(info, data);
1609 if (holder !=
nullptr)
1851 static_cast<uint8_t
>
1864 static_cast<uint8_t
>
1885 template <
class DataType>
1932 ByteData& cdrdata,
const std::string& marshalingtype)
override
1934 std::lock_guard<std::mutex> guard(
m_mutex);
1935 ConnectorListenerHolder::ReturnCode ret(
NO_CHANGE);
1960 std::string endian_type{ coil::normalize(
1961 info.
properties.getProperty(
"serializer.cdr.endian",
"little")) };
1962 std::vector<std::string> endian_str(coil::split(endian_type,
","));
1964 if (endian_str[0] ==
"little")
1968 else if (endian_str[0] ==
"big")
1983 if (datalistener !=
nullptr)
1985 ConnectorListenerHolder::ReturnCode linstener_ret(datalistener->operator()(info, data));
1993 ret = ret | linstener_ret;
1997 ConnectorListenerHolder::ReturnCode linstener_ret(listener.first->operator()(info, cdrdata, marshalingtype));
2004 ret = ret | linstener_ret;
2034 std::string type = info.
properties.getProperty(
"marshaling_type",
"cdr");
2035 std::string marshaling_type{ coil::eraseBothEndsBlank(
2036 info.
properties.getProperty(
"inport.marshaling_type", type)) };
2037 return notify(info, data, marshaling_type);
2062 std::string type = info.
properties.getProperty(
"marshaling_type",
"cdr");
2063 std::string marshaling_type{ coil::eraseBothEndsBlank(
2064 info.
properties.getProperty(
"outport.marshaling_type", type)) };
2065 return notify(info, data, marshaling_type);
2083 template <
class DataType>
2131 if (
static_cast<uint8_t
>(type) < connectorData_.size())
2133 return connectorData_[
static_cast<uint8_t
>(type)].
notifyIn(info, data);
2161 if (
static_cast<uint8_t
>(type) < connectorData_.size())
2163 return connectorData_[
static_cast<uint8_t
>(type)].
notifyOut(info, data);
2192 if (
static_cast<uint8_t
>(type) < connector_.size())
2194 return connector_[
static_cast<uint8_t
>(type)].
notify(info);
2225 if (
static_cast<uint8_t
>(type) < connectorData_.size())
2227 connectorData_[
static_cast<uint8_t
>(type)].
addListener(listener, autoclean);
2259 if (
static_cast<uint8_t
>(type) < connector_.size())
2261 connector_[
static_cast<uint8_t
>(type)].
addListener(listener, autoclean);
2290 if (
static_cast<uint8_t
>(type) < connectorData_.size())
2292 connectorData_[
static_cast<uint8_t
>(type)].
removeListener(listener);
2321 if (
static_cast<uint8_t
>(type) < connector_.size())
2350 if (
static_cast<uint8_t
>(type) < connectorData_.size())
2352 return &connectorData_[
static_cast<uint8_t
>(type)];
2368 static_cast<uint8_t
>
2381 static_cast<uint8_t
>
CORBA CDR Stream Buffer class
シリアライザの基底クラス
Definition ByteDataStreamBase.h:63
virtual unsigned long getDataLength() const =0
データの長さを取得
virtual void writeData(const unsigned char *buffer, unsigned long length)=0
保持しているバッファにデータを書き込む
virtual void readData(unsigned char *buffer, unsigned long length) const =0
引数のバッファにデータを書き込む
virtual void isLittleEndian(bool little_endian)
エンディアンの設定
シリアライザのテンプレートクラス シリアライザを実装する場合は必ずこのクラスを継承する必要がある coil::GlobalFactory <RTC::ByteDataStream>にシリアライザを登録す...
Definition ByteDataStreamBase.h:200
virtual bool deserialize(DataType &data)=0
データの復号化
virtual bool serialize(const DataType &data)=0
データの符号化
シリアライズ後のバイト列を操作するクラス
Definition ByteData.h:30
unsigned long getDataLength() const
バッファのサイズを取得
void setDataLength(unsigned long length)
データのサイズの設定
unsigned char * getBuffer() const
バッファのポインタを取得
データ型指定のConnectorListener ホルダクラス
Definition ConnectorListener.h:1888
ConnectorDataListenerHolderT()=default
コンストラクタ
~ConnectorDataListenerHolderT() override
デストラクタ
Definition ConnectorListener.h:1905
ReturnCode notifyOut(ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(OutPort側) リスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOut関数を使用...
Definition ConnectorListener.h:2060
ReturnCode notify(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype) override
リスナーへ通知する
Definition ConnectorListener.h:1931
ReturnCode notifyIn(ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(OutPort側) リスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOut関数を使用...
Definition ConnectorListener.h:2032
ConnectorDataListener ホルダクラス
Definition ConnectorListener.h:977
std::mutex m_mutex
Definition ConnectorListener.h:1224
std::string m_marshalingtype
Definition ConnectorListener.h:1226
ByteDataStreamBase * m_cdr
Definition ConnectorListener.h:1225
void addListener(ConnectorDataListener *listener, bool autoclean)
リスナーの追加
ReturnCode notifyOut(ConnectorInfo &info, DataType &typeddata)
リスナーへ通知する(データ型指定版、OutPort側) 登録されているリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側では...
Definition ConnectorListener.h:1137
virtual ~ConnectorDataListenerHolder()
デストラクタ
ReturnCode notify(ConnectorInfo &info, DataType &typeddata, const std::string &marshalingtype)
リスナーへ通知する(データ型指定版)
Definition ConnectorListener.h:1168
virtual ReturnCode notify(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype)
リスナーへ通知する
virtual ReturnCode notifyOut(ConnectorInfo &info, ByteData &data)
void removeListener(ConnectorDataListener *listener)
リスナーの削除
ConnectorDataListenerHolder()
コンストラクタ
std::vector< Entry > m_listeners
Definition ConnectorListener.h:1223
virtual ReturnCode notifyIn(ConnectorInfo &info, ByteData &data)
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:980
ReturnCode notifyIn(ConnectorInfo &info, DataType &typeddata)
リスナーへ通知する(データ型指定版、InPort側) 登録されているリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではn...
Definition ConnectorListener.h:1108
ConnectorDataListenerT クラス
Definition ConnectorListener.h:515
virtual ReturnCode operator()(ConnectorInfo &info, DataType &data)=0
仮想コールバックメソッド
ReturnCode operator()(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype) override
コールバックメソッド
Definition ConnectorListener.h:562
ConnectorDataListenerT()=default
コンストラクタ
~ConnectorDataListenerT() override
デストラクタ
Definition ConnectorListener.h:532
ConnectorDataListener クラス
Definition ConnectorListener.h:408
virtual ReturnCode operator()(ConnectorInfo &info, ByteData &data, const std::string &marshalingtype)=0
仮想コールバックメソッド
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:410
virtual ~ConnectorDataListener()
デストラクタ
static const char * toString(ConnectorDataListenerType type)
ConnectorDataListenerType を文字列に変換
Definition ConnectorListener.h:434
ConnectorInfo クラス
Definition ConnectorBase.h:50
coil::Properties properties
プロパティ
Definition ConnectorBase.h:178
ConnectorListener ホルダクラス
Definition ConnectorListener.h:1246
void addListener(ConnectorListener *listener, bool autoclean)
リスナーの追加
virtual ~ConnectorListenerHolder()
デストラクタ
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:1249
ConnectorListenerHolder()
コンストラクタ
void removeListener(ConnectorListener *listener)
リスナーの削除
ReturnCode notify(ConnectorInfo &info)
リスナーへ通知する
ConnectorListenerStatus mixin クラス
Definition ConnectorListener.h:67
Enum
Definition ConnectorListener.h:70
@ NO_CHANGE
Definition ConnectorListener.h:71
@ BOTH_CHANGED
Definition ConnectorListener.h:74
@ INFO_CHANGED
Definition ConnectorListener.h:72
@ DATA_CHANGED
Definition ConnectorListener.h:73
ConnectorListener クラス
Definition ConnectorListener.h:884
virtual ~ConnectorListener()
デストラクタ
virtual ReturnCode operator()(ConnectorInfo &info)=0
仮想コールバックメソッド
static const char * toString(ConnectorListenerType type)
ConnectorListenerType を文字列に変換
Definition ConnectorListener.h:910
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:886
Definition ConnectorListener.h:1354
virtual bool addListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true)=0
リスナーの追加
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, DataType &data)
リスナーへ通知する(データ型指定、InPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではnot...
Definition ConnectorListener.h:1575
virtual ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type)=0
指定の種類のConnectorDataListenerHolderを取得する
virtual bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener)=0
リスナーの削除
virtual ~ConnectorListenersBase()
デストラクタ
virtual::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(InPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではnotifyOut関...
virtual::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, DataType &data)
リスナーへ通知する(データ型指定、OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではn...
Definition ConnectorListener.h:1606
virtual::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
リスナーへ通知する
virtual bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true)=0
リスナーの追加
virtual bool removeListener(ConnectorListenerType type, ConnectorListener *listener)=0
リスナーの削除
ConnectorListenersT クラス
Definition ConnectorListener.h:2086
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
Definition ConnectorListener.h:2159
~ConnectorListenersT() override
デストラクタ
Definition ConnectorListener.h:2105
ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type) override
指定の種類のConnectorDataListenerHolderを取得する
Definition ConnectorListener.h:2348
bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true) override
リスナーの追加
Definition ConnectorListener.h:2257
bool removeListener(ConnectorListenerType type, ConnectorListener *listener) override
リスナーの削除
Definition ConnectorListener.h:2319
bool addListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true) override
リスナーの追加
Definition ConnectorListener.h:2223
::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info) override
リスナーへ通知する
Definition ConnectorListener.h:2190
bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener) override
リスナーの削除
Definition ConnectorListener.h:2288
ConnectorListenersT()
コンストラクタ
Definition ConnectorListener.h:2095
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(InPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではnotifyIn関数...
Definition ConnectorListener.h:2129
ConnectorListeners クラス
Definition ConnectorListener.h:1632
bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener) override
リスナーの削除
bool removeListener(ConnectorListenerType type, ConnectorListener *listener) override
リスナーの削除
::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info) override
リスナーへ通知する
ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type) override
指定の種類のConnectorDataListenerHolderを取得する
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(InPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではnotifyOut関...
~ConnectorListeners() override
デストラクタ
bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true) override
リスナーの追加
bool addListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true) override
リスナーの追加
ConnectorListeners()
コンストラクタ
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
ConnectorListenerStatus::Enum operator|(ConnectorListenerStatus::Enum L, ConnectorListenerStatus::Enum R)
ConnectorDataListenerType
ConnectorDataListener のタイプ
Definition ConnectorListener.h:144
@ ON_BUFFER_WRITE_TIMEOUT
@ CONNECTOR_DATA_LISTENER_NUM
::RTC::ByteDataStreamBase * createSerializer(const std::string &marshalingtype)
GlobalFactoryからシリアライザを生成する
Definition ByteDataStreamBase.h:363
ConnectorListenerStatus::Enum operator&(ConnectorListenerStatus::Enum L, ConnectorListenerStatus::Enum R)
ConnectorListenerType
ConnectorListener のタイプ
Definition ConnectorListener.h:670