summaryrefslogtreecommitdiff
path: root/saltoqd/toqmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saltoqd/toqmanager.cpp')
-rw-r--r--saltoqd/toqmanager.cpp73
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);
+ }
+}