2 Commits
Author SHA1 Message Date
Samsonium e756bb1d73 feat: implement module access in engine API
- Add implementation for `getModule`
- Add implementation for `getLoadedModules`
2026-09-29 13:25:49 +03:00
Samsonium ff0453e81d feat: add event bus to engine public API 2026-09-29 13:10:54 +03:00
3 changed files with 42 additions and 9 deletions
+4 -2
View File
@@ -13,6 +13,7 @@ class MscEngine : public IMscEngineModuleAPI
private: private:
/// Loaded modules list /// Loaded modules list
std::vector<std::shared_ptr<MscEngineModule>> _modules; std::vector<std::shared_ptr<MscEngineModule>> _modules;
MscEventBus _bus;
public: public:
/// Actual version /// Actual version
@@ -20,8 +21,9 @@ public:
MscEngine(std::vector<std::shared_ptr<MscEngineModule>> modules); MscEngine(std::vector<std::shared_ptr<MscEngineModule>> modules);
UNIMPL getBus() const override; MscEventBus &getBus() override;
UNIMPL getLoadedModules() const override; std::unordered_map<std::string, std::uint16_t> getLoadedModules() const override;
MscEngineModule &getModule(const std::string &name) override;
}; };
#endif // __MCS_ENGINE_HPP__ #endif // __MCS_ENGINE_HPP__
+10 -3
View File
@@ -1,7 +1,11 @@
#ifndef __MSC_ENGINE_MODULE_API_HPP__ #ifndef __MSC_ENGINE_MODULE_API_HPP__
#define __MSC_ENGINE_MODULE_API_HPP__ #define __MSC_ENGINE_MODULE_API_HPP__
typedef void UNIMPL; #include <engine/core/engine_bus.hpp>
#include <engine/core/engine_module.hpp>
#include <cstdint>
#include <string>
#include <unordered_map>
class IMscEngineModuleAPI class IMscEngineModuleAPI
{ {
@@ -9,10 +13,13 @@ public:
virtual ~IMscEngineModuleAPI() = default; virtual ~IMscEngineModuleAPI() = default;
/// Get access to engine event bus /// Get access to engine event bus
virtual UNIMPL getBus() const = 0; virtual MscEventBus &getBus() = 0;
/// Get access to loaded module list /// Get access to loaded module list
virtual UNIMPL getLoadedModules() const = 0; virtual std::unordered_map<std::string, std::uint16_t> getLoadedModules() const = 0;
/// Access module by its name
virtual MscEngineModule &getModule(const std::string &name) = 0;
}; };
#endif // __MSC_ENGINE_MODULE_API_HPP__ #endif // __MSC_ENGINE_MODULE_API_HPP__
+28 -4
View File
@@ -54,9 +54,33 @@ MscEngine::MscEngine(std::vector<std::shared_ptr<MscEngineModule>> modules)
_modules = std::move(modules); _modules = std::move(modules);
} }
UNIMPL MscEngine::getBus() const { throw std::runtime_error("Unimplemented"); } MscEventBus &MscEngine::getBus()
UNIMPL MscEngine::getLoadedModules() const
{ {
throw std::runtime_error("Unimplemented"); return _bus;
}
std::unordered_map<std::string, std::uint16_t> MscEngine::getLoadedModules() const
{
std::unordered_map<std::string, std::uint16_t> result;
for (const auto &module : _modules)
{
if (!module)
continue;
auto mod = module.get();
result[mod->getName()] = mod->getRev();
}
return result;
}
MscEngineModule &MscEngine::getModule(const std::string &name)
{
for (auto &module : _modules)
{
if (module.get()->getName() == name)
return *module.get();
}
throw std::runtime_error("Module not found: " + name);
} }