diff options
Diffstat (limited to 'saltoqd/toqmanager.cpp')
-rw-r--r-- | saltoqd/toqmanager.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/saltoqd/toqmanager.cpp b/saltoqd/toqmanager.cpp new file mode 100644 index 0000000..2e0d967 --- /dev/null +++ b/saltoqd/toqmanager.cpp @@ -0,0 +1,73 @@ +#include "toqmanager.h" + +#include "versionmanager.h" +#include "systemmanager.h" +#include "storagemanager.h" +#include "musicmanager.h" +#include "commmanager.h" + +ToqManager::ToqManager(const QBluetoothAddress &address, QObject *parent) : + QObject(parent), + _conn(new ToqConnection(address, this)), + _versionManager(new VersionManager(this)), + _systemManager(new SystemManager(this)), + _storageManager(new StorageManager(this)), + _musicManager(new MusicManager(this)), + _commManager(new CommManager(_storageManager, this)) +{ + connect(_conn, &ToqConnection::messageReceived, + this, &ToqManager::handleToqMessage); +} + +void ToqManager::setEndpointListener(ToqConnection::Endpoint ep, EndpointHandler *handler) +{ + Q_ASSERT(!_handlers.contains(ep)); + _handlers.insert(ep, handler); +} + +void ToqManager::sendMessage(const ToqConnection::Message &msg) +{ + if (1) { + QString json = QString::fromUtf8(msg.payload.toJson(QJsonDocument::Compact)); + qDebug() << "Sending message to" << ToqConnection::nameOfEndpoint(msg.destination) << "from" << ToqConnection::nameOfEndpoint(msg.destination) << "type" << msg.type << json; + } + _conn->sendMessage(msg); +} + +void ToqManager::sendMessage(ToqConnection::Endpoint source, ToqConnection::Endpoint destination, quint16 transactionId, quint32 type, const QJsonObject &payload) +{ + QJsonDocument doc(payload); + ToqConnection::Message msg(source, destination, transactionId, type, doc); + _conn->sendMessage(msg); +} + +quint16 ToqManager::sendMessage(ToqConnection::Endpoint source, ToqConnection::Endpoint destination, quint32 type, const QJsonObject &payload) +{ + QJsonDocument doc(payload); + quint16 transactionId = _conn->nextTransactionId(); + ToqConnection::Message msg(source, destination, transactionId, type, doc); + _conn->sendMessage(msg); + return transactionId; +} + +void ToqManager::sendReply(const ToqConnection::Message &msg, quint32 type, const QJsonObject &payload) +{ + ToqConnection::Message reply(msg.destination, msg.source, msg.transactionId, type, QJsonDocument(payload)); + _conn->sendMessage(reply); +} + +void ToqManager::handleToqMessage(const ToqConnection::Message &msg) +{ + EndpointHandler *handler = _handlers.value(msg.destination, 0); + + if (1) { + QString json = QString::fromUtf8(msg.payload.toJson(QJsonDocument::Compact)); + qDebug() << "Received message to" << ToqConnection::nameOfEndpoint(msg.destination) << "from" << ToqConnection::nameOfEndpoint(msg.destination) << "type" << msg.type << json; + } + + if (handler) { + handler->handleMessage(msg); + } else { + qWarning() << "No registered handler for endpoint" << ToqConnection::nameOfEndpoint(msg.destination); + } +} |