ModuleBase
Interface Overview
The ModuleBase type is a base class for modules. Developers can inherit from ModuleBase to implement their own Module. It defines several interfaces that business modules need to implement:
namespace aimrt {
class ModuleBase {
public:
virtual ModuleInfo Info() const = 0;
virtual bool Initialize(CoreRef core) = 0;
virtual bool Start() = 0;
virtual void Shutdown() = 0;
};
} // namespace aimrt
The aimrt::ModuleInfo structure is declared as follows:
namespace aimrt {
struct ModuleInfo {
std::string_view name; // Require
uint32_t major_version = 0;
uint32_t minor_version = 0;
uint32_t patch_version = 0;
uint32_t build_version = 0;
std::string_view author;
std::string_view description;
};
} // namespace aimrt
Regarding these virtual interfaces, the descriptions are as follows:
ModuleInfo Info(): Used by AimRT to obtain module information, including module name, module version, etc.;AimRT calls the
Infointerface when loading the module to read module information;In the
ModuleInfostructure, except fornamewhich is required, the rest are optional;If the module throws an exception in this interface, it is equivalent to returning an empty ModuleInfo;
bool Initialize(CoreRef): Used to initialize the module;During the Initialize phase, AimRT calls the
Initializemethod of each module in sequence;AimRT calls the module’s
Initializemethod in the main thread, and the module should not block theInitializemethod for too long;When AimRT calls the module’s
Initializemethod, it passes in a CoreRef handle. The module can store this handle and use it to call framework functions later;Before AimRT calls the module’s
Initializemethod, all components (such as configuration, logging, etc.) have completed Initialize but have not yet started;If the module throws an exception in the
Initializemethod, it is equivalent to returning false;If any module returns false when AimRT calls its
Initializemethod, the entire AimRT will fail to Initialize and exit;
bool Start(): Used to start the module;During the Start phase, AimRT calls the
Startmethod of each module in sequence;AimRT calls the module’s
Startmethod in the main thread, and the module should not block theStartmethod for too long;Before AimRT calls the module’s
Startmethod, all components (such as configuration, logging, etc.) have entered the Start phase;If the module throws an exception in the
Startmethod, it is equivalent to returning false;If any module returns false when AimRT calls its
Startmethod, the entire AimRT will fail to Start and exit;
void Shutdown(): Used to stop the module, generally for graceful exit of the entire process;During the Shutdown phase, AimRT calls the
Shutdownmethod of each module in sequence;AimRT calls the module’s
Shutdownmethod in the main thread, and the module should not block theShutdownmethod for too long;AimRT may enter the Shutdown phase directly at any stage;
If the module throws an exception in the
Shutdownmethod, AimRT will catch it and return directly;After AimRT calls the module’s
Shutdownmethod, various components (such as configuration, logging, etc.) will then Shutdown;
Usage Example
Below is a simple example implementing a basic HelloWorld module:
#include "aimrt_module_cpp_interface/module_base.h"
class HelloWorldModule : public aimrt::ModuleBase {
public:
HelloWorldModule() = default;
~HelloWorldModule() override = default;
ModuleInfo Info() const override {
return ModuleInfo{.name = "HelloWorldModule"};
}
bool Initialize(aimrt::CoreRef core) override { return true; }
bool Start() override { return true; }
void Shutdown() override {}
};