From d9d0166bc958675acbae7830dbdfb5f84e8176ab Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 17 Dec 2014 15:23:39 -0800 Subject: [PATCH 01/16] Use variadic templates to create instance with arguments --- libraries/shared/src/DependencyManager.cpp | 8 ---- libraries/shared/src/DependencyManager.h | 46 ++++++++++++++++++---- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/libraries/shared/src/DependencyManager.cpp b/libraries/shared/src/DependencyManager.cpp index 43bb92258e..440c0ac68d 100644 --- a/libraries/shared/src/DependencyManager.cpp +++ b/libraries/shared/src/DependencyManager.cpp @@ -10,11 +10,3 @@ // #include "DependencyManager.h" - -DependencyManager& DependencyManager::getInstance() { - static DependencyManager instance; - return instance; -} - -DependencyManager::~DependencyManager() { -} \ No newline at end of file diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index fdf8030199..8ed55edf68 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -16,10 +16,12 @@ #include -#define SINGLETON_DEPENDENCY(T)\ +#define SINGLETON_DEPENDENCY(T, NEED_SET)\ public:\ typedef QSharedPointer SharedPointer;\ + typedef QWeakPointer WeakPointer;\ private:\ + static constexpr bool REQUIRE_SET = NEED_SET;\ void customDeleter() {\ QObject* thisObject = dynamic_cast(this);\ if (thisObject) {\ @@ -34,20 +36,50 @@ class QObject; class DependencyManager { public: - // Only accessible method. - // usage: T* instance = DependencyManager::get(); + // usage: + // T* instance = DependencyManager::get(); + // T* instance = DependencyManager::set(Args... args); + // T* instance = DependencyManager::destroy(); template static QSharedPointer get(); + template + static QSharedPointer set(Args&&... args); + + template + static void destroy(); + private: - static DependencyManager& getInstance(); - DependencyManager() {} - ~DependencyManager(); + template + static QSharedPointer& storage(); }; template QSharedPointer DependencyManager::get() { - static QSharedPointer sharedPointer = QSharedPointer(new T(), &T::customDeleter); + static bool requireSet = !T::REQUIRE_SET; + if (requireSet) { + set(); + requireSet = false; + } + + return storage(); +} + +template +QSharedPointer DependencyManager::set(Args&&... args) { + QSharedPointer instance(new T(args...), &T::customDeleter); + storage().swap(instance); + return storage(); +} + +template +void DependencyManager::destroy() { + storage().clear(); +} + +template +QSharedPointer& DependencyManager::storage() { + static QSharedPointer sharedPointer; return sharedPointer; } From ce7f72d2cdd67d76a5271f4a2da3cf236df2babe Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 17 Dec 2014 15:26:47 -0800 Subject: [PATCH 02/16] Update macro --- interface/src/GLCanvas.h | 2 +- interface/src/devices/DdeFaceTracker.h | 2 +- interface/src/devices/Faceshift.h | 2 +- interface/src/devices/Visage.h | 2 +- libraries/animation/src/AnimationCache.h | 2 +- libraries/networking/src/NodeList.h | 2 ++ libraries/render-utils/src/AmbientOcclusionEffect.h | 2 +- libraries/render-utils/src/DeferredLightingEffect.h | 2 +- libraries/render-utils/src/GeometryCache.h | 2 +- libraries/render-utils/src/GlowEffect.h | 2 +- libraries/render-utils/src/Model.h | 2 +- libraries/render-utils/src/TextureCache.h | 2 +- 12 files changed, 13 insertions(+), 11 deletions(-) diff --git a/interface/src/GLCanvas.h b/interface/src/GLCanvas.h index 420bf77467..d9966714cc 100644 --- a/interface/src/GLCanvas.h +++ b/interface/src/GLCanvas.h @@ -20,7 +20,7 @@ /// customized canvas that simply forwards requests/events to the singleton application class GLCanvas : public QGLWidget { Q_OBJECT - SINGLETON_DEPENDENCY(GLCanvas) + SINGLETON_DEPENDENCY(GLCanvas, false) public: bool isThrottleRendering() const; diff --git a/interface/src/devices/DdeFaceTracker.h b/interface/src/devices/DdeFaceTracker.h index 23a5d1fcc8..60a317e887 100644 --- a/interface/src/devices/DdeFaceTracker.h +++ b/interface/src/devices/DdeFaceTracker.h @@ -20,7 +20,7 @@ class DdeFaceTracker : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(DdeFaceTracker) + SINGLETON_DEPENDENCY(DdeFaceTracker, false) public: //initialization diff --git a/interface/src/devices/Faceshift.h b/interface/src/devices/Faceshift.h index b6b942dfee..3587b3dfae 100644 --- a/interface/src/devices/Faceshift.h +++ b/interface/src/devices/Faceshift.h @@ -26,7 +26,7 @@ /// Handles interaction with the Faceshift software, which provides head position/orientation and facial features. class Faceshift : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(Faceshift) + SINGLETON_DEPENDENCY(Faceshift, false) public: void init(); diff --git a/interface/src/devices/Visage.h b/interface/src/devices/Visage.h index c12ce3aabd..6d8c87eef7 100644 --- a/interface/src/devices/Visage.h +++ b/interface/src/devices/Visage.h @@ -28,7 +28,7 @@ namespace VisageSDK { /// Handles input from the Visage webcam feature tracking software. class Visage : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(Visage) + SINGLETON_DEPENDENCY(Visage, false) public: void init(); diff --git a/libraries/animation/src/AnimationCache.h b/libraries/animation/src/AnimationCache.h index 4e67014822..5bec0b8902 100644 --- a/libraries/animation/src/AnimationCache.h +++ b/libraries/animation/src/AnimationCache.h @@ -26,7 +26,7 @@ typedef QSharedPointer AnimationPointer; /// Scriptable interface for FBX animation loading. class AnimationCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(AnimationCache) + SINGLETON_DEPENDENCY(AnimationCache, false) public: Q_INVOKABLE AnimationPointer getAnimation(const QString& url) { return getAnimation(QUrl(url)); } diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 921f33b454..78f2f8e457 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -27,6 +27,8 @@ #include #include +#include + #include "DomainHandler.h" #include "LimitedNodeList.h" #include "Node.h" diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h index 421461860d..12688de1cc 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -21,7 +21,7 @@ class ProgramObject; /// A screen space ambient occlusion effect. See John Chapman's tutorial at /// http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html for reference. class AmbientOcclusionEffect { - SINGLETON_DEPENDENCY(AmbientOcclusionEffect) + SINGLETON_DEPENDENCY(AmbientOcclusionEffect, false) public: diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 904f9827ea..3450d84713 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -24,7 +24,7 @@ class PostLightingRenderable; /// Handles deferred lighting for the bits that require it (voxels, metavoxels...) class DeferredLightingEffect { - SINGLETON_DEPENDENCY(DeferredLightingEffect) + SINGLETON_DEPENDENCY(DeferredLightingEffect, false) public: diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 97f24f94a3..44b7cda8ec 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -34,7 +34,7 @@ class NetworkTexture; /// Stores cached geometry. class GeometryCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(GeometryCache) + SINGLETON_DEPENDENCY(GeometryCache, false) public: void renderHemisphere(int slices, int stacks); diff --git a/libraries/render-utils/src/GlowEffect.h b/libraries/render-utils/src/GlowEffect.h index 37f29afb62..4828e1764e 100644 --- a/libraries/render-utils/src/GlowEffect.h +++ b/libraries/render-utils/src/GlowEffect.h @@ -27,7 +27,7 @@ class ProgramObject; /// A generic full screen glow effect. class GlowEffect : public QObject { Q_OBJECT - SINGLETON_DEPENDENCY(GlowEffect) + SINGLETON_DEPENDENCY(GlowEffect, false) public: diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 20b828022b..8fedd2e622 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -470,7 +470,7 @@ Q_DECLARE_METATYPE(QVector) /// Handle management of pending models that need blending class ModelBlender : public QObject { Q_OBJECT - SINGLETON_DEPENDENCY(ModelBlender) + SINGLETON_DEPENDENCY(ModelBlender, false) public: diff --git a/libraries/render-utils/src/TextureCache.h b/libraries/render-utils/src/TextureCache.h index f3ad493cb4..6957fb0830 100644 --- a/libraries/render-utils/src/TextureCache.h +++ b/libraries/render-utils/src/TextureCache.h @@ -32,7 +32,7 @@ enum TextureType { DEFAULT_TEXTURE, NORMAL_TEXTURE, SPECULAR_TEXTURE, EMISSIVE_T /// Stores cached textures, including render-to-texture targets. class TextureCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(TextureCache) + SINGLETON_DEPENDENCY(TextureCache, false) public: From 52f2033dce2c67e4cafaf9cfe854f3867869a93b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 17 Dec 2014 15:27:35 -0800 Subject: [PATCH 03/16] Updated Nodelist class --- libraries/networking/src/NodeList.cpp | 35 ++++++--------------------- libraries/networking/src/NodeList.h | 8 +++--- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index bf992e7b88..f7820c9ee8 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -25,33 +25,6 @@ #include "SharedUtil.h" #include "UUID.h" -NodeList* NodeList::createInstance(char ownerType, unsigned short socketListenPort, unsigned short dtlsPort) { - - NodeType::init(); - - if (_sharedInstance.get()) { - qDebug() << "NodeList called with existing instance." << - "Releasing auto_ptr, deleting existing instance and creating a new one."; - - delete _sharedInstance.release(); - } - - _sharedInstance = std::auto_ptr(new NodeList(ownerType, socketListenPort, dtlsPort)); - - // register the SharedNodePointer meta-type for signals/slots - qRegisterMetaType(); - - return static_cast(_sharedInstance.get()); -} - -NodeList* NodeList::getInstance() { - if (!_sharedInstance.get()) { - qDebug("NodeList getInstance called before call to createInstance. Returning NULL pointer."); - } - - return static_cast(_sharedInstance.get()); -} - NodeList::NodeList(char newOwnerType, unsigned short socketListenPort, unsigned short dtlsListenPort) : LimitedNodeList(socketListenPort, dtlsListenPort), _ownerType(newOwnerType), @@ -62,6 +35,14 @@ NodeList::NodeList(char newOwnerType, unsigned short socketListenPort, unsigned _hasCompletedInitialSTUNFailure(false), _stunRequestsSinceSuccess(0) { + static bool firstCall = true; + if (firstCall) { + NodeType::init(); + // register the SharedNodePointer meta-type for signals/slots + qRegisterMetaType(); + firstCall = false; + } + // clear our NodeList when the domain changes connect(&_domainHandler, &DomainHandler::disconnectedFromDomain, this, &NodeList::reset); diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 78f2f8e457..3a9ecf2405 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -14,6 +14,7 @@ #include #include +#include #ifndef _WIN32 #include // not on windows, not needed for mac or windows @@ -41,9 +42,9 @@ class Assignment; class NodeList : public LimitedNodeList { Q_OBJECT + SINGLETON_DEPENDENCY(NodeList, true) + public: - static NodeList* createInstance(char ownerType, unsigned short socketListenPort = 0, unsigned short dtlsPort = 0); - static NodeList* getInstance(); NodeType_t getOwnerType() const { return _ownerType; } void setOwnerType(NodeType_t ownerType) { _ownerType = ownerType; } @@ -72,7 +73,8 @@ public slots: signals: void limitOfSilentDomainCheckInsReached(); private: - NodeList(char ownerType, unsigned short socketListenPort, unsigned short dtlsListenPort); + NodeList() : LimitedNodeList(0, 0) { assert(false); } // Not implemented, needed for DependencyManager templates compile + NodeList(char ownerType, unsigned short socketListenPort = 0, unsigned short dtlsListenPort = 0); NodeList(NodeList const&); // Don't implement, needed to avoid copies of singleton void operator=(NodeList const&); // Don't implement, needed to avoid copies of singleton From 0bd9ed469eedc66196175b2fe669522da917d9a8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 17 Dec 2014 15:28:25 -0800 Subject: [PATCH 04/16] Changed NodeList::getInstance() calls to use the DM --- assignment-client/src/Agent.cpp | 14 +++--- assignment-client/src/AssignmentClient.cpp | 8 ++-- assignment-client/src/audio/AudioMixer.cpp | 12 ++--- .../src/audio/AudioMixerClientData.cpp | 2 +- assignment-client/src/avatars/AvatarMixer.cpp | 10 ++-- .../src/entities/EntityServer.cpp | 7 +-- .../src/metavoxels/MetavoxelServer.cpp | 8 ++-- .../octree/OctreeInboundPacketProcessor.cpp | 4 +- .../src/octree/OctreeSendThread.cpp | 10 ++-- assignment-client/src/octree/OctreeServer.cpp | 16 +++---- .../octree/OctreeServerDatagramProcessor.cpp | 2 +- assignment-client/src/voxels/VoxelServer.cpp | 4 +- domain-server/src/DomainServer.cpp | 21 +++++---- interface/src/Application.cpp | 46 +++++++++---------- interface/src/Audio.cpp | 6 +-- interface/src/DatagramProcessor.cpp | 6 +-- interface/src/Menu.cpp | 8 ++-- interface/src/MetavoxelSystem.cpp | 8 ++-- interface/src/avatar/MyAvatar.cpp | 2 +- interface/src/ui/ApplicationOverlay.cpp | 2 +- interface/src/ui/NodeBounds.cpp | 2 +- interface/src/ui/OctreeStatsDialog.cpp | 2 +- interface/src/ui/Snapshot.cpp | 2 +- interface/src/ui/Stats.cpp | 6 +-- .../src/voxels/OctreePacketProcessor.cpp | 2 +- libraries/audio/src/AudioInjector.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 4 +- libraries/avatars/src/AvatarHashMap.cpp | 2 +- libraries/avatars/src/Player.cpp | 2 +- libraries/avatars/src/Recorder.cpp | 2 +- libraries/avatars/src/Recording.cpp | 2 +- libraries/metavoxels/src/Endpoint.cpp | 2 +- .../metavoxels/src/MetavoxelClientManager.cpp | 10 ++-- libraries/networking/src/AddressManager.cpp | 4 +- libraries/networking/src/DomainHandler.cpp | 4 +- libraries/networking/src/PacketSender.cpp | 2 +- .../networking/src/ThreadedAssignment.cpp | 16 +++---- libraries/octree/src/JurisdictionListener.cpp | 6 +-- libraries/octree/src/JurisdictionSender.cpp | 2 +- .../octree/src/OctreeEditPacketSender.cpp | 10 ++-- libraries/octree/src/OctreeHeadlessViewer.cpp | 4 +- libraries/script-engine/src/ScriptEngine.cpp | 4 +- 42 files changed, 147 insertions(+), 141 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index f3efccf31a..bd55a4a3e0 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -55,7 +55,7 @@ Agent::Agent(const QByteArray& packet) : void Agent::readPendingDatagrams() { QByteArray receivedPacket; HifiSockAddr senderSockAddr; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); while (readAvailableDatagram(receivedPacket, senderSockAddr)) { if (nodeList->packetVersionAndHashMatch(receivedPacket)) { @@ -113,7 +113,7 @@ void Agent::readPendingDatagrams() { // TODO: this needs to be fixed, the goal is to test the packet version for the piggyback, but // this is testing the version and hash of the original packet // need to use numBytesArithmeticCodingFromBuffer()... - if (!NodeList::getInstance()->packetVersionAndHashMatch(receivedPacket)) { + if (!DependencyManager::get()->packetVersionAndHashMatch(receivedPacket)) { return; // bail since piggyback data doesn't match our versioning } } else { @@ -141,7 +141,7 @@ void Agent::readPendingDatagrams() { // let this continue through to the NodeList so it updates last heard timestamp // for the sending audio mixer - NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); + DependencyManager::get()->processNodeData(senderSockAddr, receivedPacket); } else if (datagramPacketType == PacketTypeBulkAvatarData || datagramPacketType == PacketTypeAvatarIdentity || datagramPacketType == PacketTypeAvatarBillboard @@ -151,9 +151,9 @@ void Agent::readPendingDatagrams() { // let this continue through to the NodeList so it updates last heard timestamp // for the sending avatar-mixer - NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); + DependencyManager::get()->processNodeData(senderSockAddr, receivedPacket); } else { - NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); + DependencyManager::get()->processNodeData(senderSockAddr, receivedPacket); } } } @@ -164,7 +164,7 @@ const QString AGENT_LOGGING_NAME = "agent"; void Agent::run() { ThreadedAssignment::commonInit(AGENT_LOGGING_NAME, NodeType::Agent); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer @@ -176,7 +176,7 @@ void Agent::run() { QUrl scriptURL; if (_payload.isEmpty()) { scriptURL = QUrl(QString("http://%1:%2/assignment/%3") - .arg(NodeList::getInstance()->getDomainHandler().getIP().toString()) + .arg(DependencyManager::get()->getDomainHandler().getIP().toString()) .arg(DOMAIN_SERVER_HTTP_PORT) .arg(uuidStringWithoutCurlyBraces(_uuid))); } else { diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 386d6e8a1d..51bd32f41b 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -93,7 +93,7 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) : } // create a NodeList as an unassigned client - NodeList* nodeList = NodeList::createInstance(NodeType::Unassigned); + auto nodeList = DependencyManager::set(NodeType::Unassigned); quint16 assignmentServerPort = DEFAULT_DOMAIN_SERVER_PORT; @@ -136,7 +136,7 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) : void AssignmentClient::sendAssignmentRequest() { if (!_currentAssignment) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (_assignmentServerHostname == "localhost") { // we want to check again for the local domain-server port in case the DS has restarted @@ -173,7 +173,7 @@ void AssignmentClient::sendAssignmentRequest() { } void AssignmentClient::readPendingDatagrams() { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); QByteArray receivedPacket; HifiSockAddr senderSockAddr; @@ -260,7 +260,7 @@ void AssignmentClient::assignmentCompleted() { qDebug("Assignment finished or never started - waiting for new assignment."); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); // have us handle incoming NodeList datagrams again disconnect(&nodeList->getNodeSocket(), 0, _currentAssignment.data(), 0); diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index e8ff072cc7..6218ae7f9d 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -440,7 +440,7 @@ int AudioMixer::prepareMixForListeningNode(Node* node) { // loop through all other nodes that have sufficient audio to mix int streamsMixed = 0; - NodeList::getInstance()->eachNode([&](const SharedNodePointer& otherNode){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& otherNode){ if (otherNode->getLinkedData()) { AudioMixerClientData* otherNodeClientData = (AudioMixerClientData*) otherNode->getLinkedData(); @@ -520,12 +520,12 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) { memcpy(envDataAt, &wetLevel, sizeof(float)); envDataAt += sizeof(float); } - NodeList::getInstance()->writeDatagram(clientEnvBuffer, envDataAt - clientEnvBuffer, node); + DependencyManager::get()->writeDatagram(clientEnvBuffer, envDataAt - clientEnvBuffer, node); } } void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (nodeList->packetVersionAndHashMatch(receivedPacket)) { // pull any new audio data from nodes off of the network stack @@ -606,7 +606,7 @@ void AudioMixer::sendStatsPacket() { somethingToSend = true; sizeOfStats += property.size() + value.size(); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); int clientNumber = 0; @@ -639,7 +639,7 @@ void AudioMixer::run() { ThreadedAssignment::commonInit(AUDIO_MIXER_LOGGING_TARGET_NAME, NodeType::AudioMixer); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); // we do not want this event loop to be the handler for UDP datagrams, so disconnect disconnect(&nodeList->getNodeSocket(), 0, this, 0); @@ -892,7 +892,7 @@ void AudioMixer::perSecondActions() { _timeSpentPerHashMatchCallStats.getWindowSum() / WINDOW_LENGTH_USECS * 100.0, _timeSpentPerHashMatchCallStats.getCurrentIntervalSum() / USECS_PER_SECOND * 100.0); - NodeList::getInstance()->eachNode([](const SharedNodePointer& node) { + DependencyManager::get()->eachNode([](const SharedNodePointer& node) { if (node->getLinkedData()) { AudioMixerClientData* nodeData = (AudioMixerClientData*)node->getLinkedData(); diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 26178eb2af..61f9e544e4 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -147,7 +147,7 @@ void AudioMixerClientData::sendAudioStreamStatsPackets(const SharedNodePointer& removeDeadInjectedStreams(); char packet[MAX_PACKET_SIZE]; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); // The append flag is a boolean value that will be packed right after the header. The first packet sent // inside this method will have 0 for this flag, while every subsequent packet will have 1 for this flag. diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 671fb17bc8..9616c8cb21 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -41,7 +41,7 @@ AvatarMixer::AvatarMixer(const QByteArray& packet) : _sumIdentityPackets(0) { // make sure we hear about node kills so we can tell the other nodes - connect(NodeList::getInstance(), &NodeList::nodeKilled, this, &AvatarMixer::nodeKilled); + connect(DependencyManager::get().data(), &NodeList::nodeKilled, this, &AvatarMixer::nodeKilled); } AvatarMixer::~AvatarMixer() { @@ -117,7 +117,7 @@ void AvatarMixer::broadcastAvatarData() { int numPacketHeaderBytes = populatePacketHeader(mixedAvatarByteArray, PacketTypeBulkAvatarData); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); AvatarMixerClientData* nodeData = NULL; AvatarMixerClientData* otherNodeData = NULL; @@ -222,7 +222,7 @@ void AvatarMixer::nodeKilled(SharedNodePointer killedNode) { QByteArray killPacket = byteArrayWithPopulatedHeader(PacketTypeKillAvatar); killPacket += killedNode->getUUID().toRfc4122(); - NodeList::getInstance()->broadcastToNodes(killPacket, + DependencyManager::get()->broadcastToNodes(killPacket, NodeSet() << NodeType::Agent); } } @@ -231,7 +231,7 @@ void AvatarMixer::readPendingDatagrams() { QByteArray receivedPacket; HifiSockAddr senderSockAddr; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); while (readAvailableDatagram(receivedPacket, senderSockAddr)) { if (nodeList->packetVersionAndHashMatch(receivedPacket)) { @@ -309,7 +309,7 @@ void AvatarMixer::sendStatsPacket() { void AvatarMixer::run() { ThreadedAssignment::commonInit(AVATAR_MIXER_LOGGING_NAME, NodeType::AvatarMixer); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->addNodeTypeToInterestSet(NodeType::Agent); nodeList->linkedDataCreateCallback = attachAvatarDataToNode; diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index af450782a2..d882ea19ac 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -76,7 +76,7 @@ void EntityServer::entityCreated(const EntityItem& newEntity, const SharedNodePo copyAt += sizeof(entityID); packetLength += sizeof(entityID); - NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, senderNode); + DependencyManager::get()->writeDatagram((char*) outputBuffer, packetLength, senderNode); } @@ -114,7 +114,8 @@ int EntityServer::sendSpecialPacket(const SharedNodePointer& node, OctreeQueryNo hasMoreToSend = tree->encodeEntitiesDeletedSince(queryNode->getSequenceNumber(), deletedEntitiesSentAt, outputBuffer, MAX_PACKET_SIZE, packetLength); - NodeList::getInstance()->writeDatagram((char*) outputBuffer, packetLength, SharedNodePointer(node)); + DependencyManager::get()->writeDatagram((char*) outputBuffer, packetLength, + SharedNodePointer(node)); queryNode->packetSent(outputBuffer, packetLength); packetsSent++; } @@ -132,7 +133,7 @@ void EntityServer::pruneDeletedEntities() { quint64 earliestLastDeletedEntitiesSent = usecTimestampNow() + 1; // in the future - NodeList::getInstance()->eachNode([&earliestLastDeletedEntitiesSent](const SharedNodePointer& node) { + DependencyManager::get()->eachNode([&earliestLastDeletedEntitiesSent](const SharedNodePointer& node) { if (node->getLinkedData()) { EntityNodeData* nodeData = static_cast(node->getLinkedData()); quint64 nodeLastDeletedEntitiesSentAt = nodeData->getLastDeletedEntitiesSentAt(); diff --git a/assignment-client/src/metavoxels/MetavoxelServer.cpp b/assignment-client/src/metavoxels/MetavoxelServer.cpp index 89b3102391..43c24f218d 100644 --- a/assignment-client/src/metavoxels/MetavoxelServer.cpp +++ b/assignment-client/src/metavoxels/MetavoxelServer.cpp @@ -60,11 +60,11 @@ const QString METAVOXEL_SERVER_LOGGING_NAME = "metavoxel-server"; void MetavoxelServer::run() { commonInit(METAVOXEL_SERVER_LOGGING_NAME, NodeType::MetavoxelServer); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->addNodeTypeToInterestSet(NodeType::Agent); - connect(nodeList, &NodeList::nodeAdded, this, &MetavoxelServer::maybeAttachSession); - connect(nodeList, &NodeList::nodeKilled, this, &MetavoxelServer::maybeDeleteSession); + connect(nodeList.data(), &NodeList::nodeAdded, this, &MetavoxelServer::maybeAttachSession); + connect(nodeList.data(), &NodeList::nodeKilled, this, &MetavoxelServer::maybeDeleteSession); // initialize Bitstream before using it in multiple threads Bitstream::preThreadingInit(); @@ -101,7 +101,7 @@ void MetavoxelServer::readPendingDatagrams() { QByteArray receivedPacket; HifiSockAddr senderSockAddr; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); while (readAvailableDatagram(receivedPacket, senderSockAddr)) { if (nodeList->packetVersionAndHashMatch(receivedPacket)) { diff --git a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp index e880615b71..18988a919c 100644 --- a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp +++ b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp @@ -261,7 +261,7 @@ int OctreeInboundPacketProcessor::sendNackPackets() { continue; } - const SharedNodePointer& destinationNode = NodeList::getInstance()->nodeWithUUID(nodeUUID); + const SharedNodePointer& destinationNode = DependencyManager::get()->nodeWithUUID(nodeUUID); // retrieve sequence number stats of node, prune its missing set SequenceNumberStats& sequenceNumberStats = nodeStats.getIncomingEditSequenceNumberStats(); @@ -299,7 +299,7 @@ int OctreeInboundPacketProcessor::sendNackPackets() { numSequenceNumbersAvailable -= numSequenceNumbers; // send it - NodeList::getInstance()->writeUnverifiedDatagram(packet, dataAt - packet, destinationNode); + DependencyManager::get()->writeUnverifiedDatagram(packet, dataAt - packet, destinationNode); packetsSent++; qDebug() << "NACK Sent back to editor/client... destinationNode=" << nodeUUID; diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 46ea49e9a7..2e13b43799 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -179,12 +179,12 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes // actually send it OctreeServer::didCallWriteDatagram(this); - NodeList::getInstance()->writeDatagram((char*) statsMessage, statsMessageLength, _node); + DependencyManager::get()->writeDatagram((char*) statsMessage, statsMessageLength, _node); packetSent = true; } else { // not enough room in the packet, send two packets OctreeServer::didCallWriteDatagram(this); - NodeList::getInstance()->writeDatagram((char*) statsMessage, statsMessageLength, _node); + DependencyManager::get()->writeDatagram((char*) statsMessage, statsMessageLength, _node); // since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since // there was nothing else to send. @@ -213,7 +213,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes packetsSent++; OctreeServer::didCallWriteDatagram(this); - NodeList::getInstance()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); + DependencyManager::get()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); packetSent = true; thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); @@ -242,7 +242,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes if (nodeData->isPacketWaiting() && !nodeData->isShuttingDown()) { // just send the voxel packet OctreeServer::didCallWriteDatagram(this); - NodeList::getInstance()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); + DependencyManager::get()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); packetSent = true; int thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); @@ -574,7 +574,7 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus while (nodeData->hasNextNackedPacket() && packetsSentThisInterval < maxPacketsPerInterval) { const QByteArray* packet = nodeData->getNextNackedPacket(); if (packet) { - NodeList::getInstance()->writeDatagram(*packet, _node); + DependencyManager::get()->writeDatagram(*packet, _node); truePacketsSent++; packetsSentThisInterval++; diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 4be2c9873f..c123dd4349 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -829,7 +829,7 @@ void OctreeServer::parsePayload() { } void OctreeServer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (nodeList->packetVersionAndHashMatch(receivedPacket)) { PacketType packetType = packetTypeForPacket(receivedPacket); @@ -865,13 +865,13 @@ void OctreeServer::readPendingDatagram(const QByteArray& receivedPacket, const H _octreeInboundPacketProcessor->queueReceivedPacket(matchingNode, receivedPacket); } else { // let processNodeData handle it. - NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); + DependencyManager::get()->processNodeData(senderSockAddr, receivedPacket); } } } void OctreeServer::setupDatagramProcessingThread() { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); // we do not want this event loop to be the handler for UDP datagrams, so disconnect disconnect(&nodeList->getNodeSocket(), 0, this, 0); @@ -960,7 +960,7 @@ void OctreeServer::readConfiguration() { } // wait until we have the domain-server settings, otherwise we bail - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); DomainHandler& domainHandler = nodeList->getDomainHandler(); qDebug() << "Waiting for domain settings from domain-server."; @@ -1106,7 +1106,7 @@ void OctreeServer::run() { _tree->setIsServer(true); // make sure our NodeList knows what type we are - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->setOwnerType(getMyNodeType()); @@ -1223,7 +1223,7 @@ void OctreeServer::aboutToFinish() { qDebug() << qPrintable(_safeServerName) << "inform Octree Inbound Packet Processor that we are shutting down..."; _octreeInboundPacketProcessor->shuttingDown(); - NodeList::getInstance()->eachNode([this](const SharedNodePointer& node) { + DependencyManager::get()->eachNode([this](const SharedNodePointer& node) { qDebug() << qPrintable(_safeServerName) << "server about to finish while node still connected node:" << *node; forceNodeShutdown(node); }); @@ -1388,7 +1388,7 @@ void OctreeServer::sendStatsPacket() { statsObject2[baseName + QString(".2.outbound.timing.5.avgSendTime")] = getAveragePacketSendingTime(); statsObject2[baseName + QString(".2.outbound.timing.5.nodeWaitTime")] = getAverageNodeWaitTime(); - NodeList::getInstance()->sendStatsToDomainServer(statsObject2); + DependencyManager::get()->sendStatsToDomainServer(statsObject2); static QJsonObject statsObject3; @@ -1407,7 +1407,7 @@ void OctreeServer::sendStatsPacket() { statsObject3[baseName + QString(".3.inbound.timing.5.avgLockWaitTimePerElement")] = (double)_octreeInboundPacketProcessor->getAverageLockWaitTimePerElement(); - NodeList::getInstance()->sendStatsToDomainServer(statsObject3); + DependencyManager::get()->sendStatsToDomainServer(statsObject3); } QMap OctreeServer::_threadsDidProcess; diff --git a/assignment-client/src/octree/OctreeServerDatagramProcessor.cpp b/assignment-client/src/octree/OctreeServerDatagramProcessor.cpp index 0d3c622900..9f2ae72147 100644 --- a/assignment-client/src/octree/OctreeServerDatagramProcessor.cpp +++ b/assignment-client/src/octree/OctreeServerDatagramProcessor.cpp @@ -45,7 +45,7 @@ void OctreeServerDatagramProcessor::readPendingDatagrams() { PacketType packetType = packetTypeForPacket(incomingPacket); if (packetType == PacketTypePing) { - NodeList::getInstance()->processNodeData(senderSockAddr, incomingPacket); + DependencyManager::get()->processNodeData(senderSockAddr, incomingPacket); return; // don't emit } diff --git a/assignment-client/src/voxels/VoxelServer.cpp b/assignment-client/src/voxels/VoxelServer.cpp index a83e3e99e3..eb7eff4930 100644 --- a/assignment-client/src/voxels/VoxelServer.cpp +++ b/assignment-client/src/voxels/VoxelServer.cpp @@ -74,7 +74,7 @@ int VoxelServer::sendSpecialPacket(const SharedNodePointer& node, OctreeQueryNod envPacketLength += getEnvironmentData(i)->getBroadcastData(_tempOutputBuffer + envPacketLength); } - NodeList::getInstance()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node)); + DependencyManager::get()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node)); queryNode->packetSent(_tempOutputBuffer, envPacketLength); packetsSent = 1; @@ -98,5 +98,5 @@ void VoxelServer::readAdditionalConfiguration(const QJsonObject& settingsSection } qDebug("Sending environments=%s", debug::valueOf(_sendEnvironments)); - NodeList::getInstance()->addNodeTypeToInterestSet(NodeType::AnimationServer); + DependencyManager::get()->addNodeTypeToInterestSet(NodeType::AnimationServer); } diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 73092b694b..e6fcef62c1 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -262,8 +262,8 @@ void DomainServer::setupNodeListAndAssignments(const QUuid& sessionUUID) { nodeList->setSessionUUID(idValueVariant->toString()); } - connect(nodeList, &LimitedNodeList::nodeAdded, this, &DomainServer::nodeAdded); - connect(nodeList, &LimitedNodeList::nodeKilled, this, &DomainServer::nodeKilled); + connect(nodeList.data(), &LimitedNodeList::nodeAdded, this, &DomainServer::nodeAdded); + connect(nodeList.data(), &LimitedNodeList::nodeKilled, this, &DomainServer::nodeKilled); QTimer* silentNodeTimer = new QTimer(this); connect(silentNodeTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes())); @@ -368,8 +368,10 @@ void DomainServer::setupAutomaticNetworking() { iceHeartbeatTimer->start(ICE_HEARBEAT_INTERVAL_MSECS); // call our sendHeartbeatToIceServer immediately anytime a local or public socket changes - connect(nodeList, &LimitedNodeList::localSockAddrChanged, this, &DomainServer::sendHeartbeatToIceServer); - connect(nodeList, &LimitedNodeList::publicSockAddrChanged, this, &DomainServer::sendHeartbeatToIceServer); + connect(nodeList.data(), &LimitedNodeList::localSockAddrChanged, + this, &DomainServer::sendHeartbeatToIceServer); + connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged, + this, &DomainServer::sendHeartbeatToIceServer); // attempt to update our public socket now, this will send a heartbeat once we get public socket requestCurrentPublicSocketViaSTUN(); @@ -400,7 +402,8 @@ void DomainServer::setupAutomaticNetworking() { dynamicIPTimer->start(STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS); // send public socket changes to the data server so nodes can find us at our new IP - connect(nodeList, &LimitedNodeList::publicSockAddrChanged, this, &DomainServer::performIPAddressUpdate); + connect(nodeList.data(), &LimitedNodeList::publicSockAddrChanged, + this, &DomainServer::performIPAddressUpdate); // attempt to update our sockets now requestCurrentPublicSocketViaSTUN(); @@ -995,7 +998,7 @@ void DomainServer::readAvailableDatagrams() { void DomainServer::setupPendingAssignmentCredits() { // enumerate the NodeList to find the assigned nodes - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ DomainServerNodeData* nodeData = reinterpret_cast(node->getLinkedData()); if (!nodeData->getAssignmentUUID().isNull() && !nodeData->getWalletUUID().isNull()) { @@ -1155,7 +1158,7 @@ void DomainServer::sendHeartbeatToDataServer(const QString& networkAddress) { // add the number of currently connected agent users int numConnectedAuthedUsers = 0; - NodeList::getInstance()->eachNode([&numConnectedAuthedUsers](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&numConnectedAuthedUsers](const SharedNodePointer& node){ if (node->getLinkedData() && !static_cast(node->getLinkedData())->getUsername().isEmpty()) { ++numConnectedAuthedUsers; } @@ -1471,7 +1474,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url QJsonObject assignedNodesJSON; // enumerate the NodeList to find the assigned nodes - NodeList::getInstance()->eachNode([this, &assignedNodesJSON](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([this, &assignedNodesJSON](const SharedNodePointer& node){ DomainServerNodeData* nodeData = reinterpret_cast(node->getLinkedData()); if (!nodeData->getAssignmentUUID().isNull()) { @@ -2066,7 +2069,7 @@ void DomainServer::addStaticAssignmentsToQueue() { // add any of the un-matched static assignments to the queue // enumerate the nodes and check if there is one with an attached assignment with matching UUID - if (!NodeList::getInstance()->nodeWithUUID(staticAssignment->data()->getUUID())) { + if (!DependencyManager::get()->nodeWithUUID(staticAssignment->data()->getUUID())) { // this assignment has not been fulfilled - reset the UUID and add it to the assignment queue refreshStaticAssignmentAndAddToQueue(*staticAssignment); } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index eed3edcb34..b5fa221bc5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -239,8 +239,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : _nodeThread->setPriority(QThread::TimeCriticalPriority); // put the NodeList and datagram processing on the node thread - NodeList* nodeList = NodeList::createInstance(NodeType::Agent, listenPort); - + auto nodeList = DependencyManager::set(NodeType::Agent, listenPort); + nodeList->moveToThread(_nodeThread); _datagramProcessor.moveToThread(_nodeThread); @@ -272,13 +272,13 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(locationUpdateTimer, &QTimer::timeout, this, &Application::updateLocationInServer); locationUpdateTimer->start(DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS); - connect(nodeList, &NodeList::nodeAdded, this, &Application::nodeAdded); - connect(nodeList, &NodeList::nodeKilled, this, &Application::nodeKilled); - connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer))); - connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer))); - connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer))); - connect(nodeList, &NodeList::uuidChanged, _myAvatar, &MyAvatar::setSessionUUID); - connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset); + connect(nodeList.data(), &NodeList::nodeAdded, this, &Application::nodeAdded); + connect(nodeList.data(), &NodeList::nodeKilled, this, &Application::nodeKilled); + connect(nodeList.data(), SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer))); + connect(nodeList.data(), SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer))); + connect(nodeList.data(), SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer))); + connect(nodeList.data(), &NodeList::uuidChanged, _myAvatar, &MyAvatar::setSessionUUID); + connect(nodeList.data(), &NodeList::limitOfSilentDomainCheckInsReached, nodeList.data(), &NodeList::reset); // connect to appropriate slots on AccountManager AccountManager& accountManager = AccountManager::getInstance(); @@ -340,7 +340,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : // move the silentNodeTimer to the _nodeThread QTimer* silentNodeTimer = new QTimer(); - connect(silentNodeTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes())); + connect(silentNodeTimer, SIGNAL(timeout()), nodeList.data(), SLOT(removeSilentNodes())); silentNodeTimer->start(NODE_SILENCE_THRESHOLD_MSECS); silentNodeTimer->moveToThread(_nodeThread); @@ -812,7 +812,7 @@ void Application::controlledBroadcastToNodes(const QByteArray& packet, const Nod } // Perform the broadcast for one type - int nReceivingNodes = NodeList::getInstance()->broadcastToNodes(packet, NodeSet() << type); + int nReceivingNodes = DependencyManager::get()->broadcastToNodes(packet, NodeSet() << type); // Feed number of bytes to corresponding channel of the bandwidth meter, if any (done otherwise) BandwidthMeter::ChannelIndex channel; @@ -1449,7 +1449,7 @@ void Application::dropEvent(QDropEvent *event) { } void Application::sendPingPackets() { - QByteArray pingPacket = NodeList::getInstance()->constructPingPacket(); + QByteArray pingPacket = DependencyManager::get()->constructPingPacket(); controlledBroadcastToNodes(pingPacket, NodeSet() << NodeType::VoxelServer << NodeType::EntityServer << NodeType::AudioMixer << NodeType::AvatarMixer @@ -1475,7 +1475,7 @@ void Application::timer() { _timerStart.start(); // ask the node list to check in with the domain server - NodeList::getInstance()->sendDomainServerCheckIn(); + DependencyManager::get()->sendDomainServerCheckIn(); } void Application::idle() { @@ -1994,7 +1994,7 @@ void Application::init() { Leapmotion::init(); // fire off an immediate domain-server check in now that settings are loaded - NodeList::getInstance()->sendDomainServerCheckIn(); + DependencyManager::get()->sendDomainServerCheckIn(); // Set up VoxelSystem after loading preferences so we can get the desired max voxel count _voxels.setMaxVoxels(Menu::getInstance()->getMaxVoxels()); @@ -2464,7 +2464,7 @@ int Application::sendNackPackets() { char packet[MAX_PACKET_SIZE]; // iterates thru all nodes in NodeList - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([&](const SharedNodePointer& node){ @@ -2563,7 +2563,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType, Node int inViewServers = 0; int unknownJurisdictionServers = 0; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([&](const SharedNodePointer& node) { // only send to the NodeTypes that are serverType @@ -3636,7 +3636,7 @@ void Application::uploadModel(ModelType modelType) { void Application::updateWindowTitle(){ QString buildVersion = " (build " + applicationVersion() + ")"; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); QString connectionStatus = nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED) "; QString username = AccountManager::getInstance().getAccountInfo().getUsername(); @@ -3663,7 +3663,7 @@ void Application::updateWindowTitle(){ void Application::updateLocationInServer() { AccountManager& accountManager = AccountManager::getInstance(); - DomainHandler& domainHandler = NodeList::getInstance()->getDomainHandler(); + DomainHandler& domainHandler = DependencyManager::get()->getDomainHandler(); if (accountManager.isLoggedIn() && domainHandler.isConnected() && !domainHandler.getUUID().isNull()) { @@ -3689,14 +3689,14 @@ void Application::updateLocationInServer() { } void Application::changeDomainHostname(const QString &newDomainHostname) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (!nodeList->getDomainHandler().isCurrentHostname(newDomainHostname)) { // tell the MyAvatar object to send a kill packet so that it dissapears from its old avatar mixer immediately _myAvatar->sendKillAvatar(); // call the domain hostname change as a queued connection on the nodelist - QMetaObject::invokeMethod(&NodeList::getInstance()->getDomainHandler(), "setHostname", + QMetaObject::invokeMethod(&DependencyManager::get()->getDomainHandler(), "setHostname", Q_ARG(const QString&, newDomainHostname)); } } @@ -3733,7 +3733,7 @@ void Application::domainChanged(const QString& domainHostname) { void Application::connectedToDomain(const QString& hostname) { AccountManager& accountManager = AccountManager::getInstance(); - const QUuid& domainID = NodeList::getInstance()->getDomainHandler().getUUID(); + const QUuid& domainID = DependencyManager::get()->getDomainHandler().getUUID(); if (accountManager.isLoggedIn() && !domainID.isNull()) { // update our data-server with the domain-server we're logged in with @@ -4063,8 +4063,8 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri // when the application is about to quit, stop our script engine so it unwinds properly connect(this, SIGNAL(aboutToQuit()), scriptEngine, SLOT(stop())); - NodeList* nodeList = NodeList::getInstance(); - connect(nodeList, &NodeList::nodeKilled, scriptEngine, &ScriptEngine::nodeKilled); + auto nodeList = DependencyManager::get(); + connect(nodeList.data(), &NodeList::nodeKilled, scriptEngine, &ScriptEngine::nodeKilled); scriptEngine->moveToThread(workerThread); diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 2511fb4480..d94819c0ea 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -847,7 +847,7 @@ void Audio::handleAudioInput() { _scopeInputOffset = addBufferToScope(_scopeInput, _scopeInputOffset, networkAudioSamples, NETWORK_SAMPLES_PER_FRAME, monoAudioChannel, numMonoAudioChannels); } - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer); if (_recorder && _recorder.data()->isRecording()) { @@ -1086,7 +1086,7 @@ void Audio::sendDownstreamAudioStatsPacket() { dataAt += sizeof(AudioStreamStats); // send packet - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer); nodeList->writeDatagram(packet, dataAt - packet, audioMixer); } @@ -1516,7 +1516,7 @@ void Audio::renderStats(const float* color, int width, int height) { float audioInputBufferLatency = 0.0f, inputRingBufferLatency = 0.0f, networkRoundtripLatency = 0.0f, mixerRingBufferLatency = 0.0f, outputRingBufferLatency = 0.0f, audioOutputBufferLatency = 0.0f; AudioStreamStats downstreamAudioStreamStats = _receivedAudioStream.getAudioStreamStats(); - SharedNodePointer audioMixerNodePointer = NodeList::getInstance()->soloNodeOfType(NodeType::AudioMixer); + SharedNodePointer audioMixerNodePointer = DependencyManager::get()->soloNodeOfType(NodeType::AudioMixer); if (!audioMixerNodePointer.isNull()) { audioInputBufferLatency = _audioInputMsecsReadStats.getWindowAverage(); inputRingBufferLatency = getInputRingBufferAverageMsecsAvailable(); diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index 96680423ed..78530ed43f 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -34,9 +34,9 @@ void DatagramProcessor::processDatagrams() { static QByteArray incomingPacket; Application* application = Application::getInstance(); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); - while (NodeList::getInstance()->getNodeSocket().hasPendingDatagrams()) { + while (DependencyManager::get()->getNodeSocket().hasPendingDatagrams()) { incomingPacket.resize(nodeList->getNodeSocket().pendingDatagramSize()); nodeList->getNodeSocket().readDatagram(incomingPacket.data(), incomingPacket.size(), senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()); @@ -102,7 +102,7 @@ void DatagramProcessor::processDatagrams() { qDebug("got an Octree data or erase message, sequence:%d flightTime:%d", sequence, flightTime); } - SharedNodePointer matchedNode = NodeList::getInstance()->sendingNodeForPacket(incomingPacket); + SharedNodePointer matchedNode = DependencyManager::get()->sendingNodeForPacket(incomingPacket); if (matchedNode) { // add this packet to our list of voxel packets and process them on the voxel processing diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f0c2a687a4..f15339db51 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -708,7 +708,7 @@ void Menu::loadSettings(QSettings* settings) { Application::getInstance()->updateWindowTitle(); // notify that a settings has changed - connect(&NodeList::getInstance()->getDomainHandler(), &DomainHandler::hostnameChanged, this, &Menu::bumpSettings); + connect(&DependencyManager::get()->getDomainHandler(), &DomainHandler::hostnameChanged, this, &Menu::bumpSettings); // MyAvatar caches some menu options, so we have to update them whenever we load settings. // TODO: cache more settings in MyAvatar that are checked with very high frequency. @@ -1175,11 +1175,11 @@ void Menu::muteEnvironment() { QByteArray mutePacket(packet, packetSize); // grab our audio mixer from the NodeList, if it exists - SharedNodePointer audioMixer = NodeList::getInstance()->soloNodeOfType(NodeType::AudioMixer); + SharedNodePointer audioMixer = DependencyManager::get()->soloNodeOfType(NodeType::AudioMixer); if (audioMixer) { // send off this mute packet - NodeList::getInstance()->writeDatagram(mutePacket, audioMixer); + DependencyManager::get()->writeDatagram(mutePacket, audioMixer); } free(packet); @@ -1234,7 +1234,7 @@ void Menu::nameLocation() { return; } - DomainHandler& domainHandler = NodeList::getInstance()->getDomainHandler(); + DomainHandler& domainHandler = DependencyManager::get()->getDomainHandler(); if (domainHandler.getUUID().isNull()) { const QString UNREGISTERED_DOMAIN_MESSAGE = "This domain is not registered with High Fidelity." "\n\nYou cannot create a global location in an unregistered domain."; diff --git a/interface/src/MetavoxelSystem.cpp b/interface/src/MetavoxelSystem.cpp index 9a26ca6bb5..1368f42603 100644 --- a/interface/src/MetavoxelSystem.cpp +++ b/interface/src/MetavoxelSystem.cpp @@ -496,7 +496,7 @@ void MetavoxelSystem::render() { } void MetavoxelSystem::refreshVoxelData() { - NodeList::getInstance()->eachNode([](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([](const SharedNodePointer& node){ if (node->getType() == NodeType::MetavoxelServer) { QMutexLocker locker(&node->getMutex()); MetavoxelSystemClient* client = static_cast(node->getLinkedData()); @@ -819,7 +819,7 @@ MetavoxelClient* MetavoxelSystem::createClient(const SharedNodePointer& node) { } void MetavoxelSystem::guideToAugmented(MetavoxelVisitor& visitor, bool render) { - NodeList::getInstance()->eachNode([&visitor, &render](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&visitor, &render](const SharedNodePointer& node){ if (node->getType() == NodeType::MetavoxelServer) { QMutexLocker locker(&node->getMutex()); MetavoxelSystemClient* client = static_cast(node->getLinkedData()); @@ -1045,7 +1045,7 @@ SendDelayer::SendDelayer(const SharedNodePointer& node, const QByteArray& data) } void SendDelayer::timerEvent(QTimerEvent* event) { - NodeList::getInstance()->writeDatagram(_data, _node); + DependencyManager::get()->writeDatagram(_data, _node); deleteLater(); } @@ -1068,7 +1068,7 @@ void MetavoxelSystemClient::sendDatagram(const QByteArray& data) { delayer->startTimer(delay); } else { - NodeList::getInstance()->writeDatagram(data, _node); + DependencyManager::get()->writeDatagram(data, _node); } Application::getInstance()->getBandwidthMeter()->outputStream(BandwidthMeter::METAVOXELS).updateValue(data.size()); } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 6b5d65fbfb..32677dfd30 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -918,7 +918,7 @@ int MyAvatar::parseDataAtOffset(const QByteArray& packet, int offset) { void MyAvatar::sendKillAvatar() { QByteArray killPacket = byteArrayWithPopulatedHeader(PacketTypeKillAvatar); - NodeList::getInstance()->broadcastToNodes(killPacket, NodeSet() << NodeType::AvatarMixer); + DependencyManager::get()->broadcastToNodes(killPacket, NodeSet() << NodeType::AvatarMixer); } void MyAvatar::updateLookAtTargetAvatar() { diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index ab85da125c..a0f1d03dc3 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -934,7 +934,7 @@ void ApplicationOverlay::renderStatsAndLogs() { } void ApplicationOverlay::renderDomainConnectionStatusBorder() { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (nodeList && !nodeList->getDomainHandler().isConnected()) { GLCanvas::SharedPointer glCanvas = DependencyManager::get(); diff --git a/interface/src/ui/NodeBounds.cpp b/interface/src/ui/NodeBounds.cpp index d3fe742ea4..59882d0df8 100644 --- a/interface/src/ui/NodeBounds.cpp +++ b/interface/src/ui/NodeBounds.cpp @@ -48,7 +48,7 @@ void NodeBounds::draw() { glm::vec3 selectedCenter; float selectedScale = 0; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([&](const SharedNodePointer& node){ NodeType_t nodeType = node->getType(); diff --git a/interface/src/ui/OctreeStatsDialog.cpp b/interface/src/ui/OctreeStatsDialog.cpp index 403b8827bd..394d210e8a 100644 --- a/interface/src/ui/OctreeStatsDialog.cpp +++ b/interface/src/ui/OctreeStatsDialog.cpp @@ -247,7 +247,7 @@ void OctreeStatsDialog::showOctreeServersOfType(int& serverCount, NodeType_t ser QLocale locale(QLocale::English); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are NodeType_t_VOXEL_SERVER diff --git a/interface/src/ui/Snapshot.cpp b/interface/src/ui/Snapshot.cpp index e3b512adcc..60fed78fce 100644 --- a/interface/src/ui/Snapshot.cpp +++ b/interface/src/ui/Snapshot.cpp @@ -101,7 +101,7 @@ QFile* Snapshot::savedFileForSnapshot(bool isTemporary) { shot.setText(ORIENTATION_Z, QString::number(orientation.z)); shot.setText(ORIENTATION_W, QString::number(orientation.w)); - shot.setText(DOMAIN_KEY, NodeList::getInstance()->getDomainHandler().getHostname()); + shot.setText(DOMAIN_KEY, DependencyManager::get()->getDomainHandler().getHostname()); QString formattedLocation = QString("%1_%2_%3").arg(location.x).arg(location.y).arg(location.z); // replace decimal . with '-' diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index ab3927a3ab..1402ad53cf 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -218,7 +218,7 @@ void Stats::display( // we need to take one avatar out so we don't include ourselves int totalAvatars = Application::getInstance()->getAvatarManager().size() - 1; - int totalServers = NodeList::getInstance()->size(); + int totalServers = DependencyManager::get()->size(); lines = _expanded ? 5 : 3; int columnOneWidth = _generalStatsWidth; @@ -318,7 +318,7 @@ void Stats::display( if (Menu::getInstance()->isOptionChecked(MenuOption::TestPing)) { int pingAudio = -1, pingAvatar = -1, pingVoxel = -1, pingVoxelMax = -1; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); SharedNodePointer audioMixerNode = nodeList->soloNodeOfType(NodeType::AudioMixer); SharedNodePointer avatarMixerNode = nodeList->soloNodeOfType(NodeType::AvatarMixer); @@ -423,7 +423,7 @@ void Stats::display( drawText(horizontalOffset, verticalOffset, scale, rotation, font, avatarBodyYaw, color); if (_expanded) { - SharedNodePointer avatarMixer = NodeList::getInstance()->soloNodeOfType(NodeType::AvatarMixer); + SharedNodePointer avatarMixer = DependencyManager::get()->soloNodeOfType(NodeType::AvatarMixer); if (avatarMixer) { sprintf(avatarMixerStats, "Avatar Mixer: %.f kbps, %.f pps", roundf(avatarMixer->getAverageKilobitsPerSecond()), diff --git a/interface/src/voxels/OctreePacketProcessor.cpp b/interface/src/voxels/OctreePacketProcessor.cpp index 9f53492e70..dad8b5a2b1 100644 --- a/interface/src/voxels/OctreePacketProcessor.cpp +++ b/interface/src/voxels/OctreePacketProcessor.cpp @@ -51,7 +51,7 @@ void OctreePacketProcessor::processPacket(const SharedNodePointer& sendingNode, // TODO: this does not look correct, the goal is to test the packet version for the piggyback, but // this is testing the version and hash of the original packet - if (!NodeList::getInstance()->packetVersionAndHashMatch(packet)) { + if (!DependencyManager::get()->packetVersionAndHashMatch(packet)) { return; // bail since piggyback data doesn't match our versioning } } else { diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index d31ab83976..89a9cf9d93 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -229,7 +229,7 @@ void AudioInjector::injectToMixer() { _audioData.data() + _currentSendPosition, bytesToCopy); // grab our audio mixer from the NodeList, if it exists - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer); // send off this audio packet diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 95432bc81a..70a60c3a00 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1096,7 +1096,7 @@ void AvatarData::sendIdentityPacket() { QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity); identityPacket.append(identityByteArray()); - NodeList::getInstance()->broadcastToNodes(identityPacket, NodeSet() << NodeType::AvatarMixer); + DependencyManager::get()->broadcastToNodes(identityPacket, NodeSet() << NodeType::AvatarMixer); } void AvatarData::sendBillboardPacket() { @@ -1104,7 +1104,7 @@ void AvatarData::sendBillboardPacket() { QByteArray billboardPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard); billboardPacket.append(_billboard); - NodeList::getInstance()->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer); + DependencyManager::get()->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer); } } diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 4f69eb2e3d..3d5af17ab9 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -18,7 +18,7 @@ AvatarHashMap::AvatarHashMap() : _avatarHash(), _lastOwnerSessionUUID() { - connect(NodeList::getInstance(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged); + connect(DependencyManager::get().data(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged); } diff --git a/libraries/avatars/src/Player.cpp b/libraries/avatars/src/Player.cpp index 9f01e98730..b215040666 100644 --- a/libraries/avatars/src/Player.cpp +++ b/libraries/avatars/src/Player.cpp @@ -63,7 +63,7 @@ void Player::startPlaying() { if (!isPaused()) { _currentContext.globalTimestamp = usecTimestampNow(); - _currentContext.domain = NodeList::getInstance()->getDomainHandler().getHostname(); + _currentContext.domain = DependencyManager::get()->getDomainHandler().getHostname(); _currentContext.position = _avatar->getPosition(); _currentContext.orientation = _avatar->getOrientation(); _currentContext.scale = _avatar->getTargetScale(); diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index b54c92744a..b90ded2e9a 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -42,7 +42,7 @@ void Recorder::startRecording() { RecordingContext& context = _recording->getContext(); context.globalTimestamp = usecTimestampNow(); - context.domain = NodeList::getInstance()->getDomainHandler().getHostname(); + context.domain = DependencyManager::get()->getDomainHandler().getHostname(); context.position = _avatar->getPosition(); context.orientation = _avatar->getOrientation(); context.scale = _avatar->getTargetScale(); diff --git a/libraries/avatars/src/Recording.cpp b/libraries/avatars/src/Recording.cpp index b39421d03a..437680c31a 100644 --- a/libraries/avatars/src/Recording.cpp +++ b/libraries/avatars/src/Recording.cpp @@ -670,7 +670,7 @@ RecordingPointer readRecordingFromRecFile(RecordingPointer recording, const QStr // Fake context RecordingContext& context = recording->getContext(); context.globalTimestamp = usecTimestampNow(); - context.domain = NodeList::getInstance()->getDomainHandler().getHostname(); + context.domain = DependencyManager::get()->getDomainHandler().getHostname(); context.position = glm::vec3(144.5f, 3.3f, 181.3f); context.orientation = glm::angleAxis(glm::radians(-92.5f), glm::vec3(0, 1, 0));; context.scale = baseFrame._scale; diff --git a/libraries/metavoxels/src/Endpoint.cpp b/libraries/metavoxels/src/Endpoint.cpp index 5a4e74ce08..a8a8f922cd 100644 --- a/libraries/metavoxels/src/Endpoint.cpp +++ b/libraries/metavoxels/src/Endpoint.cpp @@ -54,7 +54,7 @@ int Endpoint::parseData(const QByteArray& packet) { } void Endpoint::sendDatagram(const QByteArray& data) { - NodeList::getInstance()->writeDatagram(data, _node); + DependencyManager::get()->writeDatagram(data, _node); } void Endpoint::readMessage(Bitstream& in) { diff --git a/libraries/metavoxels/src/MetavoxelClientManager.cpp b/libraries/metavoxels/src/MetavoxelClientManager.cpp index dfc736edc9..0505dcf339 100644 --- a/libraries/metavoxels/src/MetavoxelClientManager.cpp +++ b/libraries/metavoxels/src/MetavoxelClientManager.cpp @@ -34,8 +34,10 @@ MetavoxelClientManager::~MetavoxelClientManager() { } void MetavoxelClientManager::init() { - connect(NodeList::getInstance(), &NodeList::nodeAdded, this, &MetavoxelClientManager::maybeAttachClient); - connect(NodeList::getInstance(), &NodeList::nodeKilled, this, &MetavoxelClientManager::maybeDeleteClient); + connect(DependencyManager::get().data(), &NodeList::nodeAdded, + this, &MetavoxelClientManager::maybeAttachClient); + connect(DependencyManager::get().data(), &NodeList::nodeKilled, + this, &MetavoxelClientManager::maybeDeleteClient); } SharedObjectPointer MetavoxelClientManager::findFirstRaySpannerIntersection(const glm::vec3& origin, @@ -43,7 +45,7 @@ SharedObjectPointer MetavoxelClientManager::findFirstRaySpannerIntersection(cons SharedObjectPointer closestSpanner; float closestDistance = FLT_MAX; - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ if (node->getType() == NodeType::MetavoxelServer) { QMutexLocker locker(&node->getMutex()); MetavoxelClient* client = static_cast(node->getLinkedData()); @@ -185,7 +187,7 @@ MetavoxelClient* MetavoxelClientManager::createClient(const SharedNodePointer& n } void MetavoxelClientManager::guide(MetavoxelVisitor& visitor) { - NodeList::getInstance()->eachNode([&visitor](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&visitor](const SharedNodePointer& node){ if (node->getType() == NodeType::MetavoxelServer) { QMutexLocker locker(&node->getMutex()); MetavoxelClient* client = static_cast(node->getLinkedData()); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 81b3a1328b..14288de03d 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -35,7 +35,7 @@ AddressManager::AddressManager() : } bool AddressManager::isConnected() { - return NodeList::getInstance()->getDomainHandler().isConnected(); + return DependencyManager::get()->getDomainHandler().isConnected(); } const QUrl AddressManager::currentAddress() const { @@ -73,7 +73,7 @@ const QString AddressManager::currentPath(bool withOrientation) const { } QString AddressManager::getDomainID() const { - const QUuid& domainID = NodeList::getInstance()->getDomainHandler().getUUID(); + const QUuid& domainID = DependencyManager::get()->getDomainHandler().getUUID(); return domainID.isNull() ? "" : uuidStringWithoutCurlyBraces(domainID); } diff --git a/libraries/networking/src/DomainHandler.cpp b/libraries/networking/src/DomainHandler.cpp index 6091b0cdd2..76f8f2decd 100644 --- a/libraries/networking/src/DomainHandler.cpp +++ b/libraries/networking/src/DomainHandler.cpp @@ -198,7 +198,7 @@ void DomainHandler::setIsConnected(bool isConnected) { } void DomainHandler::requestDomainSettings() { - NodeType_t owningNodeType = NodeList::getInstance()->getOwnerType(); + NodeType_t owningNodeType = DependencyManager::get()->getOwnerType(); if (owningNodeType == NodeType::Agent) { // for now the agent nodes don't need any settings - this allows local assignment-clients // to connect to a domain that is using automatic networking (since we don't have TCP hole punch yet) @@ -212,7 +212,7 @@ void DomainHandler::requestDomainSettings() { settingsJSONURL.setHost(_hostname); settingsJSONURL.setPort(DOMAIN_SERVER_HTTP_PORT); settingsJSONURL.setPath("/settings.json"); - Assignment::Type assignmentType = Assignment::typeForNodeType(NodeList::getInstance()->getOwnerType()); + Assignment::Type assignmentType = Assignment::typeForNodeType(DependencyManager::get()->getOwnerType()); settingsJSONURL.setQuery(QString("type=%1").arg(assignmentType)); qDebug() << "Requesting domain-server settings at" << settingsJSONURL.toString(); diff --git a/libraries/networking/src/PacketSender.cpp b/libraries/networking/src/PacketSender.cpp index 3edfc47c04..f560d94b86 100644 --- a/libraries/networking/src/PacketSender.cpp +++ b/libraries/networking/src/PacketSender.cpp @@ -271,7 +271,7 @@ bool PacketSender::nonThreadedProcess() { unlock(); // send the packet through the NodeList... - NodeList::getInstance()->writeDatagram(temporary.getByteArray(), temporary.getNode()); + DependencyManager::get()->writeDatagram(temporary.getByteArray(), temporary.getNode()); packetsSentThisCall++; _packetsOverCheckInterval++; _totalPacketsSent++; diff --git a/libraries/networking/src/ThreadedAssignment.cpp b/libraries/networking/src/ThreadedAssignment.cpp index 52644a9a4e..21f520babb 100644 --- a/libraries/networking/src/ThreadedAssignment.cpp +++ b/libraries/networking/src/ThreadedAssignment.cpp @@ -32,7 +32,7 @@ void ThreadedAssignment::setFinished(bool isFinished) { if (_isFinished) { aboutToFinish(); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); // if we have a datagram processing thread, quit it and wait on it to make sure that // the node socket is back on the same thread as the NodeList @@ -43,7 +43,7 @@ void ThreadedAssignment::setFinished(bool isFinished) { _datagramProcessingThread->wait(); // set node socket parent back to NodeList - nodeList->getNodeSocket().setParent(nodeList); + nodeList->getNodeSocket().setParent(nodeList.data()); } // move the NodeList back to the QCoreApplication instance's thread @@ -57,7 +57,7 @@ void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeTy // change the logging target name while the assignment is running LogHandler::getInstance().setTargetName(targetName); - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->setOwnerType(nodeType); // this is a temp fix for Qt 5.3 - rebinding the node socket gives us readyRead for the socket on this thread @@ -68,7 +68,7 @@ void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeTy domainServerTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); QTimer* silentNodeRemovalTimer = new QTimer(this); - connect(silentNodeRemovalTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes())); + connect(silentNodeRemovalTimer, SIGNAL(timeout()), nodeList.data(), SLOT(removeSilentNodes())); silentNodeRemovalTimer->start(NODE_SILENCE_THRESHOLD_MSECS); if (shouldSendStats) { @@ -80,7 +80,7 @@ void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeTy } void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject &statsObject) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); float packetsPerSecond, bytesPerSecond; nodeList->getPacketStats(packetsPerSecond, bytesPerSecond); @@ -98,15 +98,15 @@ void ThreadedAssignment::sendStatsPacket() { } void ThreadedAssignment::checkInWithDomainServerOrExit() { - if (NodeList::getInstance()->getNumNoReplyDomainCheckIns() == MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { + if (DependencyManager::get()->getNumNoReplyDomainCheckIns() == MAX_SILENT_DOMAIN_SERVER_CHECK_INS) { setFinished(true); } else { - NodeList::getInstance()->sendDomainServerCheckIn(); + DependencyManager::get()->sendDomainServerCheckIn(); } } bool ThreadedAssignment::readAvailableDatagram(QByteArray& destinationByteArray, HifiSockAddr& senderSockAddr) { - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (nodeList->getNodeSocket().hasPendingDatagrams()) { destinationByteArray.resize(nodeList->getNodeSocket().pendingDatagramSize()); diff --git a/libraries/octree/src/JurisdictionListener.cpp b/libraries/octree/src/JurisdictionListener.cpp index bcd5e9ac1c..c050e0bffe 100644 --- a/libraries/octree/src/JurisdictionListener.cpp +++ b/libraries/octree/src/JurisdictionListener.cpp @@ -20,10 +20,10 @@ JurisdictionListener::JurisdictionListener(NodeType_t type) : _nodeType(type), _packetSender(JurisdictionListener::DEFAULT_PACKETS_PER_SECOND) { - connect(NodeList::getInstance(), &NodeList::nodeKilled, this, &JurisdictionListener::nodeKilled); + connect(DependencyManager::get().data(), &NodeList::nodeKilled, this, &JurisdictionListener::nodeKilled); // tell our NodeList we want to hear about nodes with our node type - NodeList::getInstance()->addNodeTypeToInterestSet(type); + DependencyManager::get()->addNodeTypeToInterestSet(type); } void JurisdictionListener::nodeKilled(SharedNodePointer node) { @@ -38,7 +38,7 @@ bool JurisdictionListener::queueJurisdictionRequest() { int sizeOut = populatePacketHeader(reinterpret_cast(bufferOut), PacketTypeJurisdictionRequest); int nodeCount = 0; - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node) { + DependencyManager::get()->eachNode([&](const SharedNodePointer& node) { if (node->getType() == getNodeType() && node->getActiveSocket()) { _packetSender.queuePacketForSending(node, QByteArray(reinterpret_cast(bufferOut), sizeOut)); nodeCount++; diff --git a/libraries/octree/src/JurisdictionSender.cpp b/libraries/octree/src/JurisdictionSender.cpp index d78d883204..f85cf406b9 100644 --- a/libraries/octree/src/JurisdictionSender.cpp +++ b/libraries/octree/src/JurisdictionSender.cpp @@ -61,7 +61,7 @@ bool JurisdictionSender::process() { QUuid nodeUUID = _nodesRequestingJurisdictions.front(); _nodesRequestingJurisdictions.pop(); - SharedNodePointer node = NodeList::getInstance()->nodeWithUUID(nodeUUID); + SharedNodePointer node = DependencyManager::get()->nodeWithUUID(nodeUUID); if (node && node->getActiveSocket()) { _packetSender.queuePacketForSending(node, QByteArray(reinterpret_cast(bufferOut), sizeOut)); diff --git a/libraries/octree/src/OctreeEditPacketSender.cpp b/libraries/octree/src/OctreeEditPacketSender.cpp index cae8919a64..cc47190228 100644 --- a/libraries/octree/src/OctreeEditPacketSender.cpp +++ b/libraries/octree/src/OctreeEditPacketSender.cpp @@ -52,7 +52,7 @@ bool OctreeEditPacketSender::serversExist() const { bool hasServers = false; bool atLeastOneJurisdictionMissing = false; // assume the best - NodeList::getInstance()->eachNodeBreakable([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNodeBreakable([&](const SharedNodePointer& node){ if (node->getType() == getMyNodeType() && node->getActiveSocket()) { QUuid nodeUUID = node->getUUID(); @@ -85,7 +85,7 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, unsigned c size_t length, qint64 satoshiCost) { bool wantDebug = false; - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are getMyNodeType() if (node->getType() == getMyNodeType() && ((node->getUUID() == nodeUUID) || (nodeUUID.isNull())) @@ -192,7 +192,7 @@ void OctreeEditPacketSender::queuePacketToNodes(unsigned char* buffer, size_t le // for a different server... So we need to actually manage multiple queued packets... one // for each server - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are getMyNodeType() if (node->getActiveSocket() && node->getType() == getMyNodeType()) { QUuid nodeUUID = node->getUUID(); @@ -245,7 +245,7 @@ void OctreeEditPacketSender::queueOctreeEditMessage(PacketType type, unsigned ch // for each server _packetsQueueLock.lock(); - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are getMyNodeType() if (node->getActiveSocket() && node->getType() == getMyNodeType()) { QUuid nodeUUID = node->getUUID(); @@ -380,7 +380,7 @@ void OctreeEditPacketSender::processNackPacket(const QByteArray& packet) { // retrieve packet from history const QByteArray* packet = sentPacketHistory.getPacket(sequenceNumber); if (packet) { - const SharedNodePointer& node = NodeList::getInstance()->nodeWithUUID(sendingNodeUUID); + const SharedNodePointer& node = DependencyManager::get()->nodeWithUUID(sendingNodeUUID); queuePacketForSending(node, *packet); } } diff --git a/libraries/octree/src/OctreeHeadlessViewer.cpp b/libraries/octree/src/OctreeHeadlessViewer.cpp index e0ca22e4e8..8fe4fbd4d5 100644 --- a/libraries/octree/src/OctreeHeadlessViewer.cpp +++ b/libraries/octree/src/OctreeHeadlessViewer.cpp @@ -77,7 +77,7 @@ void OctreeHeadlessViewer::queryOctree() { int inViewServers = 0; int unknownJurisdictionServers = 0; - NodeList::getInstance()->eachNode([&](const SharedNodePointer& node){ + DependencyManager::get()->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are serverType if (node->getActiveSocket() && node->getType() == serverType) { totalServers++; @@ -140,7 +140,7 @@ void OctreeHeadlessViewer::queryOctree() { qDebug("perServerPPS: %d perUnknownServer: %d", perServerPPS, perUnknownServer); } - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([&](const SharedNodePointer& node){ // only send to the NodeTypes that are serverType if (node->getActiveSocket() && node->getType() == serverType) { diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 7cd6ea07ee..979c56928b 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -359,7 +359,7 @@ void ScriptEngine::run() { int thisFrame = 0; - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); qint64 lastUpdate = usecTimestampNow(); @@ -483,7 +483,7 @@ void ScriptEngine::run() { } // write audio packet to AudioMixer nodes - NodeList* nodeList = NodeList::getInstance(); + auto nodeList = DependencyManager::get(); nodeList->eachNode([this, &nodeList, &audioPacket, &numPreSequenceNumberBytes](const SharedNodePointer& node){ // only send to nodes of type AudioMixer if (node->getType() == NodeType::AudioMixer) { From aa0998dc7d6bd3a88b7905647867f9e028e23d11 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 18 Dec 2014 10:32:18 -0800 Subject: [PATCH 05/16] Moved LimitedNodeList into DM --- domain-server/src/DomainServer.cpp | 42 ++++++++++---------- libraries/networking/src/LimitedNodeList.cpp | 38 +++++------------- libraries/networking/src/LimitedNodeList.h | 10 ++--- libraries/networking/src/PacketHeaders.cpp | 2 +- libraries/shared/src/DependencyManager.h | 10 ++--- tests/metavoxels/src/MetavoxelTests.cpp | 2 +- 6 files changed, 42 insertions(+), 62 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index e6fcef62c1..3cd5d9f50b 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -237,7 +237,8 @@ void DomainServer::setupNodeListAndAssignments(const QUuid& sessionUUID) { // check for scripts the user wants to persist from their domain-server config populateStaticScriptedAssignmentsFromSettings(); - LimitedNodeList* nodeList = LimitedNodeList::createInstance(domainServerPort, domainServerDTLSPort); + auto nodeList = DependencyManager::set(domainServerPort, + domainServerDTLSPort); // no matter the local port, save it to shared mem so that local assignment clients can ask what it is QSharedMemory* sharedPortMem = new QSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, this); @@ -346,8 +347,7 @@ bool DomainServer::optionallySetupAssignmentPayment() { } void DomainServer::setupAutomaticNetworking() { - - LimitedNodeList* nodeList = LimitedNodeList::getInstance(); + auto nodeList = DependencyManager::get(); const int STUN_REFLEXIVE_KEEPALIVE_INTERVAL_MSECS = 10 * 1000; const int STUN_IP_ADDRESS_CHECK_INTERVAL_MSECS = 30 * 1000; @@ -617,7 +617,7 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock QByteArray usernameRequestByteArray = byteArrayWithPopulatedHeader(PacketTypeDomainConnectionDenied); // send this oauth request datagram back to the client - LimitedNodeList::getInstance()->writeUnverifiedDatagram(usernameRequestByteArray, senderSockAddr); + DependencyManager::get()->writeUnverifiedDatagram(usernameRequestByteArray, senderSockAddr); return; } @@ -637,7 +637,7 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock } - SharedNodePointer newNode = LimitedNodeList::getInstance()->addOrUpdateNode(nodeUUID, nodeType, + SharedNodePointer newNode = DependencyManager::get()->addOrUpdateNode(nodeUUID, nodeType, publicSockAddr, localSockAddr); // when the newNode is created the linked data is also created // if this was a static assignment set the UUID, set the sendingSockAddr @@ -670,7 +670,7 @@ bool DomainServer::shouldAllowConnectionFromNode(const QString& username, QStringList allowedUsers = allowedUsersVariant ? allowedUsersVariant->toStringList() : QStringList(); // we always let in a user who is sending a packet from our local socket or from the localhost address - if (senderSockAddr.getAddress() == LimitedNodeList::getInstance()->getLocalSockAddr().getAddress() + if (senderSockAddr.getAddress() == DependencyManager::get()->getLocalSockAddr().getAddress() || senderSockAddr.getAddress() == QHostAddress::LocalHost) { return true; } @@ -843,8 +843,8 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif int numBroadcastPacketLeadBytes = broadcastDataStream.device()->pos(); DomainServerNodeData* nodeData = reinterpret_cast(node->getLinkedData()); - - LimitedNodeList* nodeList = LimitedNodeList::getInstance(); + + auto nodeList = DependencyManager::get(); // if we've established a connection via ICE with this peer, use that socket // otherwise just try to reply back to them on their sending socket (although that may not work) @@ -910,7 +910,7 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif } void DomainServer::readAvailableDatagrams() { - LimitedNodeList* nodeList = LimitedNodeList::getInstance(); + auto nodeList = DependencyManager::get(); HifiSockAddr senderSockAddr; QByteArray receivedPacket; @@ -1112,7 +1112,7 @@ void DomainServer::transactionJSONCallback(const QJsonObject& data) { } void DomainServer::requestCurrentPublicSocketViaSTUN() { - LimitedNodeList::getInstance()->sendSTUNRequest(); + DependencyManager::get()->sendSTUNRequest(); } QJsonObject jsonForDomainSocketUpdate(const HifiSockAddr& socket) { @@ -1134,7 +1134,7 @@ void DomainServer::performIPAddressUpdate(const HifiSockAddr& newPublicSockAddr) void DomainServer::sendHeartbeatToDataServer(const QString& networkAddress) { const QString DOMAIN_UPDATE = "/api/v1/domains/%1"; - const QUuid& domainID = LimitedNodeList::getInstance()->getSessionUUID(); + const QUuid& domainID = DependencyManager::get()->getSessionUUID(); // setup the domain object to send to the data server const QString PUBLIC_NETWORK_ADDRESS_KEY = "network_address"; @@ -1187,11 +1187,11 @@ void DomainServer::performICEUpdates() { } void DomainServer::sendHeartbeatToIceServer() { - LimitedNodeList::getInstance()->sendHeartbeatToIceServer(_iceServerSocket); + DependencyManager::get()->sendHeartbeatToIceServer(_iceServerSocket); } void DomainServer::sendICEPingPackets() { - LimitedNodeList* nodeList = LimitedNodeList::getInstance(); + auto nodeList = DependencyManager::get(); QHash::iterator peer = _connectingICEPeers.begin(); @@ -1259,7 +1259,7 @@ void DomainServer::processICEPingReply(const QByteArray& packet, const HifiSockA } void DomainServer::processDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { - LimitedNodeList* nodeList = LimitedNodeList::getInstance(); + auto nodeList = DependencyManager::get(); if (nodeList->packetVersionAndHashMatch(receivedPacket)) { PacketType requestType = packetTypeForPacket(receivedPacket); @@ -1410,6 +1410,8 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url const QString UUID_REGEX_STRING = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"; + auto nodeList = DependencyManager::get(); + // allow sub-handlers to handle requests that do not require authentication if (_settingsManager.handlePublicHTTPRequest(connection, url)) { return true; @@ -1452,7 +1454,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url const QString URI_ID = "/id"; if (connection->requestOperation() == QNetworkAccessManager::GetOperation && url.path() == URI_ID) { - QUuid domainID = LimitedNodeList::getInstance()->getSessionUUID(); + QUuid domainID = nodeList->getSessionUUID(); connection->respond(HTTPConnection::StatusCode200, uuidStringWithoutCurlyBraces(domainID).toLocal8Bit()); return true; @@ -1536,7 +1538,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url QJsonArray nodesJSONArray; // enumerate the NodeList to find the assigned nodes - LimitedNodeList::getInstance()->eachNode([this, &nodesJSONArray](const SharedNodePointer& node){ + nodeList->eachNode([this, &nodesJSONArray](const SharedNodePointer& node){ // add the node using the UUID as the key nodesJSONArray.append(jsonObjectForNode(node)); }); @@ -1559,7 +1561,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url QUuid matchingUUID = QUuid(nodeShowRegex.cap(1)); // see if we have a node that matches this ID - SharedNodePointer matchingNode = LimitedNodeList::getInstance()->nodeWithUUID(matchingUUID); + SharedNodePointer matchingNode = nodeList->nodeWithUUID(matchingUUID); if (matchingNode) { // create a QJsonDocument with the stats QJsonObject QJsonObject statsObject = @@ -1653,14 +1655,14 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url // pull the captured string, if it exists QUuid deleteUUID = QUuid(nodeDeleteRegex.cap(1)); - SharedNodePointer nodeToKill = LimitedNodeList::getInstance()->nodeWithUUID(deleteUUID); + SharedNodePointer nodeToKill = nodeList->nodeWithUUID(deleteUUID); if (nodeToKill) { // start with a 200 response connection->respond(HTTPConnection::StatusCode200); // we have a valid UUID and node - kill the node that has this assignment - QMetaObject::invokeMethod(LimitedNodeList::getInstance(), "killNodeWithUUID", Q_ARG(const QUuid&, deleteUUID)); + QMetaObject::invokeMethod(nodeList.data(), "killNodeWithUUID", Q_ARG(const QUuid&, deleteUUID)); // successfully processed request return true; @@ -1669,7 +1671,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url return true; } else if (allNodesDeleteRegex.indexIn(url.path()) != -1) { qDebug() << "Received request to kill all nodes."; - LimitedNodeList::getInstance()->eraseAllNodes(); + nodeList->eraseAllNodes(); return true; } diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index c6e79cc18f..827d7960ff 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -38,35 +38,6 @@ const char SOLO_NODE_TYPES[2] = { const QUrl DEFAULT_NODE_AUTH_URL = QUrl("https://data.highfidelity.io"); -std::auto_ptr LimitedNodeList::_sharedInstance; - -LimitedNodeList* LimitedNodeList::createInstance(unsigned short socketListenPort, unsigned short dtlsPort) { - NodeType::init(); - - if (_sharedInstance.get()) { - qDebug() << "LimitedNodeList called with existing instance." << - "Releasing auto_ptr, deleting existing instance and creating a new one."; - - delete _sharedInstance.release(); - } - - _sharedInstance = std::auto_ptr(new LimitedNodeList(socketListenPort, dtlsPort)); - - // register the SharedNodePointer meta-type for signals/slots - qRegisterMetaType(); - - return _sharedInstance.get(); -} - -LimitedNodeList* LimitedNodeList::getInstance() { - if (!_sharedInstance.get()) { - qDebug("LimitedNodeList getInstance called before call to createInstance. Returning NULL pointer."); - } - - return _sharedInstance.get(); -} - - LimitedNodeList::LimitedNodeList(unsigned short socketListenPort, unsigned short dtlsListenPort) : _sessionUUID(), _nodeHash(), @@ -79,6 +50,15 @@ LimitedNodeList::LimitedNodeList(unsigned short socketListenPort, unsigned short _numCollectedBytes(0), _packetStatTimer() { + static bool firstCall = true; + if (firstCall) { + NodeType::init(); + + // register the SharedNodePointer meta-type for signals/slots + qRegisterMetaType(); + firstCall = false; + } + _nodeSocket.bind(QHostAddress::AnyIPv4, socketListenPort); qDebug() << "NodeList socket is listening on" << _nodeSocket.localPort(); diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index 9fa9ed9d91..be09123901 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -69,10 +69,9 @@ namespace PingType { class LimitedNodeList : public QObject { Q_OBJECT + SINGLETON_DEPENDENCY(LimitedNodeList, true); + public: - static LimitedNodeList* createInstance(unsigned short socketListenPort = 0, unsigned short dtlsPort = 0); - static LimitedNodeList* getInstance(); - const QUuid& getSessionUUID() const { return _sessionUUID; } void setSessionUUID(const QUuid& sessionUUID); @@ -179,10 +178,9 @@ signals: void localSockAddrChanged(const HifiSockAddr& localSockAddr); void publicSockAddrChanged(const HifiSockAddr& publicSockAddr); + protected: - static std::auto_ptr _sharedInstance; - - LimitedNodeList(unsigned short socketListenPort, unsigned short dtlsListenPort); + LimitedNodeList(unsigned short socketListenPort = 0, unsigned short dtlsListenPort = 0); LimitedNodeList(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton void operator=(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index 3f08cdec69..752bdc6b93 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -170,7 +170,7 @@ int populatePacketHeader(char* packet, PacketType type, const QUuid& connectionU char* position = packet + numTypeBytes + sizeof(PacketVersion); - QUuid packUUID = connectionUUID.isNull() ? LimitedNodeList::getInstance()->getSessionUUID() : connectionUUID; + QUuid packUUID = connectionUUID.isNull() ? DependencyManager::get()->getSessionUUID() : connectionUUID; QByteArray rfcUUID = packUUID.toRfc4122(); memcpy(position, rfcUUID.constData(), NUM_BYTES_RFC4122_UUID); diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index 8ed55edf68..93cebb8893 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -21,7 +21,7 @@ public:\ typedef QSharedPointer SharedPointer;\ typedef QWeakPointer WeakPointer;\ private:\ - static constexpr bool REQUIRE_SET = NEED_SET;\ + static const bool REQUIRE_SET = NEED_SET;\ void customDeleter() {\ QObject* thisObject = dynamic_cast(this);\ if (thisObject) {\ @@ -34,12 +34,12 @@ private:\ class QObject; +// usage: +// T* instance = DependencyManager::get(); +// T* instance = DependencyManager::set(Args... args); +// T* instance = DependencyManager::destroy(); class DependencyManager { public: - // usage: - // T* instance = DependencyManager::get(); - // T* instance = DependencyManager::set(Args... args); - // T* instance = DependencyManager::destroy(); template static QSharedPointer get(); diff --git a/tests/metavoxels/src/MetavoxelTests.cpp b/tests/metavoxels/src/MetavoxelTests.cpp index 0609d7bd01..106c56b0fe 100644 --- a/tests/metavoxels/src/MetavoxelTests.cpp +++ b/tests/metavoxels/src/MetavoxelTests.cpp @@ -440,7 +440,7 @@ static bool testSerialization(Bitstream::MetadataType metadataType) { } bool MetavoxelTests::run() { - LimitedNodeList::createInstance(); + DependencyManager::set(); // seed the random number generator so that our tests are reproducible srand(0xBAAAAABE); From f2847cec0699235321af4da102c579e3b5475054 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 18 Dec 2014 15:42:03 -0800 Subject: [PATCH 06/16] Changed Singleton Dependency macro and tweaked DM --- libraries/shared/src/DependencyManager.h | 32 ++++++++---------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index 93cebb8893..16d8ead9a8 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -16,27 +16,23 @@ #include -#define SINGLETON_DEPENDENCY(T, NEED_SET)\ -public:\ - typedef QSharedPointer SharedPointer;\ - typedef QWeakPointer WeakPointer;\ -private:\ - static const bool REQUIRE_SET = NEED_SET;\ - void customDeleter() {\ - QObject* thisObject = dynamic_cast(this);\ - if (thisObject) {\ - thisObject->deleteLater();\ - } else {\ - delete this;\ - }\ - }\ +#define SINGLETON_DEPENDENCY \ +private: \ + virtual void customDeleter() { \ + QObject* thisObject = dynamic_cast(this); \ + if (thisObject) { \ + thisObject->deleteLater(); \ + } else { \ + delete this; \ + } \ + } \ friend class DependencyManager; class QObject; // usage: // T* instance = DependencyManager::get(); -// T* instance = DependencyManager::set(Args... args); +// T* instance = DependencyManager::set(Args... args); // T* instance = DependencyManager::destroy(); class DependencyManager { public: @@ -56,12 +52,6 @@ private: template QSharedPointer DependencyManager::get() { - static bool requireSet = !T::REQUIRE_SET; - if (requireSet) { - set(); - requireSet = false; - } - return storage(); } From 296c0025de1eac4586406b0da044769e7c15d245 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 18 Dec 2014 15:42:38 -0800 Subject: [PATCH 07/16] Switched to auto and changed macro --- assignment-client/src/AssignmentClient.cpp | 2 +- domain-server/src/DomainServer.cpp | 3 +- interface/src/Application.cpp | 31 ++++++++++--------- interface/src/Camera.cpp | 2 +- interface/src/GLCanvas.h | 2 +- interface/src/Menu.cpp | 2 +- interface/src/MetavoxelSystem.cpp | 4 +-- interface/src/ModelUploader.cpp | 2 +- interface/src/Util.cpp | 2 +- interface/src/avatar/Head.cpp | 4 +-- interface/src/avatar/MyAvatar.cpp | 2 +- interface/src/avatar/SkeletonModel.cpp | 6 ++-- interface/src/devices/DdeFaceTracker.h | 2 +- interface/src/devices/Faceshift.h | 2 +- interface/src/devices/OculusManager.cpp | 4 +-- interface/src/devices/PrioVR.cpp | 2 +- interface/src/devices/SixenseManager.cpp | 2 +- interface/src/devices/TV3DManager.cpp | 4 +-- interface/src/devices/Visage.h | 2 +- .../ControllerScriptingInterface.cpp | 2 +- interface/src/ui/ApplicationOverlay.cpp | 20 ++++++------ interface/src/ui/PreferencesDialog.cpp | 2 +- interface/src/ui/Snapshot.cpp | 2 +- interface/src/ui/Stats.cpp | 8 ++--- libraries/animation/src/AnimationCache.h | 2 +- libraries/networking/src/LimitedNodeList.h | 4 ++- libraries/networking/src/NodeList.h | 2 +- .../render-utils/src/AmbientOcclusionEffect.h | 2 +- .../src/DeferredLightingEffect.cpp | 6 ++-- .../render-utils/src/DeferredLightingEffect.h | 2 +- libraries/render-utils/src/GeometryCache.cpp | 4 +-- libraries/render-utils/src/GeometryCache.h | 2 +- libraries/render-utils/src/GlowEffect.cpp | 2 +- libraries/render-utils/src/GlowEffect.h | 2 +- libraries/render-utils/src/Model.cpp | 4 +-- libraries/render-utils/src/Model.h | 2 +- libraries/render-utils/src/TextureCache.h | 2 +- 37 files changed, 76 insertions(+), 74 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 51bd32f41b..1eaa870a5b 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -93,7 +93,7 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) : } // create a NodeList as an unassigned client - auto nodeList = DependencyManager::set(NodeType::Unassigned); + auto nodeList = DependencyManager::set(NodeType::Unassigned); quint16 assignmentServerPort = DEFAULT_DOMAIN_SERVER_PORT; diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 3cd5d9f50b..c3e2aecf7a 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -237,8 +237,7 @@ void DomainServer::setupNodeListAndAssignments(const QUuid& sessionUUID) { // check for scripts the user wants to persist from their domain-server config populateStaticScriptedAssignmentsFromSettings(); - auto nodeList = DependencyManager::set(domainServerPort, - domainServerDTLSPort); + auto nodeList = DependencyManager::set(domainServerPort, domainServerDTLSPort); // no matter the local port, save it to shared mem so that local assignment clients can ask what it is QSharedMemory* sharedPortMem = new QSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, this); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ff479aa241..63c7b2e05b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -191,9 +191,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : _isVSyncOn(true), _aboutToQuit(false) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::set(); Model::setAbstractViewStateInterface(this); // The model class will sometimes need to know view state details from us + // read the ApplicationInfo.ini file for Name/Version/Domain information QSettings applicationInfo(PathUtils::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); @@ -239,7 +240,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : _nodeThread->setPriority(QThread::TimeCriticalPriority); // put the NodeList and datagram processing on the node thread - auto nodeList = DependencyManager::set(NodeType::Agent, listenPort); + auto nodeList = DependencyManager::set(NodeType::Agent, listenPort); nodeList->moveToThread(_nodeThread); _datagramProcessor.moveToThread(_nodeThread); @@ -1045,7 +1046,7 @@ void Application::keyPressEvent(QKeyEvent* event) { if (isShifted) { _viewFrustum.setFocalLength(_viewFrustum.getFocalLength() - 0.1f); if (TV3DManager::isConnected()) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); TV3DManager::configureCamera(_myCamera, glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); } } else { @@ -1058,7 +1059,7 @@ void Application::keyPressEvent(QKeyEvent* event) { if (isShifted) { _viewFrustum.setFocalLength(_viewFrustum.getFocalLength() + 0.1f); if (TV3DManager::isConnected()) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); TV3DManager::configureCamera(_myCamera, glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); } @@ -1531,7 +1532,7 @@ void Application::idle() { void Application::checkBandwidthMeterClick() { // ... to be called upon button release - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); if (Menu::getInstance()->isOptionChecked(MenuOption::Bandwidth) && Menu::getInstance()->isOptionChecked(MenuOption::Stats) && Menu::getInstance()->isOptionChecked(MenuOption::UserInterface) && @@ -1567,7 +1568,7 @@ void Application::setFullscreen(bool fullscreen) { } void Application::setEnable3DTVMode(bool enable3DTVMode) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); resizeGL(glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); } @@ -1593,7 +1594,7 @@ void Application::setEnableVRMode(bool enableVRMode) { _myCamera.setHmdRotation(glm::quat()); } - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); resizeGL(glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); } @@ -1656,7 +1657,7 @@ glm::vec3 Application::getMouseVoxelWorldCoordinates(const VoxelDetail& mouseVox bool Application::mouseOnScreen() const { if (OculusManager::isConnected()) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); return getMouseX() >= 0 && getMouseX() <= glCanvas->getDeviceWidth() && getMouseY() >= 0 && getMouseY() <= glCanvas->getDeviceHeight(); } @@ -1698,9 +1699,9 @@ int Application::getMouseDragStartedY() const { } FaceTracker* Application::getActiveFaceTracker() { - Faceshift::SharedPointer faceshift = DependencyManager::get(); - Visage::SharedPointer visage = DependencyManager::get(); - DdeFaceTracker::SharedPointer dde = DependencyManager::get(); + auto faceshift = DependencyManager::get(); + auto visage = DependencyManager::get(); + auto dde = DependencyManager::get(); return (dde->isActive() ? static_cast(dde.data()) : (faceshift->isActive() ? static_cast(faceshift.data()) : @@ -2032,7 +2033,7 @@ void Application::init() { _metavoxels.init(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); _audio.init(glCanvas.data()); _rearMirrorTools = new RearMirrorTools(glCanvas.data(), _mirrorViewRect, _settings); @@ -2120,7 +2121,7 @@ void Application::updateMouseRay() { void Application::updateFaceshift() { bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); PerformanceWarning warn(showWarnings, "Application::updateFaceshift()"); - Faceshift::SharedPointer faceshift = DependencyManager::get(); + auto faceshift = DependencyManager::get(); // Update faceshift faceshift->update(); @@ -2925,7 +2926,7 @@ void Application::updateShadowMap() { fbo->release(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); glViewport(0, 0, glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); } @@ -3277,7 +3278,7 @@ bool Application::getCascadeShadowsEnabled() { } glm::vec2 Application::getScaledScreenPoint(glm::vec2 projectedPoint) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); float horizontalScale = glCanvas->getDeviceWidth() / 2.0f; float verticalScale = glCanvas->getDeviceHeight() / 2.0f; diff --git a/interface/src/Camera.cpp b/interface/src/Camera.cpp index b2fd30a1a6..14fa79d88b 100644 --- a/interface/src/Camera.cpp +++ b/interface/src/Camera.cpp @@ -95,7 +95,7 @@ void Camera::setFarClip(float f) { } PickRay Camera::computePickRay(float x, float y) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); return computeViewPickRay(x / glCanvas->width(), y / glCanvas->height()); } diff --git a/interface/src/GLCanvas.h b/interface/src/GLCanvas.h index d9966714cc..f4981d16da 100644 --- a/interface/src/GLCanvas.h +++ b/interface/src/GLCanvas.h @@ -20,7 +20,7 @@ /// customized canvas that simply forwards requests/events to the singleton application class GLCanvas : public QGLWidget { Q_OBJECT - SINGLETON_DEPENDENCY(GLCanvas, false) + SINGLETON_DEPENDENCY public: bool isThrottleRendering() const; diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f15339db51..6524099c41 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -1052,7 +1052,7 @@ void Menu::bumpSettings() { void sendFakeEnterEvent() { QPoint lastCursorPosition = QCursor::pos(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); QPoint windowPosition = glCanvas->mapFromGlobal(lastCursorPosition); QEnterEvent enterEvent = QEnterEvent(windowPosition, windowPosition, lastCursorPosition); diff --git a/interface/src/MetavoxelSystem.cpp b/interface/src/MetavoxelSystem.cpp index 1368f42603..cceed8a3b2 100644 --- a/interface/src/MetavoxelSystem.cpp +++ b/interface/src/MetavoxelSystem.cpp @@ -1178,7 +1178,7 @@ void VoxelBuffer::render(bool cursor) { if (!_materials.isEmpty()) { _networkTextures.resize(_materials.size()); - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); for (int i = 0; i < _materials.size(); i++) { const SharedObjectPointer material = _materials.at(i); if (material) { @@ -2233,7 +2233,7 @@ void HeightfieldNodeRenderer::render(const HeightfieldNodePointer& node, const g const QVector& materials = node->getMaterial()->getMaterials(); _networkTextures.resize(materials.size()); - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); for (int i = 0; i < materials.size(); i++) { const SharedObjectPointer& material = materials.at(i); if (material) { diff --git a/interface/src/ModelUploader.cpp b/interface/src/ModelUploader.cpp index 29d1596809..26afef8d7d 100644 --- a/interface/src/ModelUploader.cpp +++ b/interface/src/ModelUploader.cpp @@ -472,7 +472,7 @@ void ModelUploader::processCheck() { QString("Your model is now available in the browser."), QMessageBox::Ok); DependencyManager::get()->refresh(_url); - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); foreach (const QByteArray& filename, _textureFilenames) { textureCache->refresh(_textureBase + filename); } diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 38f18e96d9..07f3e8b15f 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -71,7 +71,7 @@ void renderWorldBox() { glPushMatrix(); glTranslatef(MARKER_DISTANCE, 0, 0); glColor3fv(red); - GeometryCache::SharedPointer geometryCache = DependencyManager::get(); + auto geometryCache = DependencyManager::get(); geometryCache->renderSphere(MARKER_RADIUS, 10, 10); glPopMatrix(); glPushMatrix(); diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 9c02b0e380..0f1217db78 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -78,8 +78,8 @@ void Head::simulate(float deltaTime, bool isMine, bool billboard) { // Only use face trackers when not playing back a recording. if (!myAvatar->isPlaying()) { FaceTracker* faceTracker = Application::getInstance()->getActiveFaceTracker(); - DdeFaceTracker::SharedPointer dde = DependencyManager::get(); - Faceshift::SharedPointer faceshift = DependencyManager::get(); + auto dde = DependencyManager::get(); + auto faceshift = DependencyManager::get(); if ((_isFaceshiftConnected = (faceshift == faceTracker))) { _blendshapeCoefficients = faceTracker->getBlendshapeCoefficients(); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 6d0ae6e199..2bacb0160b 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -422,7 +422,7 @@ void MyAvatar::render(const glm::vec3& cameraPosition, RenderMode renderMode, bo } void MyAvatar::renderHeadMouse(int screenWidth, int screenHeight) const { - Faceshift::SharedPointer faceshift = DependencyManager::get(); + auto faceshift = DependencyManager::get(); float pixelsPerDegree = screenHeight / Menu::getInstance()->getFieldOfView(); diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index b707861677..2573902cb6 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -554,7 +554,7 @@ void SkeletonModel::renderRagdoll() { float radius1 = 0.008f; float radius2 = 0.01f; glm::vec3 simulationTranslation = _ragdoll->getTranslationInSimulationFrame(); - GeometryCache::SharedPointer geometryCache = DependencyManager::get(); + auto geometryCache = DependencyManager::get(); for (int i = 0; i < numPoints; ++i) { glPushMatrix(); // NOTE: ragdollPoints are in simulation-frame but we want them to be model-relative @@ -914,7 +914,7 @@ void SkeletonModel::renderBoundingCollisionShapes(float alpha) { endPoint = endPoint - _translation; glTranslatef(endPoint.x, endPoint.y, endPoint.z); glColor4f(0.6f, 0.6f, 0.8f, alpha); - GeometryCache::SharedPointer geometryCache = DependencyManager::get(); + auto geometryCache = DependencyManager::get(); geometryCache->renderSphere(_boundingShape.getRadius(), BALL_SUBDIVISIONS, BALL_SUBDIVISIONS); // draw a yellow sphere at the capsule startpoint @@ -950,7 +950,7 @@ void SkeletonModel::renderJointCollisionShapes(float alpha) { continue; } - GeometryCache::SharedPointer geometryCache = DependencyManager::get(); + auto geometryCache = DependencyManager::get(); glPushMatrix(); // shapes are stored in simulation-frame but we want position to be model-relative diff --git a/interface/src/devices/DdeFaceTracker.h b/interface/src/devices/DdeFaceTracker.h index 60a317e887..5ae17729d4 100644 --- a/interface/src/devices/DdeFaceTracker.h +++ b/interface/src/devices/DdeFaceTracker.h @@ -20,7 +20,7 @@ class DdeFaceTracker : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(DdeFaceTracker, false) + SINGLETON_DEPENDENCY public: //initialization diff --git a/interface/src/devices/Faceshift.h b/interface/src/devices/Faceshift.h index 3587b3dfae..73971db49d 100644 --- a/interface/src/devices/Faceshift.h +++ b/interface/src/devices/Faceshift.h @@ -26,7 +26,7 @@ /// Handles interaction with the Faceshift software, which provides head position/orientation and facial features. class Faceshift : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(Faceshift, false) + SINGLETON_DEPENDENCY public: void init(); diff --git a/interface/src/devices/OculusManager.cpp b/interface/src/devices/OculusManager.cpp index 1854c9539d..387052219c 100644 --- a/interface/src/devices/OculusManager.cpp +++ b/interface/src/devices/OculusManager.cpp @@ -562,7 +562,7 @@ void OculusManager::display(const glm::quat &bodyOrientation, const glm::vec3 &p } // restore our normal viewport - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); glViewport(0, 0, glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight()); glMatrixMode(GL_PROJECTION); @@ -581,7 +581,7 @@ void OculusManager::display(const glm::quat &bodyOrientation, const glm::vec3 &p void OculusManager::renderDistortionMesh(ovrPosef eyeRenderPose[ovrEye_Count]) { glLoadIdentity(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); gluOrtho2D(0, glCanvas->getDeviceWidth(), 0, glCanvas->getDeviceHeight()); glDisable(GL_DEPTH_TEST); diff --git a/interface/src/devices/PrioVR.cpp b/interface/src/devices/PrioVR.cpp index 70c668a162..78b802ac9c 100644 --- a/interface/src/devices/PrioVR.cpp +++ b/interface/src/devices/PrioVR.cpp @@ -215,7 +215,7 @@ void PrioVR::renderCalibrationCountdown() { static TextRenderer* textRenderer = TextRenderer::getInstance(MONO_FONT_FAMILY, 18, QFont::Bold, false, TextRenderer::OUTLINE_EFFECT, 2); QByteArray text = "Assume T-Pose in " + QByteArray::number(secondsRemaining) + "..."; - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); textRenderer->draw((glCanvas->width() - textRenderer->computeWidth(text.constData())) / 2, glCanvas->height() / 2, text); diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index e2b4fedd50..fb9f5f74e9 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -461,7 +461,7 @@ void SixenseManager::updateCalibration(const sixenseControllerData* controllers) void SixenseManager::emulateMouse(PalmData* palm, int index) { Application* application = Application::getInstance(); MyAvatar* avatar = application->getAvatar(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); QPoint pos; Qt::MouseButton bumperButton; diff --git a/interface/src/devices/TV3DManager.cpp b/interface/src/devices/TV3DManager.cpp index ff40329b6c..9af13c461e 100644 --- a/interface/src/devices/TV3DManager.cpp +++ b/interface/src/devices/TV3DManager.cpp @@ -35,7 +35,7 @@ bool TV3DManager::isConnected() { } void TV3DManager::connect() { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); int width = glCanvas->getDeviceWidth(); int height = glCanvas->getDeviceHeight(); Camera& camera = *Application::getInstance()->getCamera(); @@ -93,7 +93,7 @@ void TV3DManager::display(Camera& whichCamera) { // left eye portal int portalX = 0; int portalY = 0; - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); QSize deviceSize = glCanvas->getDeviceSize() * Application::getInstance()->getRenderResolutionScale(); int portalW = deviceSize.width() / 2; diff --git a/interface/src/devices/Visage.h b/interface/src/devices/Visage.h index 6d8c87eef7..38e337aada 100644 --- a/interface/src/devices/Visage.h +++ b/interface/src/devices/Visage.h @@ -28,7 +28,7 @@ namespace VisageSDK { /// Handles input from the Visage webcam feature tracking software. class Visage : public FaceTracker { Q_OBJECT - SINGLETON_DEPENDENCY(Visage, false) + SINGLETON_DEPENDENCY public: void init(); diff --git a/interface/src/scripting/ControllerScriptingInterface.cpp b/interface/src/scripting/ControllerScriptingInterface.cpp index 545de00d7d..f8b0a61487 100644 --- a/interface/src/scripting/ControllerScriptingInterface.cpp +++ b/interface/src/scripting/ControllerScriptingInterface.cpp @@ -268,7 +268,7 @@ void ControllerScriptingInterface::releaseJoystick(int joystickIndex) { } glm::vec2 ControllerScriptingInterface::getViewportDimensions() const { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); return glm::vec2(glCanvas->width(), glCanvas->height()); } diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index a0f1d03dc3..f26e2b09c1 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -147,7 +147,7 @@ void ApplicationOverlay::renderOverlay(bool renderToTexture) { PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()"); Application* application = Application::getInstance(); Overlays& overlays = application->getOverlays(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); MyAvatar* myAvatar = application->getAvatar(); _textureFov = glm::radians(Menu::getInstance()->getOculusUIAngularSize()); @@ -215,7 +215,7 @@ void ApplicationOverlay::displayOverlayTexture() { if (_alpha == 0.0f) { return; } - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); @@ -380,7 +380,7 @@ void ApplicationOverlay::displayOverlayTexture3DTV(Camera& whichCamera, float as glEnd(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); if (_crosshairTexture == 0) { _crosshairTexture = glCanvas->bindTexture(QImage(PathUtils::resourcesPath() + "images/sixense-reticle.png")); } @@ -434,7 +434,7 @@ void ApplicationOverlay::computeOculusPickRay(float x, float y, glm::vec3& origi //Caculate the click location using one of the sixense controllers. Scale is not applied QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const { Application* application = Application::getInstance(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); MyAvatar* myAvatar = application->getAvatar(); glm::vec3 tip = myAvatar->getLaserPointerTipPosition(palm); @@ -513,7 +513,7 @@ bool ApplicationOverlay::calculateRayUICollisionPoint(const glm::vec3& position, //Renders optional pointers void ApplicationOverlay::renderPointers() { Application* application = Application::getInstance(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); //lazily load crosshair texture if (_crosshairTexture == 0) { @@ -561,7 +561,7 @@ void ApplicationOverlay::renderPointers() { void ApplicationOverlay::renderControllerPointers() { Application* application = Application::getInstance(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); MyAvatar* myAvatar = application->getAvatar(); //Static variables used for storing controller state @@ -706,7 +706,7 @@ void ApplicationOverlay::renderPointersOculus(const glm::vec3& eyePos) { //Renders a small magnification of the currently bound texture at the coordinates void ApplicationOverlay::renderMagnifier(glm::vec2 magPos, float sizeMult, bool showBorder) const { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); const int widgetWidth = glCanvas->width(); const int widgetHeight = glCanvas->height(); @@ -764,7 +764,7 @@ void ApplicationOverlay::renderAudioMeter() { Application* application = Application::getInstance(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); Audio* audio = application->getAudio(); // Display a single screen-size quad to create an alpha blended 'collision' flash @@ -895,7 +895,7 @@ void ApplicationOverlay::renderStatsAndLogs() { Application* application = Application::getInstance(); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); const OctreePacketProcessor& octreePacketProcessor = application->getOctreePacketProcessor(); BandwidthMeter* bandwidthMeter = application->getBandwidthMeter(); NodeBounds& nodeBoundsDisplay = application->getNodeBoundsDisplay(); @@ -937,7 +937,7 @@ void ApplicationOverlay::renderDomainConnectionStatusBorder() { auto nodeList = DependencyManager::get(); if (nodeList && !nodeList->getDomainHandler().isConnected()) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); int right = glCanvas->width(); int bottom = glCanvas->height(); diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 7baacd3d5a..096e2582fc 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -215,7 +215,7 @@ void PreferencesDialog::savePreferences() { myAvatar->setClampedTargetScale(ui.avatarScaleSpin->value()); Application::getInstance()->getVoxels()->setMaxVoxels(ui.maxVoxelsSpin->value()); - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); Application::getInstance()->resizeGL(glCanvas->width(), glCanvas->height()); Menu::getInstance()->setRealWorldFieldOfView(ui.realWorldFieldOfViewSpin->value()); diff --git a/interface/src/ui/Snapshot.cpp b/interface/src/ui/Snapshot.cpp index 60fed78fce..3ea2a2fb2b 100644 --- a/interface/src/ui/Snapshot.cpp +++ b/interface/src/ui/Snapshot.cpp @@ -83,7 +83,7 @@ QTemporaryFile* Snapshot::saveTempSnapshot() { } QFile* Snapshot::savedFileForSnapshot(bool isTemporary) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); QImage shot = glCanvas->grabFrameBuffer(); Avatar* avatar = Application::getInstance()->getAvatar(); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index 1402ad53cf..717c3c7492 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -56,7 +56,7 @@ Stats::Stats(): _metavoxelReceiveProgress(0), _metavoxelReceiveTotal(0) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); resetWidth(glCanvas->width(), 0); } @@ -67,7 +67,7 @@ void Stats::toggleExpanded() { // called on mouse click release // check for clicks over stats in order to expand or contract them void Stats::checkClick(int mouseX, int mouseY, int mouseDragStartedX, int mouseDragStartedY, int horizontalOffset) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); if (0 != glm::compMax(glm::abs(glm::ivec2(mouseX - mouseDragStartedX, mouseY - mouseDragStartedY)))) { // not worried about dragging on stats @@ -122,7 +122,7 @@ void Stats::checkClick(int mouseX, int mouseY, int mouseDragStartedX, int mouseD } void Stats::resetWidth(int width, int horizontalOffset) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); int extraSpace = glCanvas->width() - horizontalOffset -2 - STATS_GENERAL_MIN_WIDTH - (Menu::getInstance()->isOptionChecked(MenuOption::TestPing) ? STATS_PING_MIN_WIDTH -1 : 0) @@ -198,7 +198,7 @@ void Stats::display( int bytesPerSecond, int voxelPacketsToProcess) { - GLCanvas::SharedPointer glCanvas = DependencyManager::get(); + auto glCanvas = DependencyManager::get(); unsigned int backgroundColor = 0x33333399; int verticalOffset = 0, lines = 0; diff --git a/libraries/animation/src/AnimationCache.h b/libraries/animation/src/AnimationCache.h index 5bec0b8902..f2d4e7c233 100644 --- a/libraries/animation/src/AnimationCache.h +++ b/libraries/animation/src/AnimationCache.h @@ -26,7 +26,7 @@ typedef QSharedPointer AnimationPointer; /// Scriptable interface for FBX animation loading. class AnimationCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(AnimationCache, false) + SINGLETON_DEPENDENCY public: Q_INVOKABLE AnimationPointer getAnimation(const QString& url) { return getAnimation(QUrl(url)); } diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index be09123901..525f65a70f 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -29,6 +29,8 @@ #include +#include + #include "DomainHandler.h" #include "Node.h" #include "UUIDHasher.h" @@ -69,7 +71,7 @@ namespace PingType { class LimitedNodeList : public QObject { Q_OBJECT - SINGLETON_DEPENDENCY(LimitedNodeList, true); + SINGLETON_DEPENDENCY public: const QUuid& getSessionUUID() const { return _sessionUUID; } diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 3a9ecf2405..6128c0f7c9 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -42,7 +42,7 @@ class Assignment; class NodeList : public LimitedNodeList { Q_OBJECT - SINGLETON_DEPENDENCY(NodeList, true) + SINGLETON_DEPENDENCY public: NodeType_t getOwnerType() const { return _ownerType; } diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h index c1cfa031d4..29872fc487 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -20,7 +20,7 @@ class ProgramObject; /// A screen space ambient occlusion effect. See John Chapman's tutorial at /// http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html for reference. class AmbientOcclusionEffect { - SINGLETON_DEPENDENCY(AmbientOcclusionEffect, false) + SINGLETON_DEPENDENCY public: diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 14d383418f..56079b05b7 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -128,7 +128,7 @@ void DeferredLightingEffect::addSpotLight(const glm::vec3& position, float radiu void DeferredLightingEffect::prepare() { // clear the normal and specular buffers - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); textureCache->setPrimaryDrawBuffers(false, true, false); glClear(GL_COLOR_BUFFER_BIT); textureCache->setPrimaryDrawBuffers(false, false, true); @@ -150,7 +150,7 @@ void DeferredLightingEffect::render() { glDisable(GL_COLOR_MATERIAL); glDepthMask(false); - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); QOpenGLFramebufferObject* primaryFBO = textureCache->getPrimaryFramebufferObject(); primaryFBO->release(); @@ -247,7 +247,7 @@ void DeferredLightingEffect::render() { const glm::vec3& eyePoint = _viewState->getCurrentViewFrustum()->getPosition(); float nearRadius = glm::distance(eyePoint, _viewState->getCurrentViewFrustum()->getNearTopLeft()); - GeometryCache::SharedPointer geometryCache = DependencyManager::get(); + auto geometryCache = DependencyManager::get(); if (!_pointLights.isEmpty()) { _pointLight.bind(); diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index f0f3df91f5..41cac328fb 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -24,7 +24,7 @@ class PostLightingRenderable; /// Handles deferred lighting for the bits that require it (voxels, metavoxels...) class DeferredLightingEffect { - SINGLETON_DEPENDENCY(DeferredLightingEffect, false) + SINGLETON_DEPENDENCY public: diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 56092945a2..b3dd50ea56 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -699,7 +699,7 @@ void NetworkGeometry::clearLoadPriority(const QPointer& owner) { void NetworkGeometry::setTextureWithNameToURL(const QString& name, const QUrl& url) { if (_meshes.size() > 0) { - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); for (int i = 0; i < _meshes.size(); i++) { NetworkMesh& mesh = _meshes[i]; for (int j = 0; j < mesh.parts.size(); j++) { @@ -914,7 +914,7 @@ void NetworkGeometry::reinsert() { void NetworkGeometry::setGeometry(const FBXGeometry& geometry) { _geometry = geometry; - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); foreach (const FBXMesh& mesh, _geometry.meshes) { NetworkMesh networkMesh; diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 44b7cda8ec..a2c7b197cd 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -34,7 +34,7 @@ class NetworkTexture; /// Stores cached geometry. class GeometryCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(GeometryCache, false) + SINGLETON_DEPENDENCY public: void renderHemisphere(int slices, int stacks); diff --git a/libraries/render-utils/src/GlowEffect.cpp b/libraries/render-utils/src/GlowEffect.cpp index fb7189f61e..22eb9e1764 100644 --- a/libraries/render-utils/src/GlowEffect.cpp +++ b/libraries/render-utils/src/GlowEffect.cpp @@ -138,7 +138,7 @@ static void maybeRelease(QOpenGLFramebufferObject* fbo) { QOpenGLFramebufferObject* GlowEffect::render(bool toTexture) { PerformanceTimer perfTimer("glowEffect"); - TextureCache::SharedPointer textureCache = DependencyManager::get(); + auto textureCache = DependencyManager::get(); QOpenGLFramebufferObject* primaryFBO = textureCache->getPrimaryFramebufferObject(); primaryFBO->release(); glBindTexture(GL_TEXTURE_2D, primaryFBO->texture()); diff --git a/libraries/render-utils/src/GlowEffect.h b/libraries/render-utils/src/GlowEffect.h index 4828e1764e..40edf7ca93 100644 --- a/libraries/render-utils/src/GlowEffect.h +++ b/libraries/render-utils/src/GlowEffect.h @@ -27,7 +27,7 @@ class ProgramObject; /// A generic full screen glow effect. class GlowEffect : public QObject { Q_OBJECT - SINGLETON_DEPENDENCY(GlowEffect, false) + SINGLETON_DEPENDENCY public: diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 6d313bc7aa..51acc01ad9 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -2336,8 +2336,8 @@ int Model::renderMeshesFromList(QVector& list, gpu::Batch& batch, RenderMod Locations* locations, SkinLocations* skinLocations) { PROFILE_RANGE(__FUNCTION__); - TextureCache::SharedPointer textureCache = DependencyManager::get(); - GlowEffect::SharedPointer glowEffect = DependencyManager::get(); + auto textureCache = DependencyManager::get(); + auto glowEffect = DependencyManager::get(); QString lastMaterialID; int meshPartsRendered = 0; updateVisibleJointStates(); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 1d4f20b617..f6e2de2b99 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -470,7 +470,7 @@ Q_DECLARE_METATYPE(QVector) /// Handle management of pending models that need blending class ModelBlender : public QObject { Q_OBJECT - SINGLETON_DEPENDENCY(ModelBlender, false) + SINGLETON_DEPENDENCY public: diff --git a/libraries/render-utils/src/TextureCache.h b/libraries/render-utils/src/TextureCache.h index 6957fb0830..b8843c38bc 100644 --- a/libraries/render-utils/src/TextureCache.h +++ b/libraries/render-utils/src/TextureCache.h @@ -32,7 +32,7 @@ enum TextureType { DEFAULT_TEXTURE, NORMAL_TEXTURE, SPECULAR_TEXTURE, EMISSIVE_T /// Stores cached textures, including render-to-texture targets. class TextureCache : public ResourceCache { Q_OBJECT - SINGLETON_DEPENDENCY(TextureCache, false) + SINGLETON_DEPENDENCY public: From d8170516ff8d17db596d122bbaa04f95bef28fb8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 13 Jan 2015 11:05:51 -0800 Subject: [PATCH 08/16] Remove VoxelServer.cpp kept during merge --- assignment-client/src/voxels/VoxelServer.cpp | 102 ------------------- 1 file changed, 102 deletions(-) delete mode 100644 assignment-client/src/voxels/VoxelServer.cpp diff --git a/assignment-client/src/voxels/VoxelServer.cpp b/assignment-client/src/voxels/VoxelServer.cpp deleted file mode 100644 index eb7eff4930..0000000000 --- a/assignment-client/src/voxels/VoxelServer.cpp +++ /dev/null @@ -1,102 +0,0 @@ -// -// VoxelServer.cpp -// assignment-client/src/voxels -// -// Created by Brad Hefta-Gaub on 9/16/13. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include - -#include "VoxelServer.h" -#include "VoxelServerConsts.h" -#include "VoxelNodeData.h" - -const char* VOXEL_SERVER_NAME = "Voxel"; -const char* VOXEL_SERVER_LOGGING_TARGET_NAME = "voxel-server"; -const char* LOCAL_VOXELS_PERSIST_FILE = "resources/voxels.svo"; - -VoxelServer::VoxelServer(const QByteArray& packet) : OctreeServer(packet) { - // nothing special to do here... -} - -VoxelServer::~VoxelServer() { - // nothing special to do here... -} - -OctreeQueryNode* VoxelServer::createOctreeQueryNode() { - return new VoxelNodeData(); -} - -Octree* VoxelServer::createTree() { - return new VoxelTree(true); -} - -bool VoxelServer::hasSpecialPacketToSend(const SharedNodePointer& node) { - bool shouldSendEnvironments = _sendEnvironments && shouldDo(ENVIRONMENT_SEND_INTERVAL_USECS, OCTREE_SEND_INTERVAL_USECS); - return shouldSendEnvironments; -} - -int VoxelServer::sendSpecialPacket(const SharedNodePointer& node, OctreeQueryNode* queryNode, int& packetsSent) { - - unsigned char* copyAt = _tempOutputBuffer; - - int numBytesPacketHeader = populatePacketHeader(reinterpret_cast(_tempOutputBuffer), PacketTypeEnvironmentData); - copyAt += numBytesPacketHeader; - int envPacketLength = numBytesPacketHeader; - - // pack in flags - OCTREE_PACKET_FLAGS flags = 0; - OCTREE_PACKET_FLAGS* flagsAt = (OCTREE_PACKET_FLAGS*)copyAt; - *flagsAt = flags; - copyAt += sizeof(OCTREE_PACKET_FLAGS); - envPacketLength += sizeof(OCTREE_PACKET_FLAGS); - - // pack in sequence number - OCTREE_PACKET_SEQUENCE* sequenceAt = (OCTREE_PACKET_SEQUENCE*)copyAt; - *sequenceAt = queryNode->getSequenceNumber(); - copyAt += sizeof(OCTREE_PACKET_SEQUENCE); - envPacketLength += sizeof(OCTREE_PACKET_SEQUENCE); - - // pack in timestamp - OCTREE_PACKET_SENT_TIME now = usecTimestampNow(); - OCTREE_PACKET_SENT_TIME* timeAt = (OCTREE_PACKET_SENT_TIME*)copyAt; - *timeAt = now; - copyAt += sizeof(OCTREE_PACKET_SENT_TIME); - envPacketLength += sizeof(OCTREE_PACKET_SENT_TIME); - - int environmentsToSend = getSendMinimalEnvironment() ? 1 : getEnvironmentDataCount(); - - for (int i = 0; i < environmentsToSend; i++) { - envPacketLength += getEnvironmentData(i)->getBroadcastData(_tempOutputBuffer + envPacketLength); - } - - DependencyManager::get()->writeDatagram((char*) _tempOutputBuffer, envPacketLength, SharedNodePointer(node)); - queryNode->packetSent(_tempOutputBuffer, envPacketLength); - packetsSent = 1; - - return envPacketLength; -} - - -void VoxelServer::readAdditionalConfiguration(const QJsonObject& settingsSectionObject) { - // should we send environments? Default is yes, but this command line suppresses sending - readOptionBool(QString("sendEnvironments"), settingsSectionObject, _sendEnvironments); - bool dontSendEnvironments = !_sendEnvironments; - if (dontSendEnvironments) { - qDebug("Sending environments suppressed..."); - } else { - // should we send environments? Default is yes, but this command line suppresses sending - //const char* MINIMAL_ENVIRONMENT = "--minimalEnvironment"; - //_sendMinimalEnvironment = cmdOptionExists(_argc, _argv, MINIMAL_ENVIRONMENT); - - readOptionBool(QString("minimalEnvironment"), settingsSectionObject, _sendMinimalEnvironment); - qDebug("Using Minimal Environment=%s", debug::valueOf(_sendMinimalEnvironment)); - } - qDebug("Sending environments=%s", debug::valueOf(_sendEnvironments)); - - DependencyManager::get()->addNodeTypeToInterestSet(NodeType::AnimationServer); -} From 4429e144f4342b0427976c27511f505899c6bd0f Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 13 Jan 2015 11:10:13 -0800 Subject: [PATCH 09/16] Fix merge accidental code delete --- interface/src/ui/ApplicationOverlay.cpp | 14 ++++++++++++++ interface/src/ui/ApplicationOverlay.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index 9381ad48f8..2c5cc5b267 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -950,6 +950,20 @@ void ApplicationOverlay::renderDomainConnectionStatusBorder() { if (nodeList && !nodeList->getDomainHandler().isConnected()) { auto glCanvas = DependencyManager::get(); auto geometryCache = DependencyManager::get(); + int width = glCanvas->width(); + int height = glCanvas->height(); + + if (width != _previousBorderWidth || height != _previousBorderHeight) { + QVector border; + border << glm::vec2(0, 0); + border << glm::vec2(0, height); + border << glm::vec2(width, height); + border << glm::vec2(width, 0); + border << glm::vec2(0, 0); + geometryCache->updateVertices(_domainStatusBorder, border); + _previousBorderWidth = width; + _previousBorderHeight = height; + } glColor3f(CONNECTION_STATUS_BORDER_COLOR[0], CONNECTION_STATUS_BORDER_COLOR[1], diff --git a/interface/src/ui/ApplicationOverlay.h b/interface/src/ui/ApplicationOverlay.h index b20172f3f9..e2094f2a8e 100644 --- a/interface/src/ui/ApplicationOverlay.h +++ b/interface/src/ui/ApplicationOverlay.h @@ -116,6 +116,9 @@ private: int _domainStatusBorder; int _magnifierBorder; + int _previousBorderWidth; + int _previousBorderHeight; + glm::vec3 _previousMagnifierBottomLeft; glm::vec3 _previousMagnifierBottomRight; glm::vec3 _previousMagnifierTopLeft; From 27cc3d297eb00952558d5e4794282cf86b639c16 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 13 Jan 2015 20:27:38 -0800 Subject: [PATCH 10/16] DependencyManager update - Now need a call to DependencyManager::set(...) that support variable arguments number and type - Now support destroy operation via DependencyManager::destroy() - Now support inheritance. All inheritance relationship need to be specified via DependencyManager::registerInheritance() before any call to the DepedencyManager involving Base. - Dependencies should now inherit from the class Dependency as well as using SINGLETON_DEPENDENCY --- libraries/shared/src/DependencyManager.cpp | 6 ++ libraries/shared/src/DependencyManager.h | 86 ++++++++++++++++------ 2 files changed, 70 insertions(+), 22 deletions(-) diff --git a/libraries/shared/src/DependencyManager.cpp b/libraries/shared/src/DependencyManager.cpp index 440c0ac68d..5f78f6bcd5 100644 --- a/libraries/shared/src/DependencyManager.cpp +++ b/libraries/shared/src/DependencyManager.cpp @@ -10,3 +10,9 @@ // #include "DependencyManager.h" + +DependencyManager DependencyManager::_manager; + +QSharedPointer& DependencyManager::safeGet(size_t hashCode) { + return _instanceHash[hashCode]; +} \ No newline at end of file diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index 9aecb45657..e996e10590 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -12,29 +12,31 @@ #ifndef hifi_DependencyManager_h #define hifi_DependencyManager_h -#include #include +#include +#include +#include #include #define SINGLETON_DEPENDENCY \ -private:\ - void customDeleter() {\ - QObject* thisObject = dynamic_cast(this);\ - if (thisObject && thisObject->parent()) {\ - thisObject->deleteLater();\ - } else {\ - delete this;\ - }\ - }\ friend class DependencyManager; -class QObject; +class Dependency { +protected: + virtual ~Dependency() {} + virtual void customDeleter() { + delete this; + } + + friend class DependencyManager; +}; // usage: -// T* instance = DependencyManager::get(); -// T* instance = DependencyManager::set(Args... args); -// T* instance = DependencyManager::destroy(); +// auto instance = DependencyManager::get(); +// auto instance = DependencyManager::set(Args... args); +// DependencyManager::destroy(); +// DependencyManager::registerInheritance(); class DependencyManager { public: template @@ -46,32 +48,72 @@ public: template static void destroy(); + template + static void registerInheritance(); + private: + static DependencyManager _manager; + template - static QSharedPointer& storage(); + size_t getHashCode(); + + QSharedPointer& safeGet(size_t hashCode); + + QHash> _instanceHash; + QHash _inheritanceHash; }; template QSharedPointer DependencyManager::get() { - return storage(); + static size_t hashCode = _manager.getHashCode(); + static QWeakPointer instance; + + if (instance.isNull()) { + instance = qSharedPointerCast(_manager.safeGet(hashCode)); + + if (instance.isNull()) { + qWarning() << "DependencyManager::get(): No instance available for" << typeid(T).name(); + } + } + + return instance.toStrongRef(); } template QSharedPointer DependencyManager::set(Args&&... args) { + static size_t hashCode = _manager.getHashCode(); + QSharedPointer instance(new T(args...), &T::customDeleter); - storage().swap(instance); - return storage(); + QSharedPointer storedInstance = qSharedPointerCast(instance); + _manager.safeGet(hashCode).swap(storedInstance); + + return instance; } template void DependencyManager::destroy() { - storage().clear(); + static size_t hashCode = _manager.getHashCode(); + _manager.safeGet(hashCode).clear(); +} + +template +void DependencyManager::registerInheritance() { + size_t baseHashCode = typeid(Base).hash_code(); + size_t derivedHashCode = typeid(Derived).hash_code(); + _manager._inheritanceHash.insert(baseHashCode, derivedHashCode); } template -QSharedPointer& DependencyManager::storage() { - static QSharedPointer sharedPointer; - return sharedPointer; +size_t DependencyManager::getHashCode() { + size_t hashCode = typeid(T).hash_code(); + auto derivedHashCode = _inheritanceHash.find(hashCode); + + while (derivedHashCode != _inheritanceHash.end()) { + hashCode = derivedHashCode.value(); + derivedHashCode = _inheritanceHash.find(hashCode); + } + + return hashCode; } #endif // hifi_DependencyManager_h From 36db547c0f25f457dbdf5770c679fd1ea8866550 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 13 Jan 2015 20:35:45 -0800 Subject: [PATCH 11/16] Setup DependencyManager before any member of Application --- interface/src/Application.cpp | 53 +++++++++++++++++++++++++++-------- interface/src/Application.h | 1 + 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 11b28fc503..1ac3b29e76 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -85,6 +85,8 @@ #include "Util.h" #include "audio/AudioToolBox.h" +#include "audio/AudioIOStatsRenderer.h" +#include "audio/AudioScope.h" #include "devices/DdeFaceTracker.h" #include "devices/Faceshift.h" @@ -142,8 +144,43 @@ void messageHandler(QtMsgType type, const QMessageLogContext& context, const QSt } } +bool setupEssentials(int& argc, char** argv) { + unsigned int listenPort = 0; // bind to an ephemeral port by default + const char** constArgv = const_cast(argv); + const char* portStr = getCmdOption(argc, constArgv, "--listenPort"); + if (portStr) { + listenPort = atoi(portStr); + } + + DependencyManager::registerInheritance(); + + // Set dependencies + DependencyManager::get(); + auto glCanvas = DependencyManager::set(); + auto addressManager = DependencyManager::set(); + auto nodeList = DependencyManager::set(NodeType::Agent, listenPort); + auto geometryCache = DependencyManager::set(); + auto glowEffect = DependencyManager::set(); + auto faceshift = DependencyManager::set(); + auto audio = DependencyManager::set