Base implementation #1

Merged
Dmitriy merged 9 commits from base-impl into master 2026-09-29 14:25:08 +00:00
Owner

Реализовано:

  • Тестирование
  • Базовый класс движка
  • Абстрактный класс модулей
  • Событийная шина
  • Публичный API движка для модулей
Реализовано: - Тестирование - Базовый класс движка - Абстрактный класс модулей - Событийная шина - Публичный API движка для модулей
samsonium added 9 commits 2026-09-29 12:20:56 +00:00
- Make `.subscribeOnce` return listener id
- Make `.cancel` and `.isCanceled` methods in `MscEvent` implemented
- Add implementation for `getModule`
- Add implementation for `getLoadedModules`
Dmitriy was assigned by samsonium 2026-09-29 12:33:49 +00:00
@@ -0,0 +56,4 @@
/// @brief Subscribe to specified event and execute once on publish
/// @param name event name
/// @param listener event handler
SubscriptionId subscribeOnce(const std::string &name, Listener listener);
Collaborator

воняет писями. где subcribe1 subcribe2 subcribe3 subcribeFinal subcribeFinalFinal??

воняет писями. где subcribe1 subcribe2 subcribe3 subcribeFinal subcribeFinalFinal??
Author
Owner

Так это частая модель у событийных шин: есть простая подписка на событие, а есть единоразовое выполнение, чтобы обработчику самому не нужно было отписываться

Так это частая модель у событийных шин: есть простая подписка на событие, а есть единоразовое выполнение, чтобы обработчику самому не нужно было отписываться
@@ -0,0 +5,4 @@
{
}
MscEngineDBProvider::MscEngineDBProvider(const std::string &filepath)
Collaborator

только sqlLite? типа провайдер получает путь к файлу

только sqlLite? типа провайдер получает путь к файлу
Author
Owner

Тут прикол в том, что SQLite - единственный способ хранить временные или постоянные данные. Поэтому провайдер тут может знать о SQLite, т.к. это его непосредственная реализация (в плане, что он является обёрткой для драйвера). Ну и варианты тоже хранения тоже объявлены через два раздельных констурктора:

  • без аргументов: in-memory для временных данных
  • с путём файла: персистивное хранение, чтобы после перезапуска данные остались
Тут прикол в том, что SQLite - единственный способ хранить временные или постоянные данные. Поэтому провайдер тут может знать о SQLite, т.к. это его непосредственная реализация (в плане, что он является обёрткой для драйвера). Ну и варианты тоже хранения тоже объявлены через два раздельных констурктора: - без аргументов: in-memory для временных данных - с путём файла: персистивное хранение, чтобы после перезапуска данные остались
@@ -7,2 +13,4 @@
class IMscEngineModuleAPI
{
public:
virtual ~IMscEngineModuleAPI() = default;
Collaborator

не слишком ли много ответственности для этого молодого человека? чет он дохера чего в себе делает и чувствую бесконечность не предел.

не слишком ли много ответственности для этого молодого человека? чет он дохера чего в себе делает и чувствую бесконечность не предел.
Author
Owner

Я вот думаю над тем, как правильнее реализовать. Конкретно этот класс - это интерфейс публичного API от движка к модулям. И пока архитектура у движка такая: движок реализует событийную шину и что-то типа фабрики БД-провайдеров, а всё остальное реализуется только модулями, которые подключаются в движок при его конструкте.

Пока не вижу идеи, как лучше сделать ;(

Я вот думаю над тем, как правильнее реализовать. Конкретно этот класс - это интерфейс публичного API от движка к модулям. И пока архитектура у движка такая: движок реализует событийную шину и что-то типа фабрики БД-провайдеров, а всё остальное реализуется только модулями, которые подключаются в движок при его конструкте. Пока не вижу идеи, как лучше сделать ;(
@@ -23,3 +25,3 @@
/// Module initialization phase
virtual void onInitialize();
virtual void onInitialize(IMscEngineModuleAPI &engine) = 0;
Collaborator

не описан порядок вызова onInitialize

не описан порядок вызова onInitialize
Author
Owner

Да, я равновато onInitialize запихнул, потому что жизненный цикл буду делать в следующей ветке. Пока чисто положил его сюда, чтобы изучить сборку интерфейсов на плюсах))

Да, я равновато `onInitialize` запихнул, потому что жизненный цикл буду делать в следующей ветке. Пока чисто положил его сюда, чтобы изучить сборку интерфейсов на плюсах))
@@ -0,0 +15,4 @@
virtual ~MscEvent() = default;
/// @brief Get event name
virtual std::string getName() const = 0;
Collaborator

Берем по имени листенеры? очепятка и все пошло по пизде

Берем по имени листенеры? очепятка и все пошло по пизде
Author
Owner

В целом, не обязательно писать буквами каждый раз, потому что можно бахнуть enum, который будет хранить строчки и просто использовать варианты enum'а, чтобы подавать

В целом, не обязательно писать буквами каждый раз, потому что можно бахнуть enum, который будет хранить строчки и просто использовать варианты enum'а, чтобы подавать
Dmitriy left a comment
Collaborator

В целом неплохо, но полный жизненный цикл пока не реализован, CMake чисто чтоб заработало.
В остальном есть по коду мелкие замечания, но думаю, это проблемы первой версии реализации.

В целом неплохо, но полный жизненный цикл пока не реализован, CMake чисто чтоб заработало. В остальном есть по коду мелкие замечания, но думаю, это проблемы первой версии реализации.
Dmitriy merged commit a6676997d4 into master 2026-09-29 14:25:08 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: samsonium/Magic-Scrolls#1