From 32b232c87a6c005cf227d288f6870b99e776e401 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 9 Jul 2015 09:24:28 -0700 Subject: [PATCH] Update AvatarHashMap to use packet callbacks --- libraries/avatars/src/AvatarHashMap.cpp | 22 +++++++++++++++++++--- libraries/avatars/src/AvatarHashMap.h | 12 ++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 85f85f68e6..fb20f91431 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -19,7 +19,6 @@ AvatarHashMap::AvatarHashMap() { connect(DependencyManager::get().data(), &NodeList::uuidChanged, this, &AvatarHashMap::sessionUUIDChanged); - auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerPacketListener(PacketType::BulkAvatarData, this, "processAvatarDataPacket"); packetReceiver.registerPacketListener(PacketType::KillAvatar, this, "processKillAvatar"); @@ -58,6 +57,10 @@ void AvatarHashMap::processAvatarDataPacket(std::unique_ptr packet, Hi int bytesRead = 0; SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); + if (avatarMixer) { + avatarMixer->setLastHeardMicrostamp(usecTimestampNow()); + } + // enumerate over all of the avatars in this packet // only add them if mixerWeakPointer points to something (meaning that mixer is still around) while (bytesRead < data.size() && avatarMixer.data()) { @@ -86,6 +89,11 @@ void AvatarHashMap::processAvatarIdentityPacket(std::unique_ptr packet QUuid sessionUUID; + SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); + if (avatarMixer) { + avatarMixer->setLastHeardMicrostamp(usecTimestampNow()); + } + while (!identityStream.atEnd()) { QUrl faceMeshURL, skeletonURL; @@ -96,7 +104,6 @@ void AvatarHashMap::processAvatarIdentityPacket(std::unique_ptr packet // mesh URL for a UUID, find avatar in our list AvatarSharedPointer avatar = _avatarHash.value(sessionUUID); if (!avatar) { - SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); avatar = addAvatar(sessionUUID, avatarMixer); } if (avatar->getFaceModelURL() != faceMeshURL) { @@ -121,9 +128,13 @@ void AvatarHashMap::processAvatarBillboardPacket(std::unique_ptr packe const auto data = QByteArray::fromRawData(packet->getPayload(), packet->size); QUuid sessionUUID = QUuid::fromRfc4122(QByteArray::fromRawData(data, NUM_BYTES_RFC4122_UUID)); + SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); + if (avatarMixer) { + avatarMixer->setLastHeardMicrostamp(usecTimestampNow()); + } + AvatarSharedPointer avatar = _avatarHash.value(sessionUUID); if (!avatar) { - SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); avatar = addAvatar(sessionUUID, avatarMixer); } @@ -134,6 +145,11 @@ void AvatarHashMap::processAvatarBillboardPacket(std::unique_ptr packe } void AvatarHashMap::processKillAvatar(std::unique_ptr packet, HifiSockAddr senderSockAddr) { + SharedNodePointer avatarMixer = DependencyManager::get()->nodeWithUUID(packet->getSourceID()); + if (avatarMixer) { + avatarMixer->setLastHeardMicrostamp(usecTimestampNow()); + } + // read the node id QUuid sessionUUID = QUuid::fromRfc4122(QByteArray(packet->getPayload(), NUM_BYTES_RFC4122_UUID)); removeAvatar(sessionUUID); diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 537f0ca685..dbfd2dc88e 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -27,29 +27,29 @@ class AvatarHashMap : public QObject, public Dependency { Q_OBJECT SINGLETON_DEPENDENCY - + public: const AvatarHash& getAvatarHash() { return _avatarHash; } int size() { return _avatarHash.size(); } - + public slots: void processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer& mixerWeakPointer); bool isAvatarInRange(const glm::vec3 & position, const float range); - + private slots: void sessionUUIDChanged(const QUuid& sessionUUID, const QUuid& oldUUID); void processAvatarDataPacket(std::unique_ptr packet, HifiSockAddr senderSockAddr); void processAvatarIdentityPacket(std::unique_ptr packet, HifiSockAddr senderSockAddr); void processAvatarBillboardPacket(std::unique_ptr packet, HifiSockAddr senderSockAddr); void processKillAvatar(std::unique_ptr packet, HifiSockAddr senderSockAddr); - + protected: AvatarHashMap(); - + virtual AvatarSharedPointer newSharedAvatar(); virtual AvatarSharedPointer addAvatar(const QUuid& sessionUUID, const QWeakPointer& mixerWeakPointer); virtual void removeAvatar(const QUuid& sessionUUID); - + AvatarHash _avatarHash; private: