perfom packet verification on same thread as NodeList hash

This commit is contained in:
Stephen Birarda 2014-08-15 09:35:03 -07:00
parent 28abc6ab2a
commit 2e6350832c
2 changed files with 25 additions and 27 deletions

View file

@ -302,29 +302,31 @@ void AudioMixer::prepareMixForListeningNode(Node* node) {
void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) {
NodeList* nodeList = NodeList::getInstance(); NodeList* nodeList = NodeList::getInstance();
// pull any new audio data from nodes off of the network stack if (nodeList->packetVersionAndHashMatch(receivedPacket)) {
PacketType mixerPacketType = packetTypeForPacket(receivedPacket); // pull any new audio data from nodes off of the network stack
if (mixerPacketType == PacketTypeMicrophoneAudioNoEcho PacketType mixerPacketType = packetTypeForPacket(receivedPacket);
|| mixerPacketType == PacketTypeMicrophoneAudioWithEcho if (mixerPacketType == PacketTypeMicrophoneAudioNoEcho
|| mixerPacketType == PacketTypeInjectAudio || mixerPacketType == PacketTypeMicrophoneAudioWithEcho
|| mixerPacketType == PacketTypeSilentAudioFrame || mixerPacketType == PacketTypeInjectAudio
|| mixerPacketType == PacketTypeAudioStreamStats) { || mixerPacketType == PacketTypeSilentAudioFrame
|| mixerPacketType == PacketTypeAudioStreamStats) {
nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket);
} else if (mixerPacketType == PacketTypeMuteEnvironment) { nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket);
QByteArray packet = receivedPacket; } else if (mixerPacketType == PacketTypeMuteEnvironment) {
populatePacketHeader(packet, PacketTypeMuteEnvironment); QByteArray packet = receivedPacket;
populatePacketHeader(packet, PacketTypeMuteEnvironment);
foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != nodeList->sendingNodeForPacket(receivedPacket)) { foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
nodeList->writeDatagram(packet, packet.size(), 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);
} }
}
} else {
// let processNodeData handle it.
nodeList->processNodeData(senderSockAddr, receivedPacket);
}
} }
void AudioMixer::sendStatsPacket() { void AudioMixer::sendStatsPacket() {

View file

@ -33,8 +33,6 @@ void AudioMixerDatagramProcessor::readPendingDatagrams() {
HifiSockAddr senderSockAddr; HifiSockAddr senderSockAddr;
static QByteArray incomingPacket; static QByteArray incomingPacket;
NodeList* nodeList = NodeList::getInstance();
// read everything that is available // read everything that is available
while (_nodeSocket.hasPendingDatagrams()) { while (_nodeSocket.hasPendingDatagrams()) {
incomingPacket.resize(_nodeSocket.pendingDatagramSize()); incomingPacket.resize(_nodeSocket.pendingDatagramSize());
@ -43,9 +41,7 @@ void AudioMixerDatagramProcessor::readPendingDatagrams() {
_nodeSocket.readDatagram(incomingPacket.data(), incomingPacket.size(), _nodeSocket.readDatagram(incomingPacket.data(), incomingPacket.size(),
senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()); senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer());
if (nodeList->packetVersionAndHashMatch(incomingPacket)) { // emit the signal to tell AudioMixer it needs to process a packet
// emit the signal to tell AudioMixer it needs to process a packet emit packetRequiresProcessing(incomingPacket, senderSockAddr);
emit packetRequiresProcessing(incomingPacket, senderSockAddr);
}
} }
} }