use replicant nodes for audio packet replication

This commit is contained in:
Stephen Birarda 2017-06-12 11:13:43 -07:00
parent 7bfce55559
commit c7b3b79a23

View file

@ -108,30 +108,34 @@ void AudioMixerClientData::processPackets() {
void AudioMixerClientData::replicatePacket(ReceivedMessage& message) { void AudioMixerClientData::replicatePacket(ReceivedMessage& message) {
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
if (!nodeList->getMirrorSocket().isNull()) {
PacketType mirroredType;
if (message.getType() == PacketType::MicrophoneAudioNoEcho) { PacketType mirroredType;
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 if (message.getType() == PacketType::MicrophoneAudioNoEcho) {
auto packet = NLPacket::create(mirroredType, message.getSize() + NUM_BYTES_RFC4122_UUID); mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho;
packet->write(message.getSourceID().toRfc4122()); } else if (message.getType() == PacketType::MicrophoneAudioWithEcho) {
packet->write(message.getMessage()); mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho;
} else if (message.getType() == PacketType::InjectAudio) {
nodeList->sendPacket(std::move(packet), nodeList->getMirrorSocket()); 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) { void AudioMixerClientData::negotiateAudioFormat(ReceivedMessage& message, const SharedNodePointer& node) {