mirror of
https://github.com/overte-org/overte.git
synced 2025-04-22 05:04:14 +02:00
restructure initialization so that server can do server-like things to get
the filter program from file
This commit is contained in:
parent
c25072c1db
commit
8eff3b1e83
4 changed files with 16 additions and 15 deletions
assignment-client/src/entities
libraries/entities/src
|
@ -286,11 +286,11 @@ void EntityServer::readAdditionalConfiguration(const QJsonObject& settingsSectio
|
|||
tree->setEntityScriptSourceWhitelist("");
|
||||
}
|
||||
|
||||
QString entityEditFilter;
|
||||
if (readOptionString("entityEditFilter", settingsSectionObject, entityEditFilter)) {
|
||||
tree->setEntityEditFilter(entityEditFilter);
|
||||
if (readOptionString("entityEditFilter", settingsSectionObject, _entityEditFilter)) {
|
||||
// FIXME: Fetch script from file synchronously. We don't want the server processing edits while a restarting entity server is fetching from a DOS'd source.
|
||||
_entityEditFilterEngine.evaluate(_entityEditFilter);
|
||||
tree->initEntityEditFilterEngine(&_entityEditFilterEngine);
|
||||
}
|
||||
tree->initEntityEditFilterEngine(); // whether supplied or not.
|
||||
}
|
||||
|
||||
void EntityServer::nodeAdded(SharedNodePointer node) {
|
||||
|
|
|
@ -76,6 +76,9 @@ private:
|
|||
|
||||
QReadWriteLock _viewerSendingStatsLock;
|
||||
QMap<QUuid, QMap<QUuid, ViewerSendingStats>> _viewerSendingStats;
|
||||
|
||||
QString _entityEditFilter;
|
||||
QScriptEngine _entityEditFilterEngine;
|
||||
};
|
||||
|
||||
#endif // hifi_EntityServer_h
|
||||
|
|
|
@ -918,15 +918,15 @@ void EntityTree::fixupTerseEditLogging(EntityItemProperties& properties, QList<Q
|
|||
}
|
||||
}
|
||||
|
||||
void EntityTree::initEntityEditFilterEngine() {
|
||||
_entityEditFilterEngine.evaluate(_entityEditFilter);
|
||||
auto global = _entityEditFilterEngine.globalObject();
|
||||
void EntityTree::initEntityEditFilterEngine(QScriptEngine* engine) {
|
||||
_entityEditFilterEngine = engine;
|
||||
auto global = _entityEditFilterEngine->globalObject();
|
||||
_entityEditFilterFunction = global.property("filter");
|
||||
_hasEntityEditFilter = _entityEditFilterFunction.isFunction();
|
||||
}
|
||||
|
||||
bool EntityTree::filterProperties(EntityItemProperties& propertiesIn, EntityItemProperties& propertiesOut, bool& wasChanged) {
|
||||
if (!_hasEntityEditFilter) {
|
||||
if (!_hasEntityEditFilter || !_entityEditFilterEngine) {
|
||||
propertiesOut = propertiesIn;
|
||||
wasChanged = false; // not changed
|
||||
return true; // allowed
|
||||
|
@ -934,7 +934,7 @@ bool EntityTree::filterProperties(EntityItemProperties& propertiesIn, EntityItem
|
|||
auto oldProperties = propertiesIn.getDesiredProperties();
|
||||
auto specifiedProperties = propertiesIn.getChangedProperties();
|
||||
propertiesIn.setDesiredProperties(specifiedProperties);
|
||||
QScriptValue inputValues = propertiesIn.copyToScriptValue(&_entityEditFilterEngine, false, true, true);
|
||||
QScriptValue inputValues = propertiesIn.copyToScriptValue(_entityEditFilterEngine, false, true, true);
|
||||
propertiesIn.setDesiredProperties(oldProperties);
|
||||
|
||||
auto in = QJsonValue::fromVariant(inputValues.toVariant()); // grab json copy now, because the inputValues might be side effected by the filter.
|
||||
|
|
|
@ -65,7 +65,6 @@ public:
|
|||
|
||||
void setEntityMaxTmpLifetime(float maxTmpEntityLifetime) { _maxTmpEntityLifetime = maxTmpEntityLifetime; }
|
||||
void setEntityScriptSourceWhitelist(const QString& entityScriptSourceWhitelist);
|
||||
void setEntityEditFilter(const QString& entityEditFilter) { _entityEditFilter = entityEditFilter; }
|
||||
|
||||
/// Implements our type specific root element factory
|
||||
virtual OctreeElementPointer createNewElement(unsigned char* octalCode = NULL) override;
|
||||
|
@ -263,7 +262,7 @@ public:
|
|||
|
||||
void notifyNewCollisionSoundURL(const QString& newCollisionSoundURL, const EntityItemID& entityID);
|
||||
|
||||
void initEntityEditFilterEngine();
|
||||
void initEntityEditFilterEngine(QScriptEngine* engine);
|
||||
|
||||
static const float DEFAULT_MAX_TMP_ENTITY_LIFETIME;
|
||||
|
||||
|
@ -353,11 +352,10 @@ protected:
|
|||
float _maxTmpEntityLifetime { DEFAULT_MAX_TMP_ENTITY_LIFETIME };
|
||||
|
||||
bool filterProperties(EntityItemProperties& propertiesIn, EntityItemProperties& propertiesOut, bool& wasChanged);
|
||||
QString _entityEditFilter;
|
||||
bool _hasEntityEditFilter{ false };
|
||||
QScriptEngine _entityEditFilterEngine;
|
||||
QScriptValue _entityEditFilterFunction;
|
||||
QScriptValue _nullObjectForFilter;
|
||||
QScriptEngine* _entityEditFilterEngine{};
|
||||
QScriptValue _entityEditFilterFunction{};
|
||||
QScriptValue _nullObjectForFilter{};
|
||||
|
||||
QStringList _entityScriptSourceWhitelist;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue