OpenRTM-aist 2.0.2
読み取り中…
検索中…
一致する文字列を見つけられません
InPortConnector.h
[詳解]
1// -*- C++ -*-
20#ifndef RTC_INPORTCONNECTOR_H
21#define RTC_INPORTCONNECTOR_H
22
24#include <rtm/ConnectorBase.h>
26#include <rtm/PortBase.h>
27#include <rtm/ByteData.h>
28
29
30namespace 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
159
178
200
201
220 template<class DataType>
221 DataPortStatus read(DataType& data)
222 {
223 if(m_cdr == nullptr)
224 {
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
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 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...
virtual::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
リスナーへ通知する
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)
std::string m_marshaling_type
シリアライザの名前
Definition InPortConnector.h:448
virtual void unsubscribeInterface(const coil::Properties &prop)
コンシューマのインターフェースの登録を取り消す
bool setOutPort(OutPortBase *directOutPort)
データをダイレクトに書き込むためのOutPortのサーバントを設定する
const char * name() override
Connector 名取得
CdrBufferBase * getBuffer() override
Buffer を取得する
ByteDataStreamBase * m_cdr
シリアライザへの参照
Definition InPortConnector.h:457
bool m_littleEndian
接続エンディアン
Definition InPortConnector.h:423
const char * id() override
Connector ID 取得
Logger rtclog
ロガーストリーム
Definition InPortConnector.h:391
ConnectorInfo m_profile
ConnectorInfo
Definition InPortConnector.h:399
bool getDirectData(DataType &data)
ダイレクト接続時に変数渡しでデータを取得する
Definition InPortConnector.h:321
const ConnectorInfo & profile() override
ConnectorInfo 取得
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コンポーネント
::RTC::ByteDataStreamBase * createSerializer(const std::string &marshalingtype)
GlobalFactoryからシリアライザを生成する
Definition ByteDataStreamBase.h:363
DataPortStatus
Definition DataPortStatus.h:114
BufferStatus
BufferStatus リターンコード
Definition BufferStatus.h:57