diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 1a63d2c4d5..206d115c84 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -171,18 +171,13 @@ void Agent::run() { usleep(usecToSleep); } - if (audioMixer && audioMixer->getActiveSocket() && scriptedAudioInjector.hasSamplesToInject()) { + if (audioMixer && NodeList::getInstance()->getNodeActiveSocketOrPing(audioMixer) && scriptedAudioInjector.hasSamplesToInject()) { // we have an audio mixer and samples to inject, send those off scriptedAudioInjector.injectAudio(NodeList::getInstance()->getNodeSocket(), audioMixer->getActiveSocket()); // clear out the audio injector so that it doesn't re-send what we just sent scriptedAudioInjector.clear(); } - - if (audioMixer && !audioMixer->getActiveSocket()) { - // don't have an active socket for the audio-mixer, ping it now - NodeList::getInstance()->pingPublicAndLocalSocketsForInactiveNode(audioMixer); - } if (voxelScripter.getVoxelPacketSender()->voxelServersExist()) { // allow the scripter's call back to setup visual data diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 3bf6813465..a943d6dde1 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -687,13 +687,10 @@ unsigned NodeList::broadcastToNodes(unsigned char* broadcastData, size_t dataByt for(NodeList::iterator node = begin(); node != end(); node++) { // only send to the NodeTypes we are asked to send to. if (memchr(nodeTypes, node->getType(), numNodeTypes)) { - if (node->getActiveSocket()) { + if (getNodeActiveSocketOrPing(&(*node))) { // we know which socket is good for this node, send there _nodeSocket.send(node->getActiveSocket(), broadcastData, dataBytes); ++n; - } else { - // we don't have an active link to this node, ping it to set that up - pingPublicAndLocalSocketsForInactiveNode(&(*node)); } } } @@ -718,6 +715,15 @@ void NodeList::possiblyPingInactiveNodes() { } } +sockaddr* NodeList::getNodeActiveSocketOrPing(Node* node) { + if (node->getActiveSocket()) { + return node->getActiveSocket(); + } else { + pingPublicAndLocalSocketsForInactiveNode(node); + return NULL; + } +} + void NodeList::activateSocketFromNodeCommunication(sockaddr *nodeAddress) { for(NodeList::iterator node = begin(); node != end(); node++) { if (!node->getActiveSocket()) { diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index c15c37d7bf..47ea2e9e41 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -141,6 +141,7 @@ public: void removeDomainListener(DomainChangeListener* listener); void possiblyPingInactiveNodes(); + sockaddr* getNodeActiveSocketOrPing(Node* node); private: static NodeList* _sharedInstance; diff --git a/libraries/voxels/src/JurisdictionListener.cpp b/libraries/voxels/src/JurisdictionListener.cpp index 4cb946620d..6871c881df 100644 --- a/libraries/voxels/src/JurisdictionListener.cpp +++ b/libraries/voxels/src/JurisdictionListener.cpp @@ -46,11 +46,7 @@ bool JurisdictionListener::queueJurisdictionRequest() { NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { - - // only send to the NodeTypes that are interested in our jurisdiction details - const int numNodeTypes = 1; - const NODE_TYPE nodeTypes[numNodeTypes] = { NODE_TYPE_VOXEL_SERVER }; - if (node->getActiveSocket() != NULL && memchr(nodeTypes, node->getType(), numNodeTypes)) { + if (nodeList->getNodeActiveSocketOrPing(&(*node)) && node->getType() == NODE_TYPE_VOXEL_SERVER) { sockaddr* nodeAddress = node->getActiveSocket(); PacketSender::queuePacketForSending(*nodeAddress, bufferOut, sizeOut); nodeCount++; diff --git a/libraries/voxels/src/VoxelEditPacketSender.cpp b/libraries/voxels/src/VoxelEditPacketSender.cpp index 11e4600f6b..8b7c82a4ca 100644 --- a/libraries/voxels/src/VoxelEditPacketSender.cpp +++ b/libraries/voxels/src/VoxelEditPacketSender.cpp @@ -90,11 +90,8 @@ bool VoxelEditPacketSender::voxelServersExist() const { for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER if (node->getType() == NODE_TYPE_VOXEL_SERVER) { - if (node->getActiveSocket()) { + if (nodeList->getNodeActiveSocketOrPing(&(*node))) { return true; - } else { - // we don't have an active socket for this node, ping it - nodeList->pingPublicAndLocalSocketsForInactiveNode(&(*node)); } } } @@ -109,12 +106,9 @@ void VoxelEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, unsigned ch // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER if (node->getType() == NODE_TYPE_VOXEL_SERVER && ((node->getUUID() == nodeUUID) || (nodeUUID.isNull()))) { - if (node->getActiveSocket()) { + if (nodeList->getNodeActiveSocketOrPing(&(*node))) { sockaddr* nodeAddress = node->getActiveSocket(); queuePacketForSending(*nodeAddress, buffer, length); - } else { - // we don't have an active socket for this node, ping it - nodeList->pingPublicAndLocalSocketsForInactiveNode(&(*node)); } } }