From 0811553c4161598d1b2d71e212faf00530834cc1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 17 Jul 2015 10:49:24 -0700 Subject: [PATCH] add a direct registration for EntityEditPacketSender --- libraries/entities/src/EntityEditPacketSender.cpp | 2 +- libraries/networking/src/PacketReceiver.cpp | 13 ++++++++++++- libraries/networking/src/PacketReceiver.h | 5 ++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/libraries/entities/src/EntityEditPacketSender.cpp b/libraries/entities/src/EntityEditPacketSender.cpp index 4dab854d13..47622cbbdf 100644 --- a/libraries/entities/src/EntityEditPacketSender.cpp +++ b/libraries/entities/src/EntityEditPacketSender.cpp @@ -19,7 +19,7 @@ EntityEditPacketSender::EntityEditPacketSender() { auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); - packetReceiver.registerListener(PacketType::EntityEditNack, this, "processEntityEditNackPacket"); + packetReceiver.registerDirectListener(PacketType::EntityEditNack, this, "processEntityEditNackPacket"); } void EntityEditPacketSender::processEntityEditNackPacket(QSharedPointer packet, SharedNodePointer sendingNode) { diff --git a/libraries/networking/src/PacketReceiver.cpp b/libraries/networking/src/PacketReceiver.cpp index ea7f3adab8..973cc82e32 100644 --- a/libraries/networking/src/PacketReceiver.cpp +++ b/libraries/networking/src/PacketReceiver.cpp @@ -63,6 +63,17 @@ bool PacketReceiver::registerListenerForTypes(const QSet& typ return true; } +void PacketReceiver::registerDirectListener(PacketType::Value type, QObject* listener, const char* slot) { + bool success = registerListener(type, listener, slot); + if (success) { + _directConnectSetMutex.lock(); + + // if we successfully registered, add this object to the set of objects that are directly connected + _directlyConnectedObjects.insert(listener); + + _directConnectSetMutex.unlock(); + } +} void PacketReceiver::registerDirectListenerForTypes(const QSet& types, QObject* listener, const char* slot) { @@ -72,7 +83,7 @@ void PacketReceiver::registerDirectListenerForTypes(const QSet(listener)); + _directlyConnectedObjects.insert(listener); _directConnectSetMutex.unlock(); } diff --git a/libraries/networking/src/PacketReceiver.h b/libraries/networking/src/PacketReceiver.h index 27dc1ce55e..cdda467c79 100644 --- a/libraries/networking/src/PacketReceiver.h +++ b/libraries/networking/src/PacketReceiver.h @@ -23,6 +23,7 @@ #include "NLPacket.h" #include "udt/PacketHeaders.h" +class EntityEditPacketSender; class OctreePacketProcessor; class PacketReceiver : public QObject { @@ -53,9 +54,10 @@ signals: void packetVersionMismatch(PacketType::Value type); private: - // this is a brutal hack for now - ideally GenericThread / ReceivedPacketProcessor + // these are brutal hacks for now - ideally GenericThread / ReceivedPacketProcessor // should be changed to have a true event loop and be able to handle our QMetaMethod::invoke void registerDirectListenerForTypes(const QSet& types, QObject* listener, const char* slot); + void registerDirectListener(PacketType::Value type, QObject* listener, const char* slot); bool packetVersionMatch(const NLPacket& packet); @@ -72,6 +74,7 @@ private: QMutex _directConnectSetMutex; QSet _directlyConnectedObjects; + friend class EntityEditPacketSender; friend class OctreePacketProcessor; };