Skip to main content

AVxcelerate Simulation Framework 2026 R1 SP01

File base_activity.h

Last update: 22.04.2026

Location: core/lifecycle/activity/base_activity.h

Classes

Namespaces

Includes

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

Connect with Ansys