OpenRTM-aist  2.1.0
PublisherNew.h
[詳解]
1 // -*- C++ -*-
20 #ifndef RTC_PUBLISHERNEW_H
21 #define RTC_PUBLISHERNEW_H
22 
23 #include <coil/Task.h>
24 #include <condition_variable>
25 #include <coil/PeriodicTask.h>
26 
27 #include <rtm/RTC.h>
28 #include <rtm/PublisherBase.h>
29 #include <rtm/CdrBufferBase.h>
30 #include <rtm/DataPortStatus.h>
31 #include <rtm/SystemLogger.h>
32 #include <rtm/ConnectorBase.h>
33 #include <rtm/ConnectorListener.h>
34 #include <rtm/ByteData.h>
35 
36 namespace coil
37 {
38  class Properties;
39 } // namespace coil
40 
41 namespace RTC
42 {
43  class InPortConsumer;
44 
70  : public PublisherBase
71  {
72  public:
73 
88 
102  ~PublisherNew() override;
103 
156 
183 
210 
245  ConnectorListenersBase* listeners) override;
246 
321  std::chrono::nanoseconds timeout) override;
322 
350  bool isActive() override;
351 
378 
405 
419  virtual int svc();
420 
421  protected:
422  enum Policy
423  {
428  };
429 
430 
438  void setPushPolicy(const coil::Properties& prop);
439 
447  bool createTask(const coil::Properties& prop);
448 
453 
458 
463 
468 
525  ByteData& data);
526 
545  ByteData& data);
546 
556  inline void onBufferWrite(ByteData& data)
557  {
558  m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_WRITE, m_profile, data);
559  }
560 
570  inline void onBufferFull(ByteData& data)
571  {
572  m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_FULL, m_profile, data);
573  }
574 
584  inline void onBufferWriteTimeout(ByteData& data)
585  {
586  m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_WRITE_TIMEOUT, m_profile, data);
587  }
588 
598  inline void onBufferWriteOverwrite(ByteData& data)
599  {
600  m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_OVERWRITE, m_profile, data);
601  }
602 
612  inline void onBufferRead(ByteData& data)
613  {
614  m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_READ, m_profile, data);
615  }
616 
626  inline void onSend(ByteData& data)
627  {
628  m_listeners->notifyOut(ConnectorDataListenerType::ON_SEND, m_profile, data);
629  }
630 
640  inline void onReceived(ByteData& data)
641  {
642  m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVED, m_profile, data);
643  }
644 
654  inline void onReceiverFull(ByteData& data)
655  {
656  m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_FULL, m_profile, data);
657  }
658 
668  inline void onReceiverTimeout(ByteData& data)
669  {
670  m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_TIMEOUT, m_profile, data);
671  }
672 
682  inline void onReceiverError(ByteData& data)
683  {
684  m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_ERROR, m_profile, data);
685  }
686 
696  inline void onSenderError()
697  {
698  m_listeners->notify(ConnectorListenerType::ON_SENDER_ERROR, m_profile);
699  }
700 
701 
702  private:
703  Logger rtclog{"PublisherNew"};
704  InPortConsumer* m_consumer{nullptr};
705  CdrBufferBase* m_buffer{nullptr};
706  ConnectorInfo m_profile;
707  coil::PeriodicTaskBase* m_task{nullptr};
708  ConnectorListenersBase* m_listeners{nullptr};
710  std::mutex m_retmutex;
711  Policy m_pushPolicy{PUBLISHER_POLICY_NEW};
712  int m_skipn{0};
713  bool m_active{false};
714  int m_leftskip{0};
715  ByteData m_data;
716  };
717 } // namespace RTC
718 
719 extern "C"
720 {
722 }
723 
724 #endif // RTC_PUBLISHERNEW_H
725 
Connector base class
connector listener class
DataPortStatus class
Publisher base class
void PublisherNewInit()
RTComponent header
RT component logger class
BufferBase 抽象クラス
Definition: BufferBase.h:106
シリアライザの基底クラス
Definition: ByteDataStreamBase.h:63
シリアライズ後のバイト列を操作するクラス
Definition: ByteData.h:30
ConnectorInfo クラス
Definition: ConnectorBase.h:50
Definition: ConnectorListener.h:1354
virtual ::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
リスナーへ通知する
virtual ::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
InPortConsumer 抽象クラス
Definition: InPortConsumer.h:78
Logger クラス
Definition: SystemLogger.h:101
Publisher 基底クラス
Definition: PublisherBase.h:66
PublisherNew クラス
Definition: PublisherNew.h:71
DataPortStatus setListener(ConnectorInfo &info, ConnectorListenersBase *listeners) override
リスナを設定する。
DataPortStatus setBuffer(CdrBufferBase *buffer) override
バッファのセット
DataPortStatus init(coil::Properties &prop) override
初期化
DataPortStatus write(ByteDataStreamBase *data, std::chrono::nanoseconds timeout) override
データを書き込む
void onReceiverFull(ByteData &data)
ON_RECEIVER_FULLのリスナへ通知する。
Definition: PublisherNew.h:654
DataPortStatus convertReturn(BufferStatus status, ByteData &data)
BufferStatus から DataPortStatus への変換
DataPortStatus pushAll()
push "all" policy
DataPortStatus pushNew()
push "new" policy
Policy
Definition: PublisherNew.h:423
@ PUBLISHER_POLICY_FIFO
Definition: PublisherNew.h:425
@ PUBLISHER_POLICY_SKIP
Definition: PublisherNew.h:426
@ PUBLISHER_POLICY_ALL
Definition: PublisherNew.h:424
@ PUBLISHER_POLICY_NEW
Definition: PublisherNew.h:427
~PublisherNew() override
デストラクタ
void setPushPolicy(const coil::Properties &prop)
PushPolicy の設定
bool isActive() override
アクティブ化確認
void onBufferWrite(ByteData &data)
ON_BUFFER_WRITEのリスナへ通知する。
Definition: PublisherNew.h:556
DataPortStatus setConsumer(InPortConsumer *consumer) override
InPortコンシューマのセット
void onBufferFull(ByteData &data)
ON_BUFFER_FULLリスナへイベントを通知する。
Definition: PublisherNew.h:570
void onSenderError()
ON_SENDER_ERRORのリスナへ通知する。
Definition: PublisherNew.h:696
void onReceived(ByteData &data)
ON_RECEIVEDのリスナへ通知する。
Definition: PublisherNew.h:640
DataPortStatus invokeListener(DataPortStatus status, ByteData &data)
DataPortStatusに従ってリスナへ通知する関数を呼び出す。
DataPortStatus deactivate() override
非アクティブ化する
void onReceiverError(ByteData &data)
ON_RECEIVER_ERRORのリスナへ通知する。
Definition: PublisherNew.h:682
void onReceiverTimeout(ByteData &data)
ON_RECEIVER_TIMEOUTのリスナへ通知する。
Definition: PublisherNew.h:668
DataPortStatus activate() override
アクティブ化する
void onSend(ByteData &data)
ON_SENDのリスナへ通知する。
Definition: PublisherNew.h:626
DataPortStatus pushSkip()
push "skip" policy
void onBufferWriteTimeout(ByteData &data)
ON_BUFFER_WRITE_TIMEOUTのリスナへ通知する。
Definition: PublisherNew.h:584
void onBufferRead(ByteData &data)
ON_BUFFER_READのリスナへ通知する。
Definition: PublisherNew.h:612
void onBufferWriteOverwrite(ByteData &data)
ON_BUFFER_OVERWRITEのリスナへ通知する。
Definition: PublisherNew.h:598
bool createTask(const coil::Properties &prop)
Task の設定
DataPortStatus pushFifo()
push "fifo" policy
virtual int svc()
スレッド実行関数
PublisherNew()
コンストラクタ
RTコンポーネント
BufferBase< ByteData > CdrBufferBase
Definition: CdrBufferBase.h:31
DataPortStatus
Definition: DataPortStatus.h:114
coil::Properties Properties
Definition: RTC.h:72
BufferStatus
BufferStatus リターンコード
Definition: BufferStatus.h:57
Definition: DefaultPeriodicTask.h:24