File base_activity.h
Last update: 22.04.2026Location: core/lifecycle/activity/base_activity.h
Classes
Namespaces
Includes
- core/communication/i_topic.h
- core/communication/topic_registry.h
- core/export/simfwk_core_export.h
- core/lifecycle/activity/i_activity.h
- core/scheduler/i_scheduler_client/i_scheduler_client.h
Included by
Source
#ifndef SIMFWK_CORE_LIFECYCLE_ACTIVITY_BASEACTIVITY_H
#define SIMFWK_CORE_LIFECYCLE_ACTIVITY_BASEACTIVITY_H
#include "core/communication/i_topic.h"
#include "core/communication/topic_registry.h"
#include "core/export/simfwk_core_export.h"
#include "core/lifecycle/activity/i_activity.h"
#include "core/scheduler/i_scheduler_client/i_scheduler_client.h"
namespace simulation_framework
{
namespace core
{
class CommunicationManager;
namespace lifecycle
{
// clang-format off
// clang-format on
class SIMFWK_CORE_API BaseActivity : public IActivity
{
public:
BaseActivity(const std::string& activity_name,
std::shared_ptr<core::CommunicationManager> communication_manager_ptr,
std::unique_ptr<scheduling::ISchedulerClient> scheduler_client);
BaseActivity(const std::string& activity_name,
std::shared_ptr<core::CommunicationManager> communication_manager_ptr,
std::unique_ptr<scheduling::ISchedulerClient> scheduler_client,
std::chrono::milliseconds timeout);
BaseActivity(const std::string& activity_name, const Topics& topics);
BaseActivity(const std::string& activity_name, const Topics& topics, std::chrono::milliseconds timeout);
virtual ~BaseActivity();
std::string GetName() const override;
void SetUpCommunication() final;
void Step() final;
void Shutdown() final;
time::Timestamp GetCurrentTimestamp() const final;
std::chrono::milliseconds GetCycleTime() const final;
std::string GetSimulationOutputDirectory() const final;
const SimulationParameters::CustomizedParameters& GetCustomizedParameters() const final;
void SetSimulationSettings(const scheduling::SimulationSettings& sim_settings) final;
protected:
void Init() override {}
void Finalize() override {}
virtual void ExecuteStep() = 0;
virtual void AddPublisherAndSubscriber() = 0;
template <typename Topic>
void AddPublisher(const core::TopicId& topic_id, typename Topic::PublisherCallback callback);
template <typename Topic>
void AddSubscriber(const core::TopicId& topic_id, typename Topic::SubscriberMessageCallback callback);
private:
void WaitForPubSubConnection() override;
std::string name_;
std::shared_ptr<core::CommunicationManager> communication_manager_ptr_;
std::unique_ptr<scheduling::ISchedulerClient> scheduler_client_ptr_;
std::chrono::milliseconds timeout_;
bool is_init_step_finished_{false};
};
} // namespace lifecycle
} // namespace core
} // namespace simulation_framework
#endif // SIMFWK_CORE_LIFECYCLE_ACTIVITY_BASEACTIVITY_H