From 55eb24e69ef9a0268aa8c4a4ae9e93b9ab95961e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 14 Jul 2015 15:41:31 -0700 Subject: [PATCH] call right method from packetReceiver --- libraries/networking/src/PacketReceiver.cpp | 32 ++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/libraries/networking/src/PacketReceiver.cpp b/libraries/networking/src/PacketReceiver.cpp index 20cc5c5b15..31460de3b9 100644 --- a/libraries/networking/src/PacketReceiver.cpp +++ b/libraries/networking/src/PacketReceiver.cpp @@ -218,24 +218,32 @@ void PacketReceiver::processDatagrams() { auto listener = it.value(); if (listener.first) { + + bool success = false; if (matchingNode) { emit dataReceived(matchingNode->getType(), packet->getSizeWithHeader()); + QMetaMethod metaMethod = listener.second; + + static const QByteArray SHARED_NODE_NORMALIZED = QMetaObject::normalizedType("QSharedPointer"); + + if (metaMethod.parameterTypes().contains(SHARED_NODE_NORMALIZED)) { + success = metaMethod.invoke(listener.first, + Q_ARG(QSharedPointer, QSharedPointer(packet.release())), + Q_ARG(SharedNodePointer, matchingNode)); + + } else { + success = metaMethod.invoke(listener.first, + Q_ARG(QSharedPointer, QSharedPointer(packet.release()))); + } + } else { emit dataReceived(NodeType::Unassigned, packet->getSizeWithHeader()); - } - - bool success = false; - if (matchingNode) { success = listener.second.invoke(listener.first, Q_ARG(QSharedPointer, QSharedPointer(packet.release()))); - } else { - success = listener.second.invoke(listener.first, - Q_ARG(QSharedPointer, QSharedPointer(packet.release())), - Q_ARG(SharedNodePointer, matchingNode)); } - + if (!success) { qDebug() << "Error delivering packet " << nameForPacketType(packet->getType()) << " to listener: " << listener.first->objectName() << "::" << listener.second.name(); @@ -247,13 +255,11 @@ void PacketReceiver::processDatagrams() { << "has been destroyed - removing mapping."; _packetListenerMap.erase(it); } - - _packetListenerLock.unlock(); - } else { - _packetListenerLock.unlock(); qDebug() << "No listener found for packet type " << nameForPacketType(packet->getType()); } + + _packetListenerLock.unlock(); } } }