summaryrefslogtreecommitdiff
path: root/daemon/appmsgmanager.cpp
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-06 23:31:57 +0100
committerJavier <dev.git@javispedro.com>2014-12-06 23:31:57 +0100
commit5499dc58d09f07081c41b8e4dead810a82137939 (patch)
tree6e82f57d36d7a3ae6a4fbc1f6f447d8b5886273b /daemon/appmsgmanager.cpp
parentb03ee6521f61d02dcebb5d140f8d308479a89e35 (diff)
properly send acks for incoming appmsgs
Diffstat (limited to 'daemon/appmsgmanager.cpp')
-rw-r--r--daemon/appmsgmanager.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/daemon/appmsgmanager.cpp b/daemon/appmsgmanager.cpp
index 312043a..f24b8d9 100644
--- a/daemon/appmsgmanager.cpp
+++ b/daemon/appmsgmanager.cpp
@@ -69,6 +69,16 @@ void AppMsgManager::send(const QUuid &uuid, const QVariantMap &data, const std::
}
}
+void AppMsgManager::setMessageHandler(const QUuid &uuid, MessageHandlerFunc func)
+{
+ _handlers.insert(uuid, func);
+}
+
+void AppMsgManager::clearMessageHandler(const QUuid &uuid)
+{
+ _handlers.remove(uuid);
+}
+
uint AppMsgManager::lastTransactionId() const
{
return _lastTransactionId;
@@ -236,6 +246,8 @@ void AppMsgManager::handlePushMessage(const QByteArray &data)
if (!unpackPushMessage(data, &transaction, &uuid, &dict)) {
logger()->warn() << "Failed to parse APP_MSG PUSH";
+ watch->sendMessage(WatchConnector::watchAPPLICATION_MESSAGE,
+ buildNackMessage(transaction));
return;
}
@@ -244,7 +256,25 @@ void AppMsgManager::handlePushMessage(const QByteArray &data)
QVariantMap msg = mapAppKeys(uuid, dict);
logger()->debug() << "Mapped dict" << msg;
- emit messageReceived(uuid, msg);
+ bool result;
+
+ MessageHandlerFunc handler = _handlers.value(uuid);
+ if (handler) {
+ result = handler(msg);
+ } else {
+ // No handler? Let's just send an ACK.
+ result = false;
+ }
+
+ if (result) {
+ logger()->debug() << "ACKing transaction" << transaction;
+ watch->sendMessage(WatchConnector::watchAPPLICATION_MESSAGE,
+ buildAckMessage(transaction));
+ } else {
+ logger()->info() << "NACKing transaction" << transaction;
+ watch->sendMessage(WatchConnector::watchAPPLICATION_MESSAGE,
+ buildNackMessage(transaction));
+ }
}
void AppMsgManager::handleAckMessage(const QByteArray &data, bool ack)