OpenRTM-aist  2.1.0
InPortConnector.h
Go to the documentation of this file.
1 // -*- C++ -*-
20 #ifndef RTC_INPORTCONNECTOR_H
21 #define RTC_INPORTCONNECTOR_H
22 
23 #include <rtm/ConnectorListener.h>
24 #include <rtm/ConnectorBase.h>
25 #include <rtm/DirectOutPortBase.h>
26 #include <rtm/PortBase.h>
27 #include <rtm/ByteData.h>
28 
29 
30 namespace RTC
31 {
32  class OutPortBase;
53  : public ConnectorBase
54  {
55  public:
72  ConnectorListenersBase* listeners,
73  CdrBufferBase* buffer);
74 
82  ~InPortConnector() override;
83 
101  const ConnectorInfo& profile() override;
102 
120  const char* id() override;
121 
139  const char* name() override;
140 
158  DataPortStatus disconnect() override = 0;
159 
178 
200 
201 
220  template<class DataType>
221  DataPortStatus read(DataType& data)
222  {
223  if(m_cdr == nullptr)
224  {
225  m_cdr = createSerializer<DataType>(m_marshaling_type);
226  }
228 
229  if (!cdr)
230  {
231  RTC_ERROR(("Can not find Marshalizer: %s", m_marshaling_type.c_str()));
233  }
236  if (ret == DataPortStatus::PORT_OK)
237  {
238  cdr->deserialize(data);
239  }
240  return ret;
241  }
242 
260  virtual void setEndian(bool endian_type);
261 
279  virtual bool isLittleEndian();
280 
281  virtual BufferStatus write(ByteData &cdr);
282 
283 
301  bool setOutPort(OutPortBase* directOutPort);
302 
320  template <typename DataType>
321  bool getDirectData(DataType &data)
322  {
323  if (m_directOutPort == nullptr)
324  {
325  return false;
326  }
328  outport = dynamic_cast<DirectOutPortBase<DataType>*>(m_directOutPort->getDirectPort());
329 
330  if(outport)
331  {
332  if (outport->isEmpty())
333  {
335  m_profile);
338  m_profile);
339  RTC_PARANOID(("ON_BUFFER_EMPTY(InPort,OutPort), "
340  "ON_SENDER_EMPTY(InPort,OutPort) "
341  "callback called in direct mode."));
342  }
343  outport->read(data);
346  m_profile, data);
347  RTC_TRACE(("ON_BUFFER_READ(OutPort), "));
348  RTC_TRACE(("callback called in direct mode."));
350  m_profile, data);
351  RTC_TRACE(("ON_SEND(OutPort), "));
352  RTC_TRACE(("callback called in direct mode."));
354  m_profile, data);
355  RTC_TRACE(("ON_RECEIVED(InPort), "));
356  RTC_TRACE(("callback called in direct mode."));
358  m_profile, data);
359  RTC_TRACE(("ON_BUFFER_WRITE(InPort), "));
360  RTC_TRACE(("callback called in direct mode."));
361 
362 
363  return true;
364  }
365  return false;
366  }
367 
381  virtual void unsubscribeInterface(const coil::Properties& prop);
382 
383  protected:
440 
448  std::string m_marshaling_type;
449 
458 
459  };
460 } // namespace RTC
461 
462 #endif // RTC_INPORTCONNECTOR_H
Connector base class.
connector listener class
DirectOutPortBase class.
RTC's Port base 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.
Definition: ConnectorListener.h:35
BufferBase abstract class.
Definition: BufferBase.h:106
Definition: ByteDataStreamBase.h:63
virtual void isLittleEndian(bool little_endian)
Definition: ByteDataStreamBase.h:200
virtual bool deserialize(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 notify(ConnectorListenerType type, ConnectorInfo &info)=0
Virtual Callback method.
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: DirectOutPortBase.h:48
virtual void read(DataType &data)=0
virtual bool isEmpty()=0
InPortConnector base class.
Definition: InPortConnector.h:54
DataPortStatus disconnect() override=0
Disconnect connection.
virtual BufferStatus write(ByteData &cdr)
CdrBufferBase * getBuffer() override
Getting Buffer.
std::string m_marshaling_type
Definition: InPortConnector.h:448
virtual void unsubscribeInterface(const coil::Properties &prop)
bool setOutPort(OutPortBase *directOutPort)
const char * id() override
Getting Connector ID.
const ConnectorInfo & profile() override
Getting ConnectorInfo.
ByteDataStreamBase * m_cdr
Definition: InPortConnector.h:457
bool m_littleEndian
Connected Endian.
Definition: InPortConnector.h:423
Logger rtclog
Logger stream.
Definition: InPortConnector.h:391
ConnectorInfo m_profile
ConnectorInfo.
Definition: InPortConnector.h:399
const char * name() override
Getting Connector name.
bool getDirectData(DataType &data)
Definition: InPortConnector.h:321
ConnectorListenersBase * m_listeners
A reference to a ConnectorListener.
Definition: InPortConnector.h:407
PortBase * m_directOutPort
OutProt pointer to the peer in the same process.
Definition: InPortConnector.h:439
virtual bool isLittleEndian()
Whether this connector's endian is little.
virtual void setEndian(bool endian_type)
Setting an endian type.
DataPortStatus read(DataType &data)
Definition: InPortConnector.h:221
virtual DataPortStatus read(ByteDataStreamBase *data)=0
Destructor.
ConnectorListenersBase * m_outPortListeners
A pointer to a OutPort's ConnectorListener.
Definition: InPortConnector.h:431
~InPortConnector() override
Destructor.
InPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners, CdrBufferBase *buffer)
Constructor.
CdrBufferBase * m_buffer
Connector's buffer.
Definition: InPortConnector.h:415
Logger class.
Definition: SystemLogger.h:101
Output base class.
Definition: OutPortBase.h:229
Port base class.
Definition: PortBase.h:132
virtual DirectPortBase * getDirectPort()
RT-Component.
coil::Properties Properties
Definition: RTC.h:72
BufferStatus
DataPortStatus return codes.
Definition: BufferStatus.h:57