OpenRTM  1.0.0
PublisherPeriodic.h
[詳解]
1 // -*- C++ -*-
20 #ifndef RTC_PUBLISHERPERIODIC_H
21 #define RTC_PUBLISHERPERIODIC_H
22 
23 #include <coil/Task.h>
24 #include <coil/Mutex.h>
25 #include <coil/Condition.h>
26 #include <coil/PeriodicTask.h>
27 
28 #include <rtm/RTC.h>
29 #include <rtm/PublisherBase.h>
30 #include <rtm/CdrBufferBase.h>
31 #include <rtm/SystemLogger.h>
32 #include <rtm/ConnectorBase.h>
33 #include <rtm/ConnectorListener.h>
34 
35 namespace coil
36 {
37  class Properties;
38 };
39 
40 namespace RTC
41 {
42  class InPortConsumer;
65  : public PublisherBase
66  {
67  public:
68  typedef coil::Mutex Mutex;
72 
82  PublisherPeriodic(void);
83 
97  virtual ~PublisherPeriodic(void);
98 
160  virtual ReturnCode init(coil::Properties& prop);
161 
187  virtual ReturnCode setConsumer(InPortConsumer* consumer);
188 
214  virtual ReturnCode setBuffer(CdrBufferBase* buffer);
215 
249  virtual ReturnCode setListener(ConnectorInfo& info,
250  ConnectorListeners* listeners);
326  virtual ReturnCode write(const cdrMemoryStream& data,
327  unsigned long sec,
328  unsigned long usec);
356  virtual bool isActive();
357 
383  virtual ReturnCode activate();
384 
410  virtual ReturnCode deactivate();
411 
425  virtual int svc(void);
426 
427  protected:
428  enum Policy
429  {
434  };
435 
443  void setPushPolicy(const coil::Properties& prop);
444 
452  bool createTask(const coil::Properties& prop);
453 
457  ReturnCode pushAll();
458 
462  ReturnCode pushFifo();
463 
467  ReturnCode pushSkip();
468 
472  ReturnCode pushNew();
473 
529  ReturnCode convertReturn(BufferStatus::Enum status,
530  const cdrMemoryStream& data);
531 
532 
550  ReturnCode invokeListener(DataPortStatus::Enum status,
551  const cdrMemoryStream& data);
552 
562  inline void onBufferWrite(const cdrMemoryStream& data)
563  {
564  m_listeners->
565  connectorData_[ON_BUFFER_WRITE].notify(m_profile, data);
566  }
567 
577  inline void onBufferFull(const cdrMemoryStream& data)
578  {
579  m_listeners->
580  connectorData_[ON_BUFFER_FULL].notify(m_profile, data);
581  }
582 
592  inline void onBufferWriteTimeout(const cdrMemoryStream& data)
593  {
594  m_listeners->
595  connectorData_[ON_BUFFER_WRITE_TIMEOUT].notify(m_profile, data);
596  }
597 
607  inline void onBufferRead(const cdrMemoryStream& data)
608  {
609  m_listeners->
610  connectorData_[ON_BUFFER_READ].notify(m_profile, data);
611  }
612 
622  inline void onSend(const cdrMemoryStream& data)
623  {
624  m_listeners->
625  connectorData_[ON_SEND].notify(m_profile, data);
626  }
627 
637  inline void onReceived(const cdrMemoryStream& data)
638  {
639  m_listeners->
640  connectorData_[ON_RECEIVED].notify(m_profile, data);
641  }
642 
652  inline void onReceiverFull(const cdrMemoryStream& data)
653  {
654  m_listeners->
655  connectorData_[ON_RECEIVER_FULL].notify(m_profile, data);
656  }
657 
667  inline void onReceiverTimeout(const cdrMemoryStream& data)
668  {
669  m_listeners->
670  connectorData_[ON_RECEIVER_TIMEOUT].notify(m_profile, data);
671  }
672 
682  inline void onReceiverError(const cdrMemoryStream& data)
683  {
684  m_listeners->
685  connectorData_[ON_RECEIVER_ERROR].notify(m_profile, data);
686  }
687 
695  inline void onBufferEmpty()
696  {
697  m_listeners->
698  connector_[ON_BUFFER_EMPTY].notify(m_profile);
699  }
700 
708  inline void onSenderEmpty()
709  {
710  m_listeners->
711  connector_[ON_SENDER_EMPTY].notify(m_profile);
712  }
713 
721  inline void onSenderError()
722  {
723  m_listeners->
724  connector_[ON_SENDER_ERROR].notify(m_profile);
725  }
726 
727 
728  private:
729  bool bufferIsEmpty()
730  {
731  if (m_buffer->empty() && !m_readback)
732  {
733  RTC_DEBUG(("buffer empty"));
734  onBufferEmpty();
735  onSenderEmpty();
736  return true;
737  }
738  return false;
739  }
740 
741  Logger rtclog;
742  InPortConsumer* m_consumer;
743  CdrBufferBase* m_buffer;
744  ConnectorInfo m_profile;
745  coil::PeriodicTaskBase* m_task;
746  ConnectorListeners* m_listeners;
747  ReturnCode m_retcode;
748  Mutex m_retmutex;
749  Policy m_pushPolicy;
750  int m_skipn;
751  bool m_active;
752  bool m_readback;
753  int m_leftskip;
754  };
755 }; // namespace RTC
756 
757 extern "C"
758 {
760 };
761 
762 #endif // RTC_PUBLISHERPERIODIC_H
763 
Definition: ConnectorListener.h:402
ConnectorListeners クラス
Definition: ConnectorListener.h:813
InPortConsumer 抽象クラス
Definition: InPortConsumer.h:76
void onBufferWriteTimeout(const cdrMemoryStream &data)
ON_BUFFER_WRITE_TIMEOUTのリスナへ通知する。
Definition: PublisherPeriodic.h:592
BufferBase< cdrMemoryStream > CdrBufferBase
Definition: CdrBufferBase.h:30
Definition: ConnectorListener.h:76
#define DATAPORTSTATUS_ENUM
RTC::DataPortStatus 導入
Definition: DataPortStatus.h:233
PeriodicTask class.
ReturnCode invokeListener(DataPortStatus::Enum status, const cdrMemoryStream &data)
DataPortStatusに従ってリスナへ通知する関数を呼び出す。
virtual ReturnCode write(const cdrMemoryStream &data, unsigned long sec, unsigned long usec)
データを書き込む
Mutex クラス
Definition: Mutex.h:40
RT component logger class.
Definition: ConnectorListener.h:75
ConnectorInfo クラス
Definition: ConnectorBase.h:43
void onReceiverTimeout(const cdrMemoryStream &data)
ON_RECEIVER_TIMEOUTのリスナへ通知する。
Definition: PublisherPeriodic.h:667
void onReceiverError(const cdrMemoryStream &data)
ON_RECEIVER_ERRORのリスナへ通知する。
Definition: PublisherPeriodic.h:682
void onSenderError()
ON_SENDER_ERRORのリスナへ通知する。
Definition: PublisherPeriodic.h:721
Definition: ConnectorListener.h:69
void onBufferWrite(const cdrMemoryStream &data)
ON_BUFFER_WRITEのリスナへ通知する。
Definition: PublisherPeriodic.h:562
Definition: PublisherPeriodic.h:433
virtual ReturnCode deactivate()
非アクティブ化する
Enum
BufferStatus リターンコード
Definition: BufferStatus.h:84
Definition: PublisherPeriodic.h:430
void onBufferRead(const cdrMemoryStream &data)
ON_BUFFER_READのリスナへ通知する。
Definition: PublisherPeriodic.h:607
void setPushPolicy(const coil::Properties &prop)
PushPolicy の設定
Definition: ConnectorListener.h:404
virtual ~PublisherPeriodic(void)
デストラクタ
Definition: ConnectorListener.h:74
void onReceiverFull(const cdrMemoryStream &data)
ON_RECEIVER_FULLのリスナへ通知する。
Definition: PublisherPeriodic.h:652
Connector base class.
#define RTC_DEBUG(fmt)
デバッグログ出力マクロ。
Definition: SystemLogger.h:488
ReturnCode convertReturn(BufferStatus::Enum status, const cdrMemoryStream &data)
BufferStatus から DataPortStatus への変換
coil::Properties Properties
Definition: RTC.h:83
ReturnCode pushNew()
push "new" policy
void onSenderEmpty()
ON_SENDER_EMPTYのリスナへ通知する。
Definition: PublisherPeriodic.h:708
ReturnCode pushAll()
push "all" policy
virtual ReturnCode setConsumer(InPortConsumer *consumer)
InPortコンシューマのセット
Definition: PublisherPeriodic.h:432
Definition: ConnectorListener.h:71
PublisherPeriodic クラス
Definition: PublisherPeriodic.h:64
coil::Guard< coil::Mutex > Guard
Definition: PublisherPeriodic.h:70
Definition: ConnectorListener.h:70
virtual ReturnCode setListener(ConnectorInfo &info, ConnectorListeners *listeners)
リスナを設定する。
Definition: ConnectorListener.h:73
PeriodicTaskBase クラス
Definition: PeriodicTaskBase.h:193
void onReceived(const cdrMemoryStream &data)
ON_RECEIVEDのリスナへ通知する。
Definition: PublisherPeriodic.h:637
Publisher base class.
void onBufferFull(const cdrMemoryStream &data)
ON_BUFFER_FULLリスナへイベントを通知する。
Definition: PublisherPeriodic.h:577
Definition: PublisherPeriodic.h:431
プロパティセットを表現するクラス
Definition: Properties.h:101
DATAPORTSTATUS_ENUM PublisherPeriodic(void)
コンストラクタ
Definition: ConnectorListener.h:78
void DLL_EXPORT PublisherPeriodicInit()
ReturnCode pushSkip()
push "skip" policy
Definition: ConnectorListener.h:400
Policy
Definition: PublisherPeriodic.h:428
Publisher 基底クラス
Definition: PublisherBase.h:63
bool createTask(const coil::Properties &prop)
Task の設定
ReturnCode pushFifo()
push "fifo" policy
virtual int svc(void)
スレッド実行関数
virtual ReturnCode activate()
アクティブ化する
coil::Mutex Mutex
Definition: PublisherPeriodic.h:68
RTComponent header.
void onBufferEmpty()
ON_BUFFER_EMPTYのリスナへ通知する。
Definition: PublisherPeriodic.h:695
virtual ReturnCode init(coil::Properties &prop)
初期化
virtual bool isActive()
アクティブ化確認
BufferBase 抽象クラス
Definition: BufferBase.h:104
#define DLL_EXPORT
Definition: RTC.h:73
connector listener class
virtual ReturnCode setBuffer(CdrBufferBase *buffer)
バッファのセット
Enum
Definition: DataPortStatus.h:143
virtual bool empty(void) const =0
バッファemptyチェック
coil::Condition< Mutex > Condition
Definition: PublisherPeriodic.h:69
void onSend(const cdrMemoryStream &data)
ON_SENDのリスナへ通知する。
Definition: PublisherPeriodic.h:622
Definition: ConnectorListener.h:77