This commit is contained in:
Torsten (PC)
2026-01-14 14:36:57 +01:00
parent cd739fb52e
commit 1fe77c0905
21 changed files with 1267 additions and 0 deletions

43
src/message_broker.cpp Normal file
View File

@@ -0,0 +1,43 @@
#include "message_broker.h"
#include <iostream>
void MessageBroker::publish(const std::string &message) {
std::lock_guard<std::mutex> lock(mutex);
messageQueue.push(message);
cv.notify_all();
}
void MessageBroker::subscribe(const MessageCallback &callback) {
std::lock_guard<std::mutex> lock(mutex);
subscribers.push_back(callback);
}
void MessageBroker::start() {
running = true;
brokerThread = std::thread([this]() { processMessages(); });
}
void MessageBroker::stop() {
running = false;
cv.notify_all();
if (brokerThread.joinable()) {
brokerThread.join();
}
}
void MessageBroker::processMessages() {
while (running) {
std::unique_lock<std::mutex> lock(mutex);
cv.wait(lock, [this]() { return !messageQueue.empty() || !running; });
if (!running) break;
while (!messageQueue.empty()) {
std::string message = std::move(messageQueue.front());
messageQueue.pop();
lock.unlock();
for (const auto &callback : subscribers) {
callback(message);
}
lock.lock();
}
}
}