OpenRTM-aist 2.0.2
読み取り中…
検索中…
一致する文字列を見つけられません
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>
27#include <rtm/PortBase.h>
29#include <rtm/ByteData.h>
30
31
32
33namespace RTC
34{
35 class InPortBase;
57 : public ConnectorBase
58 {
59 public:
60
69
91 const ConnectorInfo& profile() override;
92
106 const char* id() override;
107
121 const char* name() override;
122
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 {
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
const char * name() override
Connector 名取得
bool m_littleEndian
接続エンディアン
Definition OutPortConnector.h:337
virtual bool isLittleEndian()
endian 設定を返す
const char * id() override
Connector ID 取得
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()
ダイレクト接続モードかの判定
const ConnectorInfo & profile() override
Profile 取得
virtual void setPullDirectMode()
ダイレクト接続モードに設定
~OutPortConnector() override
デストラクタ
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
OutPortConnector(ConnectorInfo &info, ConnectorListenersBase *listeners)
コンストラクタ
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
CdrBufferBase * getBuffer() override=0
Buffer を取得する
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