call right method from packetReceiver

This commit is contained in:
Stephen Birarda 2015-07-14 15:41:31 -07:00
parent e749b9727f
commit 55eb24e69e

View file

@ -218,24 +218,32 @@ void PacketReceiver::processDatagrams() {
auto listener = it.value(); auto listener = it.value();
if (listener.first) { if (listener.first) {
bool success = false;
if (matchingNode) { if (matchingNode) {
emit dataReceived(matchingNode->getType(), packet->getSizeWithHeader()); emit dataReceived(matchingNode->getType(), packet->getSizeWithHeader());
QMetaMethod metaMethod = listener.second;
static const QByteArray SHARED_NODE_NORMALIZED = QMetaObject::normalizedType("QSharedPointer<Node>");
if (metaMethod.parameterTypes().contains(SHARED_NODE_NORMALIZED)) {
success = metaMethod.invoke(listener.first,
Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(packet.release())),
Q_ARG(SharedNodePointer, matchingNode));
} else {
success = metaMethod.invoke(listener.first,
Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(packet.release())));
}
} else { } else {
emit dataReceived(NodeType::Unassigned, packet->getSizeWithHeader()); emit dataReceived(NodeType::Unassigned, packet->getSizeWithHeader());
}
bool success = false;
if (matchingNode) {
success = listener.second.invoke(listener.first, success = listener.second.invoke(listener.first,
Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(packet.release()))); Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(packet.release())));
} else {
success = listener.second.invoke(listener.first,
Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(packet.release())),
Q_ARG(SharedNodePointer, matchingNode));
} }
if (!success) { if (!success) {
qDebug() << "Error delivering packet " << nameForPacketType(packet->getType()) << " to listener: " qDebug() << "Error delivering packet " << nameForPacketType(packet->getType()) << " to listener: "
<< listener.first->objectName() << "::" << listener.second.name(); << listener.first->objectName() << "::" << listener.second.name();
@ -247,13 +255,11 @@ void PacketReceiver::processDatagrams() {
<< "has been destroyed - removing mapping."; << "has been destroyed - removing mapping.";
_packetListenerMap.erase(it); _packetListenerMap.erase(it);
} }
_packetListenerLock.unlock();
} else { } else {
_packetListenerLock.unlock();
qDebug() << "No listener found for packet type " << nameForPacketType(packet->getType()); qDebug() << "No listener found for packet type " << nameForPacketType(packet->getType());
} }
_packetListenerLock.unlock();
} }
} }
} }