diff options
| author | Javier <dev.git@javispedro.com> | 2014-12-04 00:17:28 +0100 |
|---|---|---|
| committer | Javier <dev.git@javispedro.com> | 2014-12-04 00:17:28 +0100 |
| commit | ddcc8ada42c186e980626ff617be038f45106145 (patch) | |
| tree | d96b326ab3d4eb4f49d09689cadcf414bf559982 /daemon/appmsgmanager.h | |
| parent | 8d98f990c9ed158d8c65befc154ab58a3c392646 (diff) | |
send appmessages one at a time
Diffstat (limited to 'daemon/appmsgmanager.h')
| -rw-r--r-- | daemon/appmsgmanager.h | 33 |
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 |
