1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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));
}
}
}
|