Skip to main content

AVxcelerate Simulation Framework 2024 R2

base_activity

Last update: 12.07.2024
1 
5 
6 #pragma once
7 
8 #include "core/communication/i_topic.h"
9 #include "core/lifecycle/activity/i_activity.h"
10 #include "core/scheduler/i_scheduler_client/i_scheduler_client.h"
11 
17 namespace simulation_framework
18 {
19 
24 namespace core
25 {
26 
27 class CommunicationManager;
28 
34 namespace lifecycle
35 {
83 class BaseActivity : public IActivity
84 {
85  public:
91  BaseActivity(const std::string& activity_name, const Topics& topics);
92 
99  BaseActivity(const std::string& activity_name, const Topics& topics, std::chrono::milliseconds timeout);
100 
104  virtual ~BaseActivity();
105 
109  std::string GetName() const override;
110 
115  void Init() final;
116 
121  void Step() final;
122 
123  protected:
127  virtual void ExecuteStep() = 0;
128 
132  virtual void AddPublisherAndSubscriber() = 0;
133 
139  template <typename Topic>
140  void AddPublisher(const core::TopicId& topic_id, typename Topic::PublisherCallback callback);
141 
147  template <typename Topic>
148  void AddSubscriber(const core::TopicId& topic_id, typename Topic::SubscriberMessageCallback callback);
149 
154  void Shutdown() override final;
155 
156  private:
161  bool WaitForPubSubConnection() override final;
162 
163  std::string name_;
164  std::shared_ptr<CommunicationManager> communication_manager_ptr_;
165  std::unique_ptr<scheduling::ISchedulerClient> scheduler_client_ptr_;
166  std::chrono::milliseconds timeout_;
167 };
168 
169 } // namespace lifecycle
170 } // namespace core
171 } // namespace simulation_framework

Connect with Ansys