OpenRTM-aist  2.1.0
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>
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)
パラノイドログ出力マクロ。
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 serialize(const 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 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接続用InPort基底クラス
Definition: DirectInPortBase.h:48
virtual void write(DataType &data)=0
データの書き込み
virtual bool isNew()=0
最新データが存在するか確認する
InPort 用 Port
Definition: InPortBase.h:70
Logger クラス
Definition: SystemLogger.h:101
OutPortConnector 基底クラス
Definition: OutPortConnector.h:58
bool m_littleEndian
接続エンディアン
Definition: OutPortConnector.h:337
virtual bool isLittleEndian()
endian 設定を返す
bool m_directMode
ダイレクト接続のフラグ Trueでダイレクト接続モード
Definition: OutPortConnector.h:376
virtual BufferStatus read(ByteData &data)
bool setInPort(InPortBase *directInPort)
PortBase * m_directInPort
同一プロセス上のピアInPortのポインタ
Definition: OutPortConnector.h:348
virtual bool pullDirectMode()
ダイレクト接続モードかの判定
virtual void setPullDirectMode()
ダイレクト接続モードに設定
const char * id() override
Connector ID 取得
~OutPortConnector() override
デストラクタ
const char * name() override
Connector 名取得
DataPortStatus disconnect() override=0
接続解除関数
virtual void unsubscribeInterface(const coil::Properties &prop)
コンシューマのインターフェースの登録を取り消す
ConnectorInfo m_profile
Port の PortProfile
Definition: OutPortConnector.h:329
ConnectorListenersBase * m_inPortListeners
InPort 側の ConnectorListenrs への参照
Definition: OutPortConnector.h:366
CdrBufferBase * getBuffer() override=0
Buffer を取得する
OutPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners)
コンストラクタ
const ConnectorInfo & profile() override
Profile 取得
ByteDataStreamBase * m_cdr
Definition: OutPortConnector.h:386
DataPortStatus write(DataType &data)
データ型の変換テンプレート
Definition: OutPortConnector.h:216
Logger rtclog
ロガーストリーム
Definition: OutPortConnector.h:321
virtual void setEndian(bool endian_type)
endianタイプ設定
ConnectorListenersBase * m_listeners
ConnectorListenrs への参照
Definition: OutPortConnector.h:357
virtual DataPortStatus write(ByteDataStreamBase *data)=0
write 関数
std::string m_marshaling_type
シリアライザの名前
Definition: OutPortConnector.h:385
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