OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
OutPortConnector.h
Go to the documentation of this file.
1// -*- C++ -*-
20#ifndef RTC_OUTPORTCONNECTOR_H
21#define RTC_OUTPORTCONNECTOR_H
22
23#include <rtm/SystemLogger.h>
24#include <rtm/ConnectorBase.h>
27#include <rtm/PortBase.h>
29#include <rtm/ByteData.h>
30
31
32
33namespace RTC
34{
35 class InPortBase;
57 : public ConnectorBase
58 {
59 public:
60
69
91 const ConnectorInfo& profile() override;
92
106 const char* id() override;
107
121 const char* name() override;
122
137
151 CdrBufferBase* getBuffer() override = 0;
152
167
181 virtual void setEndian(bool endian_type);
182
200 virtual bool isLittleEndian();
201
215 template <class DataType>
216 DataPortStatus write(DataType& data)
217 {
218
219 if (m_directInPort != nullptr)
220 {
222 if(inport)
223 {
224 if (inport->isNew())
225 {
226 // ON_BUFFER_OVERWRITE(In,Out), ON_RECEIVER_FULL(In,Out) callback
231 RTC_PARANOID(("ON_BUFFER_OVERWRITE(InPort,OutPort), "
232 "ON_RECEIVER_FULL(InPort,OutPort) "
233 "callback called in direct mode."));
234 }
235 // ON_BUFFER_WRITE(In,Out) callback
238 RTC_PARANOID(("ON_BUFFER_WRITE(InPort,OutPort), "
239 "callback called in direct mode."));
240 inport->write(data); // write to InPort variable!!
241 // ON_RECEIVED(In,Out) callback
244 RTC_PARANOID(("ON_RECEIVED(InPort,OutPort), "
245 "callback called in direct mode."));
246
248 }
249 }
250 // normal case
251 if(m_cdr == nullptr)
252 {
254 }
256 if (!cdr)
257 {
258 RTC_ERROR(("Can not find Marshalizer: %s", m_marshaling_type.c_str()));
260 }
262 cdr->serialize(data);
263 RTC_TRACE(("connector endian: %s", isLittleEndian() ? "little":"big"));
264
265 // NOTE: need cast to ByteDataStreamBase* to call the another write()
267
268 return ret;
269 }
270
271 virtual BufferStatus read(ByteData &data);
272
273 bool setInPort(InPortBase* directInPort);
285 virtual void setPullDirectMode();
298 virtual bool pullDirectMode();
312 virtual void unsubscribeInterface(const coil::Properties& prop);
313 protected:
338
339
340
349
358
367
377
385 std::string m_marshaling_type;
387
388 };
389} // namespace RTC
390
391#endif // RTC_CONNECTORBASE_H
CORBA CDR Stream Buffer class.
Connector base class.
connector listener class
DirectInPortBase class.
RTC's Port base class.
RT component logger class.
#define RTC_PARANOID(fmt)
Paranoid level log output macro.
Definition SystemLogger.h:732
#define RTC_TRACE(fmt)
Trace level log output macro.
Definition SystemLogger.h:687
#define RTC_ERROR(fmt)
Error log output macro.
Definition SystemLogger.h:599
DataPortStatus mixin class.
BufferBase abstract class.
Definition BufferBase.h:106
Definition ByteDataStreamBase.h:63
virtual void isLittleEndian(bool little_endian)
Definition ByteDataStreamBase.h:200
virtual bool serialize(const DataType &data)=0
Definition ByteData.h:30
Connector Base class.
Definition ConnectorBase.h:209
ConnectorInfo class.
Definition ConnectorBase.h:50
Definition ConnectorListener.h:1354
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)
Definition DirectInPortBase.h:48
virtual void write(DataType &data)=0
virtual bool isNew()=0
Check whether the data is newest.
Port for InPort.
Definition InPortBase.h:70
Logger class.
Definition SystemLogger.h:101
OutPortConnector base class.
Definition OutPortConnector.h:58
const char * name() override
Getting Connector name.
bool m_littleEndian
Connected Endian .
Definition OutPortConnector.h:337
virtual bool isLittleEndian()
return it whether endian setting.
const char * id() override
Getting Connector ID.
bool m_directMode
Definition OutPortConnector.h:376
virtual BufferStatus read(ByteData &data)
bool setInPort(InPortBase *directInPort)
PortBase * m_directInPort
InProt pointer to the peer in the same process .
Definition OutPortConnector.h:348
virtual bool pullDirectMode()
const ConnectorInfo & profile() override
Getting Profile.
virtual void setPullDirectMode()
~OutPortConnector() override
Destructor .
DataPortStatus disconnect() override=0
Disconnect connection.
virtual void unsubscribeInterface(const coil::Properties &prop)
ConnectorInfo m_profile
PortProfile of the Port .
Definition OutPortConnector.h:329
ConnectorListenersBase * m_inPortListeners
A pointer to a InPort's ConnectorListener .
Definition OutPortConnector.h:366
OutPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners)
Constructor .
ByteDataStreamBase * m_cdr
Definition OutPortConnector.h:386
DataPortStatus write(DataType &data)
The conversion template of the data type.
Definition OutPortConnector.h:216
Logger rtclog
Logger streamf .
Definition OutPortConnector.h:321
virtual void setEndian(bool endian_type)
Setting an endian type.
ConnectorListenersBase * m_listeners
A reference to a ConnectorListener .
Definition OutPortConnector.h:357
virtual DataPortStatus write(ByteDataStreamBase *data)=0
Destructor.
std::string m_marshaling_type
Definition OutPortConnector.h:385
CdrBufferBase * getBuffer() override=0
Getting Buffer.
Port base class.
Definition PortBase.h:132
virtual DirectPortBase * getDirectPort()
RT-Component.
::RTC::ByteDataStreamBase * createSerializer(const std::string &marshalingtype)
Definition ByteDataStreamBase.h:363
BufferStatus
DataPortStatus return codes.
Definition BufferStatus.h:57