Skip to main content

AVxcelerate Simulation Framework 2024 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 using CommunicationManagerPtr = std::shared_ptr<CommunicationManager>;
29 
35 namespace lifecycle
36 {
84 class BaseActivity : public IActivity
85 {
86  public:
92  BaseActivity(const std::string& activity_name, const Topics& topics);
93 
100  BaseActivity(const std::string& activity_name, const Topics& topics, std::chrono::milliseconds timeout);
101 
105  virtual ~BaseActivity();
106 
110  std::string GetName() const override;
111 
116  void Init() final;
117 
122  void Step() final;
123 
124  protected:
128  virtual void ExecuteStep() = 0;
129 
133  virtual void AddPublisherAndSubscriber() = 0;
134 
140  template <typename Topic>
141  void AddPublisher(const core::TopicId& topic_id, typename Topic::PublisherCallback callback);
142 
148  template <typename Topic>
149  void AddSubscriber(const core::TopicId& topic_id, typename Topic::SubscriberMessageCallback callback);
150 
155  void Shutdown() override final;
156 
157  private:
162  bool WaitForPubSubConnection() override final;
163 
164  std::string name_;
165  CommunicationManagerPtr communication_manager_ptr_;
166  scheduling::ISchedulerClientPtr scheduler_client_ptr_;
167  std::chrono::milliseconds timeout_;
168 };
169 
170 } // namespace lifecycle
171 } // namespace core
172 } // namespace simulation_framework

Connect with Ansys