30template <
typename StorageT,
typename EventDisseminationT>
class SOLA {
31 static_assert(std::is_base_of<Storage, StorageT>());
32 static_assert(std::is_base_of<EventDissemination, EventDisseminationT>());
42 SOLA(
const typename StorageT::Config &storage_config,
43 const typename EventDisseminationT::Config &event_dissemination_config,
44 TopicMessageReceiveFct topic_recv, LoggerPtr logger)
45 : storage_(std::make_shared<StorageT>(storage_config)),
46 ed_(std::make_unique<EventDisseminationT>(
48 logger_->logReceiveTopicMessage(m);
51 storage_, event_dissemination_config, logger)),
52 logger_(std::move(logger)) {
53 logger_->setApplicationUUID(solanet::uuidToString(uuid_));
61 bool canStop()
const {
return storage_->canStop() && ed_->canStop(); }
64 void addService(Service service) {
65 std::cout <<
"PUBLISH SERVICE" << std::endl;
66 std::vector<Entry> entry;
68 for (
auto [key, value] : service.key_values) {
69 if (value.type() ==
typeid(std::string)) {
70 entry.emplace_back(key, std::any_cast<std::string>(value));
71 }
else if (value.type() ==
typeid(
float)) {
72 entry.emplace_back(key, std::any_cast<float>(value));
73 }
else if (value.type() ==
typeid(
int)) {
74 entry.emplace_back(key, std::any_cast<int>(value));
76 throw std::runtime_error(
"invalid any");
80 storage_->insert(entry);
83 std::future<minhton::FindResult> findService(Request r) {
return storage_->find(r); }
86 void subscribeTopic(
const std::string &topic) {
87 logger_->logSubscribeTopic(topic);
88 ed_->subscribe(topic);
91 void unsubscribeTopic(
const std::string &topic) {
92 logger_->logUnsubscribeTopic(topic);
93 ed_->unsubscribe(topic);
96 solanet::UUID publishMessage(
const std::string &topic,
const std::string &message) {
98 logger_->logPublishTopicMessage(msg);
103 bool isStorageRunning()
const {
return storage_->isRunning(); }
106 std::shared_ptr<StorageT> storage_;
107 std::unique_ptr<EventDisseminationT> ed_;
109 solanet::UUID uuid_ = solanet::generateUUID();
SOLA(const typename StorageT::Config &storage_config, const typename EventDisseminationT::Config &event_dissemination_config, TopicMessageReceiveFct topic_recv, LoggerPtr logger)
Starts the SOLA instance.
Definition sola.h:42