OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
ConnectorListener.h
Go to the documentation of this file.
1// -*- C++ -*-
18#ifndef RTC_CONNECTORLISTENER_H
19#define RTC_CONNECTORLISTENER_H
20
21#include <mutex>
22#include <rtm/RTC.h>
23#include <rtm/ConnectorBase.h>
24#include <rtm/ByteData.h>
26
27#include <string>
28#include <vector>
29#include <utility>
30#include <array>
31
32
33namespace RTC
34{
35 class ConnectorInfo;
36
37
67 {
68 public:
76 };
81
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
111
157
408 {
409 public:
434 static const char* toString(ConnectorDataListenerType type)
435 {
437 {
438 static const char* const typeString[] =
439 {
440 "ON_BUFFER_WRITE",
441 "ON_BUFFER_FULL",
442 "ON_BUFFER_WRITE_TIMEOUT",
443 "ON_BUFFER_OVERWRITE",
444 "ON_BUFFER_READ",
445 "ON_SEND",
446 "ON_RECEIVED",
447 "ON_RECEIVER_FULL",
448 "ON_RECEIVER_TIMEOUT",
449 "ON_RECEIVER_ERROR",
450 "CONNECTOR_DATA_LISTENER_NUM"
451 };
452 return typeString[static_cast<uint8_t>(type)];
453 }
454 return "";
455 }
456
465
482 virtual ReturnCode operator()(ConnectorInfo& info,
483 ByteData& data, const std::string& marshalingtype) = 0;
484 };
485
512 template <class DataType>
514 : public ConnectorDataListener
515 {
516 public:
533 {
534 SerializerFactory::instance().deleteObject(m_cdr);
535 }
536
562 ReturnCode operator()(ConnectorInfo& info,
563 ByteData& cdrdata, const std::string& marshalingtype) override
564 {
565 DataType data;
566
567 if(m_cdr == nullptr || m_marshalingtype != marshalingtype)
568 {
569 m_cdr = createSerializer<DataType>(marshalingtype);
570 m_marshalingtype = marshalingtype;
571 }
573
574
575 if (!cdr)
576 {
577 return NO_CHANGE;
578 }
579
580
581 // endian type check
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, ","));
585
586 if (endian[0] == "little")
587 {
588 cdr->isLittleEndian(true);
589 }
590 else if (endian[0] == "big")
591 {
592 cdr->isLittleEndian(false);
593 }
594
595
596 cdr->writeData(cdrdata.getBuffer(), cdrdata.getDataLength());
597
598 cdr->deserialize(data);
599
600 ReturnCode ret = this->operator()(info, data);
601 if (ret == DATA_CHANGED || ret == BOTH_CHANGED)
602 {
603 if (endian[0] == "little")
604 {
605 cdr->isLittleEndian(true);
606 }
607 else if (endian[0] == "big")
608 {
609 cdr->isLittleEndian(false);
610 }
611
612 cdr->serialize(data);
613 cdrdata.setDataLength(cdr->getDataLength());
614 cdr->readData(cdrdata.getBuffer(), cdrdata.getDataLength());
615 }
616
617 return ret;
618 }
619
637 virtual ReturnCode operator()(ConnectorInfo& info,
638 DataType& data) = 0;
639 private:
640 ByteDataStreamBase* m_cdr{nullptr};
641 std::string m_marshalingtype;
642 };
643
680
884 {
885 public:
910 static const char* toString(ConnectorListenerType type)
911 {
913 {
914 static const char* const typeStr[] =
915 {
916 "ON_BUFFER_EMPTY",
917 "ON_BUFFER_READ_TIMEOUT",
918 "ON_SENDER_EMPTY",
919 "ON_SENDER_TIMEOUT",
920 "ON_SENDER_ERROR",
921 "ON_CONNECT",
922 "ON_DISCONNECT",
923 "CONNECTOR_LISTENER_NUM"
924 };
925 return typeStr[static_cast<uint8_t>(type)];
926 }
927 return "";
928 }
929
938
956 virtual ReturnCode operator()(ConnectorInfo& info) = 0;
957 };
958
959
977 {
978 using Entry = std::pair<ConnectorDataListener*, bool>;
979 public:
997
1019 void addListener(ConnectorDataListener* listener, bool autoclean);
1020
1039
1057 size_t size();
1058
1078 virtual ReturnCode notify(ConnectorInfo& info,
1079 ByteData& cdrdata, const std::string& marshalingtype);
1080
1081
1082 virtual ReturnCode notifyIn(ConnectorInfo& info, ByteData& data);
1083
1084 virtual ReturnCode notifyOut(ConnectorInfo& info, ByteData& data);
1085
1086
1107 template <class DataType>
1108 ReturnCode notifyIn(ConnectorInfo& info, DataType& typeddata)
1109 {
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);
1114 }
1115
1136 template <class DataType>
1137 ReturnCode notifyOut(ConnectorInfo& info, DataType& typeddata)
1138 {
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);
1143 }
1167 template <class DataType>
1168 ReturnCode notify(ConnectorInfo& info, DataType& typeddata, const std::string& marshalingtype)
1169 {
1170 std::lock_guard<std::mutex> guard(m_mutex);
1171 ReturnCode ret(NO_CHANGE);
1172
1173 if(m_listeners.empty())
1174 {
1175 return ret;
1176 }
1177
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, ","));
1181
1182 for (auto & listener : m_listeners)
1183 {
1184 ConnectorDataListenerT<DataType>* datalistener(nullptr);
1185 datalistener =
1186 dynamic_cast<ConnectorDataListenerT<DataType>*>(listener.first);
1187 if (datalistener != nullptr)
1188 {
1189 ret = ret | datalistener->operator()(info, typeddata);
1190 }
1191 else
1192 {
1193 if (m_cdr == nullptr || m_marshalingtype != marshalingtype)
1194 {
1195 m_cdr = createSerializer<DataType>(marshalingtype);
1196 m_marshalingtype = marshalingtype;
1197 }
1199
1200 if (!cdr)
1201 {
1202 return NO_CHANGE;
1203 }
1204
1205 if (endian[0] == "little")
1206 {
1207 cdr->isLittleEndian(true);
1208 }
1209 else if (endian[0] == "big")
1210 {
1211 cdr->isLittleEndian(false);
1212 }
1213 cdr->serialize(typeddata);
1214 ByteData tmp = *cdr;
1215 ret = ret | listener.first->operator()(info, tmp, marshalingtype);
1216
1217 }
1218 }
1219 return ret;
1220 }
1221
1222 protected:
1223 std::vector<Entry> m_listeners;
1224 std::mutex m_mutex;
1226 std::string m_marshalingtype;
1227 };
1228
1246 {
1247 using Entry = std::pair<ConnectorListener*, bool>;
1248 public:
1258
1267
1289 void addListener(ConnectorListener* listener, bool autoclean);
1290
1309
1327 size_t size();
1328
1346 ReturnCode notify(ConnectorInfo& info);
1347
1348 private:
1349 std::vector<Entry> m_listeners;
1350 std::mutex m_mutex;
1351 };
1352
1354 {
1355 public:
1386 virtual ::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo& info, ByteData& data) = 0;
1409 virtual ::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo& info, ByteData& data) = 0;
1433 virtual ::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo& info) = 0;
1459 virtual bool addListener(ConnectorDataListenerType type, ConnectorDataListener* listener, bool autoclean=true) = 0;
1485 virtual bool addListener(ConnectorListenerType type, ConnectorListener* listener, bool autoclean=true) = 0;
1531 virtual bool removeListener(ConnectorListenerType type, ConnectorListener* listener) = 0;
1575 template<class DataType> ::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo& info, DataType& data)
1576 {
1578 if (holder != nullptr)
1579 {
1580 return holder->notifyIn(info, data);
1581 }
1583 }
1607 {
1609 if (holder != nullptr)
1610 {
1611 return holder->notifyOut(info, data);
1612 }
1614 }
1615 };
1616
1868
1869
1885 template <class DataType>
1888 {
1889 public:
1906 {
1907
1908 }
1909
1910
1911
1931 ReturnCode notify(ConnectorInfo& info,
1932 ByteData& cdrdata, const std::string& marshalingtype) override
1933 {
1934 std::lock_guard<std::mutex> guard(m_mutex);
1935 ConnectorListenerHolder::ReturnCode ret(NO_CHANGE);
1936 bool endian = true;
1937
1938 if(m_listeners.empty())
1939 {
1940 return ret;
1941 }
1942
1943 DataType data;
1944
1945 if (m_cdr == nullptr || m_marshalingtype != marshalingtype)
1946 {
1947 m_cdr = createSerializer<DataType>(marshalingtype);
1948 m_marshalingtype = marshalingtype;
1949 }
1951
1952
1953 if (!cdr)
1954 {
1955 return NO_CHANGE;
1956 }
1957
1958
1959 // endian type check
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, ","));
1963
1964 if (endian_str[0] == "little")
1965 {
1966 endian = true;
1967 }
1968 else if (endian_str[0] == "big")
1969 {
1970 endian = false;
1971 }
1972
1973 cdr->isLittleEndian(endian);
1974 cdr->writeData(cdrdata.getBuffer(), cdrdata.getDataLength());
1975 cdr->deserialize(data);
1976
1977
1978 for (auto & listener : m_listeners)
1979 {
1980 ConnectorDataListenerT<DataType>* datalistener(nullptr);
1981 datalistener =
1982 dynamic_cast<ConnectorDataListenerT<DataType>*>(listener.first);
1983 if (datalistener != nullptr)
1984 {
1985 ConnectorListenerHolder::ReturnCode linstener_ret(datalistener->operator()(info, data));
1986 if (linstener_ret == DATA_CHANGED || linstener_ret == BOTH_CHANGED)
1987 {
1988 cdr->isLittleEndian(endian);
1989 cdr->serialize(data);
1990 cdrdata.setDataLength(cdr->getDataLength());
1991 cdr->readData(cdrdata.getBuffer(), cdrdata.getDataLength());
1992 }
1993 ret = ret | linstener_ret;
1994 }
1995 else
1996 {
1997 ConnectorListenerHolder::ReturnCode linstener_ret(listener.first->operator()(info, cdrdata, marshalingtype));
1998 if (linstener_ret == DATA_CHANGED || linstener_ret == BOTH_CHANGED)
1999 {
2000 cdr->isLittleEndian(endian);
2001 cdr->writeData(cdrdata.getBuffer(), cdrdata.getDataLength());
2002 cdr->deserialize(data);
2003 }
2004 ret = ret | linstener_ret;
2005 }
2006 }
2007
2008 return ret;
2009 }
2010
2011
2032 ReturnCode notifyIn(ConnectorInfo& info, ByteData& data) override
2033 {
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);
2038 }
2039
2060 ReturnCode notifyOut(ConnectorInfo& info, ByteData& data) override
2061 {
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);
2066 }
2067
2068 };
2069
2083 template <class DataType>
2085 : public ConnectorListenersBase
2086 {
2087 public:
2096 {
2097 }
2106
2130 {
2131 if (static_cast<uint8_t>(type) < connectorData_.size())
2132 {
2133 return connectorData_[static_cast<uint8_t>(type)].notifyIn(info, data);
2134 }
2136 }
2160 {
2161 if (static_cast<uint8_t>(type) < connectorData_.size())
2162 {
2163 return connectorData_[static_cast<uint8_t>(type)].notifyOut(info, data);
2164 }
2166 }
2191 {
2192 if (static_cast<uint8_t>(type) < connector_.size())
2193 {
2194 return connector_[static_cast<uint8_t>(type)].notify(info);
2195 }
2197 }
2223 bool addListener(ConnectorDataListenerType type, ConnectorDataListener* listener, bool autoclean=true) override
2224 {
2225 if (static_cast<uint8_t>(type) < connectorData_.size())
2226 {
2227 connectorData_[static_cast<uint8_t>(type)].addListener(listener, autoclean);
2228 return true;
2229 }
2230 return false;
2231 }
2257 bool addListener(ConnectorListenerType type, ConnectorListener* listener, bool autoclean=true) override
2258 {
2259 if (static_cast<uint8_t>(type) < connector_.size())
2260 {
2261 connector_[static_cast<uint8_t>(type)].addListener(listener, autoclean);
2262 return true;
2263 }
2264 return false;
2265 }
2289 {
2290 if (static_cast<uint8_t>(type) < connectorData_.size())
2291 {
2292 connectorData_[static_cast<uint8_t>(type)].removeListener(listener);
2293 return true;
2294 }
2295 return false;
2296 }
2320 {
2321 if (static_cast<uint8_t>(type) < connector_.size())
2322 {
2323 connector_[static_cast<uint8_t>(type)].removeListener(listener);
2324 return true;
2325 }
2326 return false;
2327 }
2349 {
2350 if (static_cast<uint8_t>(type) < connectorData_.size())
2351 {
2352 return &connectorData_[static_cast<uint8_t>(type)];
2353 }
2354 return nullptr;
2355 }
2356
2357 private:
2367 std::array<ConnectorDataListenerHolder,
2368 static_cast<uint8_t>
2370 connectorData_;
2380 std::array<ConnectorListenerHolder,
2381 static_cast<uint8_t>
2383 connector_;
2384
2385 };
2386} // namespace RTC
2387
2388#endif // RTC_CONNECTORLISTENER_H
CORBA CDR Stream Buffer class.
Connector base class.
RTComponent header.
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)
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 holder class.
Definition ConnectorListener.h:1888
ConnectorDataListenerHolderT()=default
Constructor .
~ConnectorDataListenerHolderT() override
Destructor .
Definition ConnectorListener.h:1905
ReturnCode notifyOut(ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
Definition ConnectorListener.h:2060
ReturnCode notify(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype) override
Notify listeners.
Definition ConnectorListener.h:1931
ReturnCode notifyIn(ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
Definition ConnectorListener.h:2032
ConnectorDataListener holder class.
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)
Add the listener.
ReturnCode notifyOut(ConnectorInfo &info, DataType &typeddata)
Notify listeners. (Typed data version)
Definition ConnectorListener.h:1137
virtual ~ConnectorDataListenerHolder()
Destructor .
ReturnCode notify(ConnectorInfo &info, DataType &typeddata, const std::string &marshalingtype)
Notify listeners. (Typed data version)
Definition ConnectorListener.h:1168
virtual ReturnCode notify(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype)
Notify listeners.
virtual ReturnCode notifyOut(ConnectorInfo &info, ByteData &data)
void removeListener(ConnectorDataListener *listener)
Remove the listener.
ConnectorDataListenerHolder()
Constructor .
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)
Notify listeners. (Typed data version)
Definition ConnectorListener.h:1108
size_t size()
Getting number of listeners.
ConnectorDataListenerT class.
Definition ConnectorListener.h:515
virtual ReturnCode operator()(ConnectorInfo &info, DataType &data)=0
Virtual Callback method.
ReturnCode operator()(ConnectorInfo &info, ByteData &cdrdata, const std::string &marshalingtype) override
Callback method.
Definition ConnectorListener.h:562
ConnectorDataListenerT()=default
Constructor .
~ConnectorDataListenerT() override
Destructor .
Definition ConnectorListener.h:532
ConnectorDataListener class.
Definition ConnectorListener.h:408
virtual ReturnCode operator()(ConnectorInfo &info, ByteData &data, const std::string &marshalingtype)=0
Virtual Callback method.
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:410
virtual ~ConnectorDataListener()
Destructor .
static const char * toString(ConnectorDataListenerType type)
Convert ConnectorDataListenerType into the string.
Definition ConnectorListener.h:434
ConnectorInfo class.
Definition ConnectorBase.h:50
coil::Properties properties
Connection properties .
Definition ConnectorBase.h:178
ConnectorListener holder class.
Definition ConnectorListener.h:1246
void addListener(ConnectorListener *listener, bool autoclean)
Add the listener.
virtual ~ConnectorListenerHolder()
Destructor .
USE_CONNLISTENER_STATUS
Definition ConnectorListener.h:1249
ConnectorListenerHolder()
Constructor .
void removeListener(ConnectorListener *listener)
Remove the listener.
ReturnCode notify(ConnectorInfo &info)
Notify listeners.
size_t size()
Getting number of listeners.
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 class.
Definition ConnectorListener.h:884
virtual ~ConnectorListener()
Destructor .
virtual ReturnCode operator()(ConnectorInfo &info)=0
Virtual Callback method.
static const char * toString(ConnectorListenerType type)
Convert ConnectorListenerType into the string.
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
Add the listener.
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, DataType &data)
Notify listeners. (Typed data version)
Definition ConnectorListener.h:1575
virtual ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type)=0
Remove the listener.
virtual bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener)=0
Remove the listener.
virtual ~ConnectorListenersBase()
Destructor .
virtual::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
Notify listeners. (Typed data version)
virtual::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
Notify listeners. (Typed data version)
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, DataType &data)
Notify listeners. (Typed data version)
Definition ConnectorListener.h:1606
virtual::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
Virtual Callback method.
virtual bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true)=0
Add the listener.
virtual bool removeListener(ConnectorListenerType type, ConnectorListener *listener)=0
Remove the listener.
ConnectorListenersT class.
Definition ConnectorListener.h:2086
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
Definition ConnectorListener.h:2159
~ConnectorListenersT() override
Destructor .
Definition ConnectorListener.h:2105
ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type) override
Remove the listener.
Definition ConnectorListener.h:2348
bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true) override
Add the listener.
Definition ConnectorListener.h:2257
bool removeListener(ConnectorListenerType type, ConnectorListener *listener) override
Remove the listener.
Definition ConnectorListener.h:2319
bool addListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true) override
Add the listener.
Definition ConnectorListener.h:2223
::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info) override
Virtual Callback method.
Definition ConnectorListener.h:2190
bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener) override
Remove the listener.
Definition ConnectorListener.h:2288
ConnectorListenersT()
Constructor .
Definition ConnectorListener.h:2095
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
Definition ConnectorListener.h:2129
ConnectorListeners class.
Definition ConnectorListener.h:1632
bool removeListener(ConnectorDataListenerType type, ConnectorDataListener *listener) override
Remove the listener.
bool removeListener(ConnectorListenerType type, ConnectorListener *listener) override
Remove the listener.
::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info) override
Virtual Callback method.
ConnectorDataListenerHolder * getDataListenerHolder(ConnectorDataListenerType type) override
Remove the listener.
::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
~ConnectorListeners() override
Destructor .
bool addListener(ConnectorListenerType type, ConnectorListener *listener, bool autoclean=true) override
Add the listener.
bool addListener(ConnectorDataListenerType type, ConnectorDataListener *listener, bool autoclean=true) override
Add the listener.
ConnectorListeners()
Constructor .
::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data) override
Notify listeners. (Typed data version)
RT-Component.
ConnectorListenerStatus::Enum operator|(ConnectorListenerStatus::Enum L, ConnectorListenerStatus::Enum R)
ConnectorDataListenerType
The types of ConnectorDataListener.
Definition ConnectorListener.h:144
::RTC::ByteDataStreamBase * createSerializer(const std::string &marshalingtype)
Definition ByteDataStreamBase.h:363
ConnectorListenerStatus::Enum operator&(ConnectorListenerStatus::Enum L, ConnectorListenerStatus::Enum R)
ConnectorListenerType
The types of ConnectorListener.
Definition ConnectorListener.h:670