Files
itc_pressure_optimizer/main.cpp
T
2026-07-16 08:40:40 +02:00

66 lines
1.4 KiB
C++

#include <functional>
#include <iostream>
#include <memory>
#include <typeindex>
#include <unordered_map>
#include <vector>
#include "src/device/EventBus.cpp"
class ProdA {};
class ProdB {};
class ConsA {
public:
void surProdA(const ProdA &) {
std::cout << "ConsA : Reçu ProdA" << std::endl;
}
};
class ConsB {
public:
void surProdA(const ProdA &) {
std::cout << "ConsB : Reçu ProdA" << std::endl;
}
void surProdB(const ProdB &) {
std::cout << "ConsB : Reçu ProdB" << std::endl;
}
};
class ConsC {
public:
void surProdB(const ProdB &) {
std::cout << "ConsC : Reçu ProdB" << std::endl;
}
};
int main() {
EventBus bus;
// Consumer
ConsA consA;
ConsB consB;
ConsC consC;
// Setup abonnement
// ConsA react to ProdA
bus.subscribe<ProdA>([&consA](const ProdA &e) { consA.surProdA(e); });
// ConsB react to ProdA and ProdB
bus.subscribe<ProdA>([&consB](const ProdA &e) { consB.surProdA(e); });
bus.subscribe<ProdB>([&consB](const ProdB &e) { consB.surProdB(e); });
// ConsC react to ProdB
bus.subscribe<ProdB>([&consC](const ProdB &e) { consC.surProdB(e); });
// Test of publishement
std::cout << "--- Publishing of ProdA ---" << std::endl;
ProdA prodA;
bus.publish(prodA);
std::cout << "\n--- Publishing of ProdB ---" << std::endl;
ProdB prodB;
bus.publish(prodB);
return 0;
}