diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 39011b8083..4236072857 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -438,16 +438,12 @@ int AudioMixer::prepareMixForListeningNode(Node* node) { // loop through all other nodes that have sufficient audio to mix int streamsMixed = 0; - NodeHashSnapshot snapshotHash = NodeList::getInstance()->getNodeHash().snapshot_table(); - - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer otherNode = it->second; - + NodeList::getInstance()->eachNode([&](const SharedNodePointer& otherNode){ if (otherNode->getLinkedData()) { AudioMixerClientData* otherNodeClientData = (AudioMixerClientData*) otherNode->getLinkedData(); - + // enumerate the ARBs attached to the otherNode and add all that should be added to mix - + const QHash& otherNodeAudioStreams = otherNodeClientData->getAudioStreams(); QHash::ConstIterator i; for (i = otherNodeAudioStreams.constBegin(); i != otherNodeAudioStreams.constEnd(); i++) { @@ -457,14 +453,15 @@ int AudioMixer::prepareMixForListeningNode(Node* node) { if (otherNodeStream->getType() == PositionalAudioStream::Microphone) { streamUUID = otherNode->getUUID(); } - + if (*otherNode != *node || otherNodeStream->shouldLoopbackForNode()) { - streamsMixed += addStreamToMixForListeningNodeWithStream(listenerNodeData, streamUUID, - otherNodeStream, nodeAudioStream); + streamsMixed += addStreamToMixForListeningNodeWithStream(listenerNodeData, streamUUID, + otherNodeStream, nodeAudioStream); } } } - } + }); + return streamsMixed; } @@ -485,16 +482,11 @@ void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const Hif QByteArray packet = receivedPacket; populatePacketHeader(packet, PacketTypeMuteEnvironment); - NodeHashSnapshot snapshotHash = nodeList->getNodeHash().snapshot_table(); - - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer node = it->second; - + nodeList->eachNode([&](const SharedNodePointer& node){ if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != nodeList->sendingNodeForPacket(receivedPacket)) { nodeList->writeDatagram(packet, packet.size(), node); } - } - + }); } else { // let processNodeData handle it. nodeList->processNodeData(senderSockAddr, receivedPacket); @@ -558,9 +550,8 @@ void AudioMixer::sendStatsPacket() { NodeList* nodeList = NodeList::getInstance(); int clientNumber = 0; - NodeHashSnapshot snapshotHash = nodeList->getNodeHash().snapshot_table(); - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { + nodeList->eachNode([&](const SharedNodePointer& node) { // if we're too large, send the packet if (sizeOfStats > TOO_BIG_FOR_MTU) { nodeList->sendStatsToDomainServer(statsObject2); @@ -570,15 +561,15 @@ void AudioMixer::sendStatsPacket() { } clientNumber++; - AudioMixerClientData* clientData = static_cast(it->second->getLinkedData()); + AudioMixerClientData* clientData = static_cast(node->getLinkedData()); if (clientData) { - QString property = "jitterStats." + it->first.toString(); + QString property = "jitterStats." + node->getUUID().toString(); QString value = clientData->getAudioStreamStatsString(); statsObject2[qPrintable(property)] = value; somethingToSend = true; sizeOfStats += property.size() + value.size(); } - } + }); if (somethingToSend) { nodeList->sendStatsToDomainServer(statsObject2); @@ -717,10 +708,7 @@ void AudioMixer::run() { _lastPerSecondCallbackTime = now; } - NodeHashSnapshot snapshotHash = nodeList->getNodeHash().snapshot_table(); - - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer node = it->second; + nodeList->eachNode([&](const SharedNodePointer& node) { if (node->getLinkedData()) { AudioMixerClientData* nodeData = (AudioMixerClientData*)node->getLinkedData(); @@ -830,7 +818,7 @@ void AudioMixer::run() { ++_sumListeners; } } - } + }); ++_numStatFrames; @@ -888,11 +876,7 @@ void AudioMixer::perSecondActions() { _timeSpentPerHashMatchCallStats.getWindowSum() / WINDOW_LENGTH_USECS * 100.0, _timeSpentPerHashMatchCallStats.getCurrentIntervalSum() / USECS_PER_SECOND * 100.0); - NodeHashSnapshot snapshotHash = NodeList::getInstance()->getNodeHash().snapshot_table(); - - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer node = it->second; - + NodeList::getInstance()->eachNode([](const SharedNodePointer& node) { if (node->getLinkedData()) { AudioMixerClientData* nodeData = (AudioMixerClientData*)node->getLinkedData(); @@ -902,7 +886,7 @@ void AudioMixer::perSecondActions() { nodeData->printUpstreamDownstreamStats(); } } - } + }); } _datagramsReadPerCallStats.currentIntervalComplete(); diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 3c2fa92c7c..107ce29ac9 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -122,9 +122,7 @@ void AvatarMixer::broadcastAvatarData() { AvatarMixerClientData* nodeData = NULL; AvatarMixerClientData* otherNodeData = NULL; - NodeHashSnapshot snapshotHash = nodeList->getNodeHash().snapshot_table(); - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer node = it->second; + nodeList->eachNode([&](const SharedNodePointer& node) { if (node->getLinkedData() && node->getType() == NodeType::Agent && node->getActiveSocket() && (nodeData = reinterpret_cast(node->getLinkedData()))->getMutex().tryLock()) { ++_sumListeners; @@ -137,9 +135,7 @@ void AvatarMixer::broadcastAvatarData() { // this is an AGENT we have received head data from // send back a packet with other active node data to this node - NodeHashSnapshot snapshotHash = nodeList->getNodeHash().snapshot_table(); - for (auto it = snapshotHash.begin(); it != snapshotHash.end(); it++) { - SharedNodePointer otherNode = it->second; + nodeList->eachNode([&](const SharedNodePointer& otherNode) { if (otherNode->getLinkedData() && otherNode->getUUID() != node->getUUID() && (otherNodeData = reinterpret_cast(otherNode->getLinkedData()))->getMutex().tryLock()) { @@ -207,13 +203,13 @@ void AvatarMixer::broadcastAvatarData() { otherNodeData->getMutex().unlock(); } - } + }); nodeList->writeDatagram(mixedAvatarByteArray, node); nodeData->getMutex().unlock(); } - } + }); _lastFrameTimestamp = QDateTime::currentMSecsSinceEpoch(); }