OpenRTM-aist  2.1.0
InPortConnector.h
[詳解]
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)
パラノイドログ出力マクロ。
Definition: SystemLogger.h:732
#define RTC_TRACE(fmt)
トレースログ出力マクロ。
Definition: SystemLogger.h:687
#define RTC_ERROR(fmt)
エラーログ出力マクロ。
Definition: SystemLogger.h:599
BufferBase 抽象クラス
Definition: BufferBase.h:106
シリアライザの基底クラス
Definition: ByteDataStreamBase.h:63
virtual void isLittleEndian(bool little_endian)
エンディアンの設定
シリアライザのテンプレートクラス シリアライザを実装する場合は必ずこのクラスを継承する必要がある coil::GlobalFactory <RTC::ByteDataStream>にシリアライザを登録す...
Definition: ByteDataStreamBase.h:200
virtual bool deserialize(DataType &data)=0
データの復号化
シリアライズ後のバイト列を操作するクラス
Definition: ByteData.h:30
Connector 基底クラス
Definition: ConnectorBase.h:209
ConnectorInfo クラス
Definition: ConnectorBase.h:50
Definition: ConnectorListener.h:1354
virtual ::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
リスナーへ通知する
virtual ::RTC::ConnectorListenerStatus::Enum notifyIn(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(InPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 InPort側ではnotifyOut関...
virtual ::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
direct接続用OutPort基底クラス
Definition: DirectOutPortBase.h:48
virtual void read(DataType &data)=0
データの取得
virtual bool isEmpty()=0
新規データが無いことを確認
InPortConnector 基底クラス
Definition: InPortConnector.h:54
DataPortStatus disconnect() override=0
接続解除関数
virtual BufferStatus write(ByteData &cdr)
CdrBufferBase * getBuffer() override
Buffer を取得する
std::string m_marshaling_type
シリアライザの名前
Definition: InPortConnector.h:448
virtual void unsubscribeInterface(const coil::Properties &prop)
コンシューマのインターフェースの登録を取り消す
bool setOutPort(OutPortBase *directOutPort)
データをダイレクトに書き込むためのOutPortのサーバントを設定する
const char * id() override
Connector ID 取得
const ConnectorInfo & profile() override
ConnectorInfo 取得
ByteDataStreamBase * m_cdr
シリアライザへの参照
Definition: InPortConnector.h:457
bool m_littleEndian
接続エンディアン
Definition: InPortConnector.h:423
Logger rtclog
ロガーストリーム
Definition: InPortConnector.h:391
ConnectorInfo m_profile
ConnectorInfo
Definition: InPortConnector.h:399
const char * name() override
Connector 名取得
bool getDirectData(DataType &data)
ダイレクト接続時に変数渡しでデータを取得する
Definition: InPortConnector.h:321
ConnectorListenersBase * m_listeners
ConnectorListenrs への参照
Definition: InPortConnector.h:407
PortBase * m_directOutPort
同一プロセス上のピアOutPortのポインタ
Definition: InPortConnector.h:439
virtual bool isLittleEndian()
endian 設定を返す
virtual void setEndian(bool endian_type)
endianタイプ設定
DataPortStatus read(DataType &data)
データ型の変換テンプレート
Definition: InPortConnector.h:221
virtual DataPortStatus read(ByteDataStreamBase *data)=0
read 関数
ConnectorListenersBase * m_outPortListeners
OutPort 側の ConnectorListenrs への参照
Definition: InPortConnector.h:431
~InPortConnector() override
デストラクタ
InPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners, CdrBufferBase *buffer)
コンストラクタ
CdrBufferBase * m_buffer
Connector が保持している Buffer
Definition: InPortConnector.h:415
Logger クラス
Definition: SystemLogger.h:101
OutPort 基底クラス
Definition: OutPortBase.h:229
Port の基底クラス
Definition: PortBase.h:132
virtual DirectPortBase * getDirectPort()
direct通信用ポートオブジェクト取得
RTコンポーネント
DataPortStatus
Definition: DataPortStatus.h:114
coil::Properties Properties
Definition: RTC.h:72
BufferStatus
BufferStatus リターンコード
Definition: BufferStatus.h:57