No need to compile library/source files. Just include EventChannel.h:
#include "EventChannel.h"
Now you are ready to use all features of Event channel!
Create named subscriber object:
std::shared_ptr<Subscriber> subscriber = std::make_shared<Subscriber>("name");
Or with macro:
NewSharedSubscriber(subscriber)
Create action for some topic:
subscriber->newAction("event_topic", [](Subscriber::ActionArgument argument) {
std::vector<int> data = std::any_cast<std::string>(argument);
std::cout << "argument = " << data << std::endl;
});
Subscribe subscriber
object to event channel:
EventChannel::getInstance().subscribe("event_topic", subscriber);
Generate event for some topic:
EventChannel::getInstance().publish("event_topic", std::string("event data"));
One subscriber can handle multiple events:
subscriber->newAction("makeSum", [](Subscriber::ActionArgument argument) {
std::vector<int> data = std::any_cast<std::vector<int>>(argument);
std::cout << "makeSum result = " << std::accumulate(data.begin(), data.end(), 0)<< std::endl;
});
subscriber->newAction("printerElements", [](Subscriber::ActionArgument argument) {
std::vector<int> data = std::any_cast<std::vector<int>>(argument);
for (auto &item : data)
std::cout << "item " << item << std::endl;
});
You should initialize static EventChannel::_instance pointer:
EventChannel* EventChannel::_instance = nullptr;
See examples
directory for sources with EventChannel usage.
- Anonymous subscribers
- Thread-safe notifications/subscribe