summaryrefslogtreecommitdiff
path: root/daemon/blobdbmanager.cpp
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2016-03-01 09:13:06 +0100
committerAndrew Branson <andrew.branson@cern.ch>2016-03-01 09:13:06 +0100
commit3ce36b764fc55bdfc8fe98395cab072d50855e28 (patch)
treeddf0a92af9ed0389f88d970ab1a61190baa7d893 /daemon/blobdbmanager.cpp
parent3a4e80053081ab7f5de142bfbc6589dfc2bc6e2d (diff)
New managers from javispedro
AppFetchManager, BlobDBManager
Diffstat (limited to 'daemon/blobdbmanager.cpp')
-rw-r--r--daemon/blobdbmanager.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/daemon/blobdbmanager.cpp b/daemon/blobdbmanager.cpp
new file mode 100644
index 0000000..f7a33dd
--- /dev/null
+++ b/daemon/blobdbmanager.cpp
@@ -0,0 +1,99 @@
+#include "blobdbmanager.h"
+#include "unpacker.h"
+#include "packer.h"
+
+BlobDbManager::BlobDbManager(WatchConnector *watch, QObject *parent) :
+ QObject(parent), l(metaObject()->className()), watch(watch),
+ lastCookie(0)
+{
+ watch->setEndpointHandler(WatchConnector::watchBLOB_DB,
+ [this](const QByteArray &msg) {
+ handleMessage(msg);
+ return true;
+ });
+}
+
+void BlobDbManager::insert(BlobDatabase db, const QUuid &key, const QByteArray &data, const SuccessCallback &successCallback, const ErrorCallback &errorCallback)
+{
+ QByteArray msg;
+ Packer p(&msg);
+ PendingTransfer transfer;
+ transfer.cookie = ++lastCookie;
+ transfer.successCallback = successCallback;
+ transfer.errorCallback = errorCallback;
+
+ p.writeLE<quint8>(WatchConnector::blobdbINSERT);
+ p.writeLE<quint16>(transfer.cookie);
+ p.writeLE<quint8>(db);
+
+ p.writeLE<quint8>(16);
+ p.writeUuid(key);
+
+ p.writeLE<quint16>(data.size());
+ msg.append(data);
+
+ pending.insert(transfer.cookie, transfer);
+ watch->sendMessage(WatchConnector::watchBLOB_DB, msg);
+}
+
+void BlobDbManager::remove(BlobDatabase db, const QUuid &key, const SuccessCallback &successCallback, const ErrorCallback &errorCallback)
+{
+ QByteArray msg;
+ Packer p(&msg);
+ PendingTransfer transfer;
+ transfer.cookie = ++lastCookie;
+ transfer.successCallback = successCallback;
+ transfer.errorCallback = errorCallback;
+
+ p.writeLE<quint8>(WatchConnector::blobdbINSERT);
+ p.writeLE<quint16>(transfer.cookie);
+ p.writeLE<quint8>(db);
+
+ p.writeLE<quint8>(16);
+ p.writeUuid(key);
+
+ pending.insert(transfer.cookie, transfer);
+ watch->sendMessage(WatchConnector::watchBLOB_DB, msg);
+}
+
+void BlobDbManager::clear(BlobDatabase db, const SuccessCallback &successCallback, const ErrorCallback &errorCallback)
+{
+ QByteArray msg;
+ Packer p(&msg);
+ PendingTransfer transfer;
+ transfer.cookie = ++lastCookie;
+ transfer.successCallback = successCallback;
+ transfer.errorCallback = errorCallback;
+
+ p.writeLE<quint8>(WatchConnector::blobdbINSERT);
+ p.writeLE<quint16>(transfer.cookie);
+ p.writeLE<quint8>(db);
+
+ pending.insert(transfer.cookie, transfer);
+ watch->sendMessage(WatchConnector::watchBLOB_DB, msg);
+}
+
+void BlobDbManager::handleMessage(const QByteArray &msg)
+{
+ Unpacker u(msg);
+ Cookie cookie = u.readLE<quint16>();
+ quint8 status = u.readLE<quint8>();
+
+ PendingTransfer transfer = pending.take(cookie);
+ if (transfer.cookie != cookie) {
+ qCWarning(l) << "received a message for a cookie we don't know" << cookie;
+ return;
+ }
+
+ if (status == 0 || status == WatchConnector::blobdbSUCCESS) {
+ qCDebug(l) << "success on cookie" << cookie;
+ if (transfer.successCallback) {
+ transfer.successCallback();
+ }
+ } else {
+ qCWarning(l) << "failure on cookie" << cookie << "with status" << status;
+ if (transfer.errorCallback) {
+ transfer.errorCallback(WatchConnector::BlobDbStatus(status));
+ }
+ }
+}