mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 12:04:18 +02:00
put upper bound on size of serilized action parameters so they'll fit in MTU
This commit is contained in:
parent
6a39aecdd4
commit
d09588b7fa
2 changed files with 20 additions and 13 deletions
|
@ -29,6 +29,7 @@
|
|||
#include "EntityActionFactoryInterface.h"
|
||||
|
||||
bool EntityItem::_sendPhysicsUpdates = true;
|
||||
int EntityItem::_maxActionDataSize = 800;
|
||||
|
||||
EntityItem::EntityItem(const EntityItemID& entityItemID) :
|
||||
_type(EntityTypes::Unknown),
|
||||
|
@ -1373,8 +1374,11 @@ bool EntityItem::addAction(EntitySimulation* simulation, EntityActionPointer act
|
|||
assert(action->getOwnerEntity().get() == this);
|
||||
|
||||
simulation->addAction(action);
|
||||
serializeActionData();
|
||||
return true;
|
||||
bool success = serializeActionData();
|
||||
if (!success) {
|
||||
removeAction(simulation, actionID);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
bool EntityItem::updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments) {
|
||||
|
@ -1387,7 +1391,7 @@ bool EntityItem::updateAction(EntitySimulation* simulation, const QUuid& actionI
|
|||
_objectActionsLock.unlock();
|
||||
bool success = action->updateArguments(arguments);
|
||||
if (success) {
|
||||
serializeActionData();
|
||||
success = serializeActionData();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
@ -1400,14 +1404,13 @@ bool EntityItem::removeAction(EntitySimulation* simulation, const QUuid& actionI
|
|||
_objectActionsLock.unlock();
|
||||
action->setOwnerEntity(nullptr);
|
||||
action->removeFromSimulation(simulation);
|
||||
serializeActionData();
|
||||
return true;
|
||||
return serializeActionData();
|
||||
}
|
||||
_objectActionsLock.unlock();
|
||||
return false;
|
||||
}
|
||||
|
||||
void EntityItem::clearActions(EntitySimulation* simulation) {
|
||||
bool EntityItem::clearActions(EntitySimulation* simulation) {
|
||||
_objectActionsLock.lockForWrite();
|
||||
QHash<QUuid, EntityActionPointer>::iterator i = _objectActions.begin();
|
||||
while (i != _objectActions.end()) {
|
||||
|
@ -1418,7 +1421,7 @@ void EntityItem::clearActions(EntitySimulation* simulation) {
|
|||
action->removeFromSimulation(simulation);
|
||||
}
|
||||
_objectActionsLock.unlock();
|
||||
serializeActionData();
|
||||
return serializeActionData();
|
||||
}
|
||||
|
||||
void EntityItem::setActionData(QByteArray actionData) {
|
||||
|
@ -1457,9 +1460,7 @@ void EntityItem::setActionData(QByteArray actionData) {
|
|||
|
||||
if (entityTree) {
|
||||
EntityItemPointer entity = entityTree->findEntityByEntityItemID(_id);
|
||||
if (actionFactory->factoryBA(simulation, entity, serializedAction)) {
|
||||
// XXX something
|
||||
}
|
||||
actionFactory->factoryBA(simulation, entity, serializedAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1486,7 +1487,7 @@ void EntityItem::setActionData(QByteArray actionData) {
|
|||
}
|
||||
|
||||
|
||||
void EntityItem::serializeActionData() {
|
||||
bool EntityItem::serializeActionData() {
|
||||
_objectActionsLock.lockForRead();
|
||||
if (_objectActions.size() == 0) {
|
||||
_objectActionsLock.unlock();
|
||||
|
@ -1508,7 +1509,12 @@ void EntityItem::serializeActionData() {
|
|||
QDataStream ds(&result, QIODevice::WriteOnly);
|
||||
ds << serializedActions;
|
||||
|
||||
if (result.size() >= _maxActionDataSize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
_actionData = result;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -378,7 +378,7 @@ public:
|
|||
bool addAction(EntitySimulation* simulation, EntityActionPointer action);
|
||||
bool updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments);
|
||||
bool removeAction(EntitySimulation* simulation, const QUuid& actionID);
|
||||
void clearActions(EntitySimulation* simulation);
|
||||
bool clearActions(EntitySimulation* simulation);
|
||||
void setActionData(QByteArray actionData);
|
||||
const QByteArray getActionData() const;
|
||||
bool hasActions() { return !_objectActions.empty(); }
|
||||
|
@ -455,9 +455,10 @@ protected:
|
|||
void* _physicsInfo = nullptr; // set by EntitySimulation
|
||||
bool _simulated; // set by EntitySimulation
|
||||
|
||||
void serializeActionData();
|
||||
bool serializeActionData();
|
||||
QReadWriteLock _objectActionsLock;
|
||||
QHash<QUuid, EntityActionPointer> _objectActions;
|
||||
static int _maxActionDataSize;
|
||||
QByteArray _actionData;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue