OpenRTM-aist  1.2.1
OutPortConnector.h
[詳解]
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>
28 
29 
30 
31 namespace RTC
32 {
33  class InPortBase;
55  : public ConnectorBase
56  {
57  public:
59 
68 
76  virtual ~OutPortConnector();
90  const ConnectorInfo& profile();
91 
105  const char* id();
106 
120  const char* name();
121 
135  virtual ReturnCode disconnect() = 0;
136 
150  virtual CdrBufferBase* getBuffer() = 0;
151 
165  virtual ReturnCode write(cdrMemoryStream& data) = 0;
166 
180  virtual void setEndian(const bool endian_type);
181 
199  virtual bool isLittleEndian();
200 
214  template <class DataType>
215  ReturnCode write(DataType& data)
216  {
217  if (m_directInPort != NULL)
218  {
220  if(inport)
221  {
222  if (inport->isNew())
223  {
224  // ON_BUFFER_OVERWRITE(In,Out), ON_RECEIVER_FULL(In,Out) callback
225  m_listeners.
226  connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
228  connectorData_[ON_BUFFER_OVERWRITE].notify(m_profile, data);
229  m_listeners.
230  connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
232  connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
233  RTC_PARANOID(("ON_BUFFER_OVERWRITE(InPort,OutPort), "
234  "ON_RECEIVER_FULL(InPort,OutPort) "
235  "callback called in direct mode."));
236  }
237  // ON_BUFFER_WRITE(In,Out) callback
238  m_listeners.
239  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
241  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
242  RTC_PARANOID(("ON_BUFFER_WRITE(InPort,OutPort), "
243  "callback called in direct mode."));
244  inport->write(data); // write to InPort variable!!
245  // ON_RECEIVED(In,Out) callback
246  m_listeners.
247  connectorData_[ON_RECEIVED].notify(m_profile, data);
249  connectorData_[ON_RECEIVED].notify(m_profile, data);
250  RTC_PARANOID(("ON_RECEIVED(InPort,OutPort), "
251  "callback called in direct mode."));
252  return PORT_OK;
253  }
254  // ON_BUFFER_WRITE(In,Out) callback
255  m_listeners.
256  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
258  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
259  RTC_PARANOID(("ON_BUFFER_WRITE(InPort,OutPort), "
260  "callback called in direct mode."));
261  inport->write(data); // write to InPort variable!!
262  // ON_RECEIVED(In,Out) callback
263  m_listeners.
264  connectorData_[ON_RECEIVED].notify(m_profile, data);
266  connectorData_[ON_RECEIVED].notify(m_profile, data);
267  RTC_PARANOID(("ON_RECEIVED(InPort,OutPort), "
268  "callback called in direct mode."));
269  return PORT_OK;
270  }
271  // normal case
272  m_cdr.rewindPtrs();
273  RTC_TRACE(("connector endian: %s", isLittleEndian() ? "little":"big"));
274  m_cdr.setByteSwapFlag(isLittleEndian());
275  data >>= m_cdr;
276  return write(m_cdr);
277  }
278 
279  bool setInPort(InPortBase* directInPort);
291  virtual void setPullDirectMode();
304  virtual bool pullDirectMode();
305  protected:
337  cdrMemoryStream m_cdr;
338 
347 
356 
365 
367 
368  };
369 }; // namespace RTC
370 
371 #endif // RTC_CONNECTORBASE_H
RTC&#39;s Port base class.
ConnectorListeners クラス
Definition: ConnectorListener.h:1217
virtual bool isNew()
最新データが存在するか確認する
Definition: DirectInPortBase.h:108
Definition: ConnectorListener.h:147
virtual ReturnCode write(cdrMemoryStream &data)=0
write 関数
#define DATAPORTSTATUS_ENUM
RTC::DataPortStatus 導入
Definition: DataPortStatus.h:233
OutPortConnector 基底クラス
Definition: OutPortConnector.h:54
RTコンポーネント
#define RTC_TRACE(fmt)
トレースログ出力マクロ。
Definition: SystemLogger.h:588
virtual DirectPortBase * getDirectPort()
direct通信用ポートオブジェクト取得
ConnectorListeners & m_listeners
ConnectorListenrs への参照
Definition: OutPortConnector.h:355
RT component logger class.
Definition: ConnectorListener.h:146
Connector 基底クラス
Definition: ConnectorBase.h:156
ConnectorInfo クラス
Definition: ConnectorBase.h:43
virtual CdrBufferBase * getBuffer()=0
Buffer を取得する
PortBase * m_directInPort
同一プロセス上のピアInPortのポインタ
Definition: OutPortConnector.h:346
bool setInPort(InPortBase *directInPort)
Definition: ConnectorListener.h:140
ConnectorInfo m_profile
Port の PortProfile.
Definition: OutPortConnector.h:321
#define RTC_PARANOID(fmt)
パラノイドログ出力マクロ。
Definition: SystemLogger.h:633
Connector base class.
direct接続用InPort基底クラス
Definition: DirectInPortBase.h:48
ConnectorListeners * m_inPortListeners
InPort 側の ConnectorListenrs への参照
Definition: OutPortConnector.h:364
const char * id()
Connector ID 取得
virtual bool isLittleEndian()
endian 設定を返す
Port の基底クラス
Definition: PortBase.h:135
cdrMemoryStream m_cdr
cdrストリーム
Definition: OutPortConnector.h:337
DATAPORTSTATUS_ENUM OutPortConnector(ConnectorInfo &info, ConnectorListeners &listeners)
コンストラクタ
ReturnCode write(DataType &data)
データ型の変換テンプレート
Definition: OutPortConnector.h:215
virtual ReturnCode disconnect()=0
接続解除関数
virtual void setEndian(const bool endian_type)
endianタイプ設定
Logger クラス
Definition: SystemLogger.h:99
InPort 用 Port.
Definition: InPortBase.h:74
Definition: ConnectorListener.h:143
Definition: DataPortStatus.h:145
Logger rtclog
ロガーストリーム
Definition: OutPortConnector.h:313
DirectInPortBase class.
virtual void setPullDirectMode()
ダイレクト接続モードに設定
const char * name()
Connector 名取得
virtual void write(const DataType &data)
データの書き込み
Definition: DirectInPortBase.h:154
BufferBase 抽象クラス
Definition: BufferBase.h:104
connector listener class
bool m_directMode
Definition: OutPortConnector.h:366
virtual ~OutPortConnector()
デストラクタ
virtual bool pullDirectMode()
ダイレクト接続モードかの判定
const ConnectorInfo & profile()
Profile 取得
bool m_littleEndian
接続エンディアン
Definition: OutPortConnector.h:329