OpenRTM-aist  2.1.0
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>
25 #include <rtm/ConnectorListener.h>
26 #include <rtm/DirectInPortBase.h>
27 #include <rtm/PortBase.h>
29 #include <rtm/ByteData.h>
30 
31 
32 
33 namespace RTC
34 {
35  class InPortBase;
57  : public ConnectorBase
58  {
59  public:
60 
69 
77  ~OutPortConnector() override;
91  const ConnectorInfo& profile() override;
92 
106  const char* id() override;
107 
121  const char* name() override;
122 
136  DataPortStatus disconnect() override = 0;
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  {
253  m_cdr = createSerializer<DataType>(m_marshaling_type);
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.
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 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
bool m_littleEndian
Connected Endian.
Definition: OutPortConnector.h:337
virtual bool isLittleEndian()
return it whether endian setting.
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()
virtual void setPullDirectMode()
const char * id() override
Getting Connector ID.
~OutPortConnector() override
Destructor.
const char * name() override
Getting Connector name.
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
CdrBufferBase * getBuffer() override=0
Getting Buffer.
OutPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners)
Constructor.
const ConnectorInfo & profile() override
Getting Profile.
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
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