Implémentation complète du scénario 11 (IO System Stress Test) avec correction majeure de l'architecture de routing IntraIO. ## Nouveaux Modules de Test (Scenario 11) - ProducerModule: Publie messages pour tests IO - ConsumerModule: Consomme et valide messages reçus - BroadcastModule: Test multi-subscriber broadcasting - BatchModule: Test low-frequency batching - IOStressModule: Tests de charge concurrents ## Test d'Intégration - test_11_io_system.cpp: 6 tests validant: * Basic Publish-Subscribe * Pattern Matching avec wildcards * Multi-Module Routing (1-to-many) * Low-Frequency Subscriptions (batching) * Backpressure & Queue Overflow * Thread Safety (concurrent pub/pull) ## Fix Architecture Critique: IntraIO Routing **Problème**: IntraIO::publish() et subscribe() n'utilisaient PAS IntraIOManager pour router entre modules. **Solution**: Utilisation de JSON comme format de transport intermédiaire - IntraIO::publish() → extrait JSON → IntraIOManager::routeMessage() - IntraIO::subscribe() → enregistre au IntraIOManager::registerSubscription() - IntraIOManager::routeMessage() → copie JSON pour chaque subscriber → deliverMessage() **Bénéfices**: - ✅ Routing centralisé fonctionnel - ✅ Support 1-to-many (copie JSON au lieu de move unique_ptr) - ✅ Pas besoin d'implémenter IDataNode::clone() - ✅ Compatible futur NetworkIO (JSON sérialisable) ## Modules Scenario 13 (Cross-System) - ConfigWatcherModule, PlayerModule, EconomyModule, MetricsModule - test_13_cross_system.cpp (stub) ## Documentation - CLAUDE_NEXT_SESSION.md: Instructions détaillées pour build/test 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <grove/IModule.h>
|
|
#include <grove/IIO.h>
|
|
#include <grove/IDataTree.h>
|
|
#include <grove/JsonDataNode.h>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
namespace grove {
|
|
|
|
/**
|
|
* @brief Module that watches for config changes and publishes notifications
|
|
*/
|
|
class ConfigWatcherModule : public IModule {
|
|
public:
|
|
ConfigWatcherModule();
|
|
~ConfigWatcherModule() override;
|
|
|
|
// IModule interface
|
|
void process(const IDataNode& input) override;
|
|
void setConfiguration(const IDataNode& configNode, IIO* io, ITaskScheduler* scheduler) override;
|
|
const IDataNode& getConfiguration() override;
|
|
std::unique_ptr<IDataNode> getHealthStatus() override;
|
|
void shutdown() override;
|
|
std::unique_ptr<IDataNode> getState() override;
|
|
void setState(const IDataNode& state) override;
|
|
std::string getType() const override { return "ConfigWatcherModule"; }
|
|
bool isIdle() const override { return true; }
|
|
|
|
// Set DataTree for config watching
|
|
void setDataTree(IDataTree* tree);
|
|
|
|
private:
|
|
IIO* io = nullptr;
|
|
ITaskScheduler* scheduler = nullptr;
|
|
IDataTree* tree = nullptr;
|
|
std::unique_ptr<IDataNode> config;
|
|
|
|
int configChangesDetected = 0;
|
|
|
|
void onConfigReloaded();
|
|
void publishConfigChange(const std::string& configName);
|
|
};
|
|
|
|
} // namespace grove
|