Skip to main content

AVxcelerate Simulation Framework 2024 R2 SP02

base_activity

Last update: 16.07.2025
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 
126  time::Timestamp GetCurrentTimestamp() const final;
127 
128  protected:
132  virtual void ExecuteStep() = 0;
133 
137  virtual void AddPublisherAndSubscriber() = 0;
138 
144  template <typename Topic>
145  void AddPublisher(const core::TopicId& topic_id, typename Topic::PublisherCallback callback);
146 
152  template <typename Topic>
153  void AddSubscriber(const core::TopicId& topic_id, typename Topic::SubscriberMessageCallback callback);
154 
159  void Shutdown() override final;
160 
161  private:
166  bool WaitForPubSubConnection() override final;
167 
168  std::string name_;
169  std::shared_ptr<CommunicationManager> communication_manager_ptr_;
170  std::unique_ptr<scheduling::ISchedulerClient> scheduler_client_ptr_;
171  std::chrono::milliseconds timeout_;
172 };
173 
174 } // namespace lifecycle
175 } // namespace core
176 } // namespace simulation_framework

Connect with Ansys