summaryrefslogtreecommitdiff
path: root/daemon/appmsgmanager.h
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-04 00:17:28 +0100
committerJavier <dev.git@javispedro.com>2014-12-04 00:17:28 +0100
commitddcc8ada42c186e980626ff617be038f45106145 (patch)
treed96b326ab3d4eb4f49d09689cadcf414bf559982 /daemon/appmsgmanager.h
parent8d98f990c9ed158d8c65befc154ab58a3c392646 (diff)
send appmessages one at a time
Diffstat (limited to 'daemon/appmsgmanager.h')
-rw-r--r--daemon/appmsgmanager.h33
1 files changed, 29 insertions, 4 deletions
diff --git a/daemon/appmsgmanager.h b/daemon/appmsgmanager.h
index bc9c82f..498d3fa 100644
--- a/daemon/appmsgmanager.h
+++ b/daemon/appmsgmanager.h
@@ -1,6 +1,10 @@
#ifndef APPMSGMANAGER_H
#define APPMSGMANAGER_H
+#include <functional>
+#include <QUuid>
+#include <QQueue>
+
#include "watchconnector.h"
#include "appmanager.h"
@@ -30,16 +34,37 @@ private:
WatchConnector::Dict mapAppKeys(const QUuid &uuid, const QVariantMap &data);
QVariantMap mapAppKeys(const QUuid &uuid, const WatchConnector::Dict &dict);
- static bool unpackPushMessage(const QByteArray &msg, uint *transaction, QUuid *uuid, WatchConnector::Dict *dict);
+ static bool unpackPushMessage(const QByteArray &msg, quint8 *transaction, QUuid *uuid, WatchConnector::Dict *dict);
+
+ static QByteArray buildPushMessage(quint8 transaction, const QUuid &uuid, const WatchConnector::Dict &dict);
+ static QByteArray buildAckMessage(quint8 transaction);
+ static QByteArray buildNackMessage(quint8 transaction);
+
+ void handleLauncherPushMessage(const QByteArray &data);
+ void handlePushMessage(const QByteArray &data);
+ void handleAckMessage(const QByteArray &data, bool ack);
- static QByteArray buildPushMessage(uint transaction, const QUuid &uuid, const WatchConnector::Dict &dict);
- static QByteArray buildAckMessage(uint transaction);
- static QByteArray buildNackMessage(uint transaction);
+ void transmitNextPendingTransaction();
+ void abortPendingTransactions();
+
+private slots:
+ void handleWatchConnectedChanged();
+ void handleTimeout();
private:
AppManager *apps;
WatchConnector *watch;
quint8 lastTransactionId;
+
+ struct PendingTransaction {
+ quint8 transactionId;
+ QUuid uuid;
+ WatchConnector::Dict dict;
+ std::function<void()> ackCallback;
+ std::function<void()> nackCallback;
+ };
+ QQueue<PendingTransaction> pending;
+ QTimer *timeout;
};
#endif // APPMSGMANAGER_H