From 2933a20a0c52231a1012c3449064c2827fec4aa9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 19 Jun 2017 10:43:45 -0700 Subject: [PATCH] some cleanup for audio/avatar replicated packet checking --- assignment-client/src/audio/AudioMixer.cpp | 14 ++------- .../src/audio/AudioMixerClientData.cpp | 29 +++++++------------ .../src/audio/AudioMixerClientData.h | 1 - assignment-client/src/avatars/AvatarMixer.cpp | 18 ++++++++++-- .../networking/src/udt/PacketHeaders.cpp | 9 ++++++ libraries/networking/src/udt/PacketHeaders.h | 2 ++ 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index d0afc7b0d4..ab4b20b9cc 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -132,18 +132,10 @@ void AudioMixer::queueReplicatedAudioPacket(QSharedPointer mess // construct a "fake" audio received message from the byte array and packet list information auto audioData = message->getMessage().mid(NUM_BYTES_RFC4122_UUID); - PacketType rewrittenType; + PacketType rewrittenType = REPLICATED_PACKET_MAPPING.key(message->getType()); - if (message->getType() == PacketType::ReplicatedMicrophoneAudioNoEcho) { - rewrittenType = PacketType::MicrophoneAudioNoEcho; - } else if (message->getType() == PacketType::ReplicatedMicrophoneAudioWithEcho) { - rewrittenType = PacketType::MicrophoneAudioWithEcho; - } else if (message->getType() == PacketType::ReplicatedInjectAudio) { - rewrittenType = PacketType::InjectAudio; - } else if (message->getType() == PacketType::ReplicatedSilentAudioFrame) { - rewrittenType = PacketType::SilentAudioFrame; - } else { - return; + if (rewrittenType == PacketType::Unknown) { + qDebug() << "Cannot unwrap replicated packet type not present in REPLICATED_PACKET_WRAPPING"; } auto replicatedMessage = QSharedPointer::create(audioData, rewrittenType, diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 7641000a7a..6e11257c7f 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -124,27 +124,18 @@ void AudioMixerClientData::optionallyReplicatePacket(ReceivedMessage& message, c auto nodeList = DependencyManager::get(); // now make sure it's a packet type that we want to replicate - PacketType mirroredType; - switch (message.getType()) { - case PacketType::MicrophoneAudioNoEcho: - case PacketType::ReplicatedMicrophoneAudioNoEcho: - mirroredType = PacketType::ReplicatedMicrophoneAudioNoEcho; - break; - case PacketType::MicrophoneAudioWithEcho: - case PacketType::ReplicatedMicrophoneAudioWithEcho: - mirroredType = PacketType::ReplicatedMicrophoneAudioWithEcho; - break; - case PacketType::InjectAudio: - case PacketType::ReplicatedInjectAudio: - mirroredType = PacketType::ReplicatedInjectAudio; - break; - case PacketType::SilentAudioFrame: - case PacketType::ReplicatedSilentAudioFrame: - mirroredType = PacketType::ReplicatedSilentAudioFrame; - break; - default: + // first check if it is an original type that we should replicate + PacketType mirroredType = REPLICATED_PACKET_MAPPING.value(message.getType()); + + if (mirroredType == PacketType::Unknown) { + // if it wasn't check if it is a replicated type that we should re-replicate + if (REPLICATED_PACKET_MAPPING.key(message.getType()) != PacketType::Unknown) { + mirroredType = message.getType(); + } else { + qDebug() << "Packet passed to optionallyReplicatePacket was not a replicatable type - returning"; return; + } } std::unique_ptr packet; diff --git a/assignment-client/src/audio/AudioMixerClientData.h b/assignment-client/src/audio/AudioMixerClientData.h index b397ab0b8e..76a9cd6aa7 100644 --- a/assignment-client/src/audio/AudioMixerClientData.h +++ b/assignment-client/src/audio/AudioMixerClientData.h @@ -26,7 +26,6 @@ #include "PositionalAudioStream.h" #include "AvatarAudioStream.h" - class AudioMixerClientData : public NodeData { Q_OBJECT public: diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index c4e59b6324..136d5f2e8e 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -127,9 +127,21 @@ void AvatarMixer::handleReplicatedBulkAvatarPacket(QSharedPointer packet; diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 7985df58bf..fb416cac4d 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -44,6 +44,15 @@ const QSet NON_SOURCED_PACKETS = QSet() << PacketType::ReplicatedInjectAudio << PacketType::ReplicatedSilentAudioFrame << PacketType::ReplicatedAvatarIdentity << PacketType::ReplicatedKillAvatar << PacketType::ReplicatedBulkAvatarData; +const QHash REPLICATED_PACKET_MAPPING { + { PacketType::MicrophoneAudioNoEcho, PacketType::ReplicatedMicrophoneAudioNoEcho }, + { PacketType::MicrophoneAudioWithEcho, PacketType::ReplicatedMicrophoneAudioWithEcho }, + { PacketType::InjectAudio, PacketType::ReplicatedInjectAudio }, + { PacketType::SilentAudioFrame, PacketType::ReplicatedSilentAudioFrame }, + { PacketType::AvatarIdentity, PacketType::ReplicatedAvatarIdentity }, + { PacketType::KillAvatar, PacketType::ReplicatedKillAvatar }, +}; + PacketVersion versionForPacketType(PacketType packetType) { switch (packetType) { case PacketType::DomainList: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index c080ab8e19..2944c1ce93 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -128,6 +128,8 @@ public: using PacketType = PacketTypeEnum::Value; +extern const QHash REPLICATED_PACKET_MAPPING; + const int NUM_BYTES_MD5_HASH = 16; typedef char PacketVersion;