From 3a4e80053081ab7f5de142bfbc6589dfc2bc6e2d Mon Sep 17 00:00:00 2001 From: Javier Date: Sat, 2 Jan 2016 05:10:03 +0100 Subject: implement blobdbmanager Conflicts: daemon/daemon.pro daemon/manager.h daemon/watchconnector.h --- daemon/blobdbmanager.cc | 99 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 daemon/blobdbmanager.cc (limited to 'daemon/blobdbmanager.cc') diff --git a/daemon/blobdbmanager.cc b/daemon/blobdbmanager.cc new file mode 100644 index 0000000..f7a33dd --- /dev/null +++ b/daemon/blobdbmanager.cc @@ -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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(db); + + p.writeLE(16); + p.writeUuid(key); + + p.writeLE(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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(db); + + p.writeLE(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(WatchConnector::blobdbINSERT); + p.writeLE(transfer.cookie); + p.writeLE(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(); + quint8 status = u.readLE(); + + 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)); + } + } +} -- cgit v1.2.3