OpenRTM-aist 2.0.2
読み取り中…
検索中…
一致する文字列を見つけられません
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>
34#include <rtm/ByteData.h>
35
36namespace coil
37{
38 class Properties;
39} // namespace coil
40
41namespace RTC
42{
43 class InPortConsumer;
44
70 : public PublisherBase
71 {
72 public:
73
88
102 ~PublisherNew() override;
103
155 DataPortStatus init(coil::Properties& prop) override;
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:
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
585 {
587 }
588
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
719extern "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 notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
リスナーへ通知する(OutPort側) 指定の種類のリスナのコールバックメソッドを呼び出す。 InPortとOutPortでシリアライザの種類が違う場合があるため、 OutPort側ではnotifyOu...
virtual::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
リスナーへ通知する
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
coil::Properties Properties
Definition RTC.h:72
DataPortStatus
Definition DataPortStatus.h:114
BufferStatus
BufferStatus リターンコード
Definition BufferStatus.h:57
Definition DefaultPeriodicTask.h:24