summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-12-03 01:47:48 +0100
committerJavier <dev.git@javispedro.com>2014-12-03 01:47:48 +0100
commit8d98f990c9ed158d8c65befc154ab58a3c392646 (patch)
tree594fe7c19c600fafb321e7cf084a515fed42fb66
parent132562620764a8c0cc01dcc1574003beaa70272f (diff)
fix some appmsg issues
-rw-r--r--daemon/appmsgmanager.cpp15
-rw-r--r--daemon/watchconnector.cpp10
2 files changed, 17 insertions, 8 deletions
diff --git a/daemon/appmsgmanager.cpp b/daemon/appmsgmanager.cpp
index afaabee..12971ce 100644
--- a/daemon/appmsgmanager.cpp
+++ b/daemon/appmsgmanager.cpp
@@ -71,8 +71,12 @@ AppMsgManager::AppMsgManager(AppManager *apps, WatchConnector *watch, QObject *p
emit messageReceived(uuid, data);
break;
}
+ case WatchConnector::appmsgACK:
+ case WatchConnector::appmsgNACK:
+ logger()->info() << "appmsg endpoint handler received an unwanted ack/nack";
+ break;
default:
- logger()->warn() << "Unknown application message type:" << data.at(0);
+ logger()->warn() << "Unknown application message type:" << int(data.at(0));
break;
}
@@ -88,15 +92,16 @@ void AppMsgManager::send(const QUuid &uuid, const QVariantMap &data, const std::
logger()->debug() << "Sending appmsg" << transaction << "to" << uuid << "with" << dict;
+#if 0 /* Try to unpack what we just packed. */
WatchConnector::Dict t_dict;
QUuid t_uuid;
uint t_trans;
if (unpackPushMessage(msg, &t_trans, &t_uuid, &t_dict)) {
logger()->debug() << t_trans << t_uuid << t_dict;
} else {
- logger()->warn() << "not unpack my own";
+ logger()->error() << "not able to unpack my own dict";
}
-
+#endif
watch->sendMessage(WatchConnector::watchAPPLICATION_MESSAGE, msg,
[this, ackCallback, nackCallback, transaction](const QByteArray &reply) {
@@ -105,10 +110,10 @@ void AppMsgManager::send(const QUuid &uuid, const QVariantMap &data, const std::
quint8 type = reply[0];
quint8 recv_transaction = reply[1];
- logger()->debug() << "Got response to transaction" << transaction;
-
if (recv_transaction != transaction) return false;
+ logger()->debug() << "Got response to transaction" << transaction;
+
switch (type) {
case WatchConnector::appmsgACK:
logger()->debug() << "Got ACK to transaction" << transaction;
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index dd95821..baec52c 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -109,13 +109,17 @@ bool WatchConnector::dispatchMessage(uint endpoint, const QByteArray &data)
if (tmp_it != tmpHandlers.end()) {
QList<EndpointHandlerFunc>& funcs = tmp_it.value();
bool ok = false;
- if (!funcs.empty()) {
- if (funcs.first()(data)) {
+ for (int i = 0; i < funcs.size(); i++) {
+ if (funcs[i](data)) {
+ // This handler accepted this message
ok = true;
- funcs.removeFirst();
+ // Since it is a temporary handler, remove it.
+ funcs.removeAt(i);
+ break;
}
}
if (funcs.empty()) {
+ // "Garbage collect" the tmpHandlers entry.
tmpHandlers.erase(tmp_it);
}
if (ok) {