add a direct registration for EntityEditPacketSender

This commit is contained in:
Stephen Birarda 2015-07-17 10:49:24 -07:00
parent 2d5428276a
commit 0811553c41
3 changed files with 17 additions and 3 deletions

View file

@ -19,7 +19,7 @@
EntityEditPacketSender::EntityEditPacketSender() {
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
packetReceiver.registerListener(PacketType::EntityEditNack, this, "processEntityEditNackPacket");
packetReceiver.registerDirectListener(PacketType::EntityEditNack, this, "processEntityEditNackPacket");
}
void EntityEditPacketSender::processEntityEditNackPacket(QSharedPointer<NLPacket> packet, SharedNodePointer sendingNode) {

View file

@ -63,6 +63,17 @@ bool PacketReceiver::registerListenerForTypes(const QSet<PacketType::Value>& 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<PacketType::Value>& types,
QObject* listener, const char* slot) {
@ -72,7 +83,7 @@ void PacketReceiver::registerDirectListenerForTypes(const QSet<PacketType::Value
_directConnectSetMutex.lock();
// if we successfully registered, add this object to the set of objects that are directly connected
_directlyConnectedObjects.insert(dynamic_cast<QObject*>(listener));
_directlyConnectedObjects.insert(listener);
_directConnectSetMutex.unlock();
}

View file

@ -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<PacketType::Value>& 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<QObject*> _directlyConnectedObjects;
friend class EntityEditPacketSender;
friend class OctreePacketProcessor;
};