cap number of avatar entities

This commit is contained in:
Andrew Meadows 2017-02-10 13:13:46 -08:00
parent d2315c15a1
commit 66a315cb9c

View file

@ -2200,14 +2200,24 @@ void AvatarData::setAttachmentsVariant(const QVariantList& variant) {
setAttachmentData(newAttachments); setAttachmentData(newAttachments);
} }
const int MAX_NUM_AVATAR_ENTITIES = 42;
void AvatarData::updateAvatarEntity(const QUuid& entityID, const QByteArray& entityData) { void AvatarData::updateAvatarEntity(const QUuid& entityID, const QByteArray& entityData) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "updateAvatarEntity", Q_ARG(const QUuid&, entityID), Q_ARG(QByteArray, entityData)); QMetaObject::invokeMethod(this, "updateAvatarEntity", Q_ARG(const QUuid&, entityID), Q_ARG(QByteArray, entityData));
return; return;
} }
_avatarEntitiesLock.withWriteLock([&] { _avatarEntitiesLock.withWriteLock([&] {
_avatarEntityData.insert(entityID, entityData); AvatarEntityMap::iterator itr = _avatarEntityData.find(entityID);
_avatarEntityDataLocallyEdited = true; if (itr == _avatarEntityData.end()) {
if (_avatarEntityData.size() < MAX_NUM_AVATAR_ENTITIES) {
_avatarEntityData.insert(entityID, entityData);
_avatarEntityDataLocallyEdited = true;
}
} else {
itr.value() = entityData;
_avatarEntityDataLocallyEdited = true;
}
}); });
} }
@ -2238,6 +2248,11 @@ AvatarEntityMap AvatarData::getAvatarEntityData() const {
} }
void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) { void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) {
if (avatarEntityData.size() > MAX_NUM_AVATAR_ENTITIES) {
// the data is suspect
qCDebug(avatars) << "discard suspect AvatarEntityData with size =" << avatarEntityData.size();
return;
}
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setAvatarEntityData", Q_ARG(const AvatarEntityMap&, avatarEntityData)); QMetaObject::invokeMethod(this, "setAvatarEntityData", Q_ARG(const AvatarEntityMap&, avatarEntityData));
return; return;