From c7b3b79a235c5ea7fd2f1f2c03da5c6abde2a4dd Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 12 Jun 2017 11:13:43 -0700 Subject: [PATCH] use replicant nodes for audio packet replication --- .../src/audio/AudioMixerClientData.cpp | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 70c9b615d8..f28e8dfa0b 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -108,30 +108,34 @@ void AudioMixerClientData::processPackets() { void AudioMixerClientData::replicatePacket(ReceivedMessage& message) { auto nodeList = DependencyManager::get(); - if (!nodeList->getMirrorSocket().isNull()) { - PacketType mirroredType; - if (message.getType() == PacketType::MicrophoneAudioNoEcho) { - mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho; - } else if (message.getType() == PacketType::MicrophoneAudioWithEcho) { - mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho; - } else if (message.getType() == PacketType::InjectAudio) { - mirroredType = PacketType::ReplicatedInjectAudio; - } else if (message.getType() == PacketType::SilentAudioFrame) { - mirroredType = PacketType::ReplicatedSilentAudioFrame; - } else if (message.getType() == PacketType::NegotiateAudioFormat) { - mirroredType = PacketType::ReplicatedNegotiateAudioFormat; - } else { - return; - } + PacketType mirroredType; - // construct an NLPacket to send to the replicant that has the contents of the received packet - 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()); + if (message.getType() == PacketType::MicrophoneAudioNoEcho) { + mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho; + } else if (message.getType() == PacketType::MicrophoneAudioWithEcho) { + mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho; + } else if (message.getType() == PacketType::InjectAudio) { + mirroredType = PacketType::ReplicatedInjectAudio; + } else if (message.getType() == PacketType::SilentAudioFrame) { + mirroredType = PacketType::ReplicatedSilentAudioFrame; + } else if (message.getType() == PacketType::NegotiateAudioFormat) { + mirroredType = PacketType::ReplicatedNegotiateAudioFormat; + } else { + return; } + + // construct an NLPacket to send to the replicant that has the contents of the received packet + auto packet = NLPacket::create(mirroredType, message.getSize() + NUM_BYTES_RFC4122_UUID); + packet->write(message.getSourceID().toRfc4122()); + packet->write(message.getMessage()); + + // enumerate the replicant audio mixers and send them the replicated version of this packet + nodeList->eachMatchingNode([&](const SharedNodePointer& node)->bool { + return node->getType() == NodeType::ReplicantAudioMixer; + }, [&](const SharedNodePointer& node) { + nodeList->sendUnreliablePacket(*packet, node->getPublicSocket()); + }); } void AudioMixerClientData::negotiateAudioFormat(ReceivedMessage& message, const SharedNodePointer& node) {