From f726c5bc3a466971b2f2fba20488bd53e500dd48 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 12 Jun 2017 01:16:51 -0700 Subject: [PATCH] handle mirrored packets in AudioMixerClientData --- assignment-client/src/audio/AudioMixer.cpp | 8 ++++++-- .../src/audio/AudioMixerClientData.cpp | 17 +++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 87f51ea73c..9b095d3aa7 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -55,7 +55,8 @@ QVector AudioMixer::_zoneSettings; QVector AudioMixer::_zoneReverbSettings; AudioMixer::AudioMixer(ReceivedMessage& message) : - ThreadedAssignment(message) { + ThreadedAssignment(message) +{ // Always clear settings first // This prevents previous assignment settings from sticking around @@ -101,6 +102,7 @@ AudioMixer::AudioMixer(ReceivedMessage& message) : ); connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled); + } void AudioMixer::queueAudioPacket(QSharedPointer message, SharedNodePointer node) { @@ -115,7 +117,9 @@ void AudioMixer::queueMirroredAudioPacket(QSharedPointer messag // make sure we have a mirrored node for the original sender of the packet auto nodeList = DependencyManager::get(); - auto node = nodeList->addOrUpdateNode(message->getSourceID(), NodeType::Agent, + QUuid nodeID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); + + auto node = nodeList->addOrUpdateNode(nodeID, NodeType::Agent, message->getSenderSockAddr(), message->getSenderSockAddr()); node->setIsMirror(true); diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 135047f3a5..7c747a3417 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -118,12 +118,9 @@ void AudioMixerClientData::potentiallyMirrorPacket(ReceivedMessage& message) { } // construct an NLPacket to send to the mirror that has the contents of the received packet - std::unique_ptr messageData { new char[message.getSize()] }; - memcpy(messageData.get(), message.getMessage().data(), message.getSize()); - auto packet = NLPacket::fromReceivedPacket(std::move(messageData), message.getSize(), - message.getSenderSockAddr()); - - packet->setType(mirroredType); + auto packet = NLPacket::create(mirroredType, message.getSize() + NUM_BYTES_RFC4122_UUID); + packet->write(message.getSourceID().toRfc4122()); + packet->write(message.getMessage()); nodeList->sendPacket(std::move(packet), nodeList->getMirrorSocket()); } @@ -220,8 +217,11 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) { bool isMicStream = false; if (packetType == PacketType::MicrophoneAudioWithEcho + || packetType == PacketType::MirroredMicrophoneAudioWithEcho || packetType == PacketType::MicrophoneAudioNoEcho - || packetType == PacketType::SilentAudioFrame) { + || packetType == PacketType::MirroredMicrophoneAudioNoEcho + || packetType == PacketType::SilentAudioFrame + || packetType == PacketType::MirroredSilentAudioFrame) { QWriteLocker writeLocker { &_streamsLock }; @@ -256,7 +256,8 @@ int AudioMixerClientData::parseData(ReceivedMessage& message) { writeLocker.unlock(); isMicStream = true; - } else if (packetType == PacketType::InjectAudio) { + } else if (packetType == PacketType::InjectAudio + || packetType == PacketType::MirroredInjectAudio) { // this is injected audio // grab the stream identifier for this injected audio message.seek(sizeof(quint16));