Skip to main content

AVxcelerate Simulation Framework 2025 R1

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 SetUpCommunication() final;
116 
121  void Step() final;
122 
126  void Shutdown() final;
127 
131  time::Timestamp GetCurrentTimestamp() const final;
132 
136  std::chrono::milliseconds GetCycleTime() const final;
137 
141  std::string GetSimulationOutputDirectory() const final;
142 
146  std::vector<File> GetInputFiles() const final;
147 
148  protected:
152  virtual void Init() {}
153 
157  virtual void ExecuteStep() = 0;
158 
162  virtual void AddPublisherAndSubscriber() = 0;
163 
169  template <typename Topic>
170  void AddPublisher(const core::TopicId& topic_id, typename Topic::PublisherCallback callback);
171 
177  template <typename Topic>
178  void AddSubscriber(const core::TopicId& topic_id, typename Topic::SubscriberMessageCallback callback);
179 
180  private:
185  bool WaitForPubSubConnection() override final;
186 
187  std::string name_;
188  std::shared_ptr<CommunicationManager> communication_manager_ptr_;
189  std::unique_ptr<scheduling::ISchedulerClient> scheduler_client_ptr_;
190  std::chrono::milliseconds timeout_;
191 };
192 
193 } // namespace lifecycle
194 } // namespace core
195 } // namespace simulation_framework

Connect with Ansys