mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +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"
|
#include "EntityActionFactoryInterface.h"
|
||||||
|
|
||||||
bool EntityItem::_sendPhysicsUpdates = true;
|
bool EntityItem::_sendPhysicsUpdates = true;
|
||||||
|
int EntityItem::_maxActionDataSize = 800;
|
||||||
|
|
||||||
EntityItem::EntityItem(const EntityItemID& entityItemID) :
|
EntityItem::EntityItem(const EntityItemID& entityItemID) :
|
||||||
_type(EntityTypes::Unknown),
|
_type(EntityTypes::Unknown),
|
||||||
|
@ -1373,8 +1374,11 @@ bool EntityItem::addAction(EntitySimulation* simulation, EntityActionPointer act
|
||||||
assert(action->getOwnerEntity().get() == this);
|
assert(action->getOwnerEntity().get() == this);
|
||||||
|
|
||||||
simulation->addAction(action);
|
simulation->addAction(action);
|
||||||
serializeActionData();
|
bool success = serializeActionData();
|
||||||
return true;
|
if (!success) {
|
||||||
|
removeAction(simulation, actionID);
|
||||||
|
}
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EntityItem::updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments) {
|
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();
|
_objectActionsLock.unlock();
|
||||||
bool success = action->updateArguments(arguments);
|
bool success = action->updateArguments(arguments);
|
||||||
if (success) {
|
if (success) {
|
||||||
serializeActionData();
|
success = serializeActionData();
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -1400,14 +1404,13 @@ bool EntityItem::removeAction(EntitySimulation* simulation, const QUuid& actionI
|
||||||
_objectActionsLock.unlock();
|
_objectActionsLock.unlock();
|
||||||
action->setOwnerEntity(nullptr);
|
action->setOwnerEntity(nullptr);
|
||||||
action->removeFromSimulation(simulation);
|
action->removeFromSimulation(simulation);
|
||||||
serializeActionData();
|
return serializeActionData();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
_objectActionsLock.unlock();
|
_objectActionsLock.unlock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityItem::clearActions(EntitySimulation* simulation) {
|
bool EntityItem::clearActions(EntitySimulation* simulation) {
|
||||||
_objectActionsLock.lockForWrite();
|
_objectActionsLock.lockForWrite();
|
||||||
QHash<QUuid, EntityActionPointer>::iterator i = _objectActions.begin();
|
QHash<QUuid, EntityActionPointer>::iterator i = _objectActions.begin();
|
||||||
while (i != _objectActions.end()) {
|
while (i != _objectActions.end()) {
|
||||||
|
@ -1418,7 +1421,7 @@ void EntityItem::clearActions(EntitySimulation* simulation) {
|
||||||
action->removeFromSimulation(simulation);
|
action->removeFromSimulation(simulation);
|
||||||
}
|
}
|
||||||
_objectActionsLock.unlock();
|
_objectActionsLock.unlock();
|
||||||
serializeActionData();
|
return serializeActionData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityItem::setActionData(QByteArray actionData) {
|
void EntityItem::setActionData(QByteArray actionData) {
|
||||||
|
@ -1457,9 +1460,7 @@ void EntityItem::setActionData(QByteArray actionData) {
|
||||||
|
|
||||||
if (entityTree) {
|
if (entityTree) {
|
||||||
EntityItemPointer entity = entityTree->findEntityByEntityItemID(_id);
|
EntityItemPointer entity = entityTree->findEntityByEntityItemID(_id);
|
||||||
if (actionFactory->factoryBA(simulation, entity, serializedAction)) {
|
actionFactory->factoryBA(simulation, entity, serializedAction);
|
||||||
// XXX something
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1486,7 +1487,7 @@ void EntityItem::setActionData(QByteArray actionData) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EntityItem::serializeActionData() {
|
bool EntityItem::serializeActionData() {
|
||||||
_objectActionsLock.lockForRead();
|
_objectActionsLock.lockForRead();
|
||||||
if (_objectActions.size() == 0) {
|
if (_objectActions.size() == 0) {
|
||||||
_objectActionsLock.unlock();
|
_objectActionsLock.unlock();
|
||||||
|
@ -1508,7 +1509,12 @@ void EntityItem::serializeActionData() {
|
||||||
QDataStream ds(&result, QIODevice::WriteOnly);
|
QDataStream ds(&result, QIODevice::WriteOnly);
|
||||||
ds << serializedActions;
|
ds << serializedActions;
|
||||||
|
|
||||||
|
if (result.size() >= _maxActionDataSize) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
_actionData = result;
|
_actionData = result;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -378,7 +378,7 @@ public:
|
||||||
bool addAction(EntitySimulation* simulation, EntityActionPointer action);
|
bool addAction(EntitySimulation* simulation, EntityActionPointer action);
|
||||||
bool updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments);
|
bool updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments);
|
||||||
bool removeAction(EntitySimulation* simulation, const QUuid& actionID);
|
bool removeAction(EntitySimulation* simulation, const QUuid& actionID);
|
||||||
void clearActions(EntitySimulation* simulation);
|
bool clearActions(EntitySimulation* simulation);
|
||||||
void setActionData(QByteArray actionData);
|
void setActionData(QByteArray actionData);
|
||||||
const QByteArray getActionData() const;
|
const QByteArray getActionData() const;
|
||||||
bool hasActions() { return !_objectActions.empty(); }
|
bool hasActions() { return !_objectActions.empty(); }
|
||||||
|
@ -455,9 +455,10 @@ protected:
|
||||||
void* _physicsInfo = nullptr; // set by EntitySimulation
|
void* _physicsInfo = nullptr; // set by EntitySimulation
|
||||||
bool _simulated; // set by EntitySimulation
|
bool _simulated; // set by EntitySimulation
|
||||||
|
|
||||||
void serializeActionData();
|
bool serializeActionData();
|
||||||
QReadWriteLock _objectActionsLock;
|
QReadWriteLock _objectActionsLock;
|
||||||
QHash<QUuid, EntityActionPointer> _objectActions;
|
QHash<QUuid, EntityActionPointer> _objectActions;
|
||||||
|
static int _maxActionDataSize;
|
||||||
QByteArray _actionData;
|
QByteArray _actionData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue