History

isolate calls to the QtScript libraries to an interface we control

Heather Anderson committed 5 years ago

Commit 1e018db1 parent 713b29e260 files · +6904 −5064Browse files

Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 260 files). Show all

Unified · Split

assignment-client/src/scripts/EntityScriptServer.cpp+38−35
@@ -14,7 +14,9 @@ · 13 unmodified lines
14#include <mutex>14#include <mutex>
15 15
16#include <AudioConstants.h>16#include <AudioConstants.h>
17#include <AudioScriptingInterface.h>
17#include <AudioInjectorManager.h>18#include <AudioInjectorManager.h>
19#include <AvatarHashMap.h>
18#include <ClientServerUtils.h>20#include <ClientServerUtils.h>
19#include <DebugDraw.h>21#include <DebugDraw.h>
20#include <EntityNodeData.h>22#include <EntityNodeData.h>
@@ -130,7 +132,7 @@ void EntityScriptServer::handleEntityScriptGetStatusPacket(QSharedPointer<Receiv · 109 unmodified lines
130 replyPacketList->writePrimitive(messageID);132 replyPacketList->writePrimitive(messageID);
131 133
132 EntityScriptDetails details;134 EntityScriptDetails details;
133 if (_entitiesScriptEngine->getEntityScriptDetails(entityID, details)) {135 if (_entitiesScriptManager->getEntityScriptDetails(entityID, details)) {
134 replyPacketList->writePrimitive(true);136 replyPacketList->writePrimitive(true);
135 replyPacketList->writePrimitive(details.status);137 replyPacketList->writePrimitive(details.status);
136 replyPacketList->writeString(details.errorInfo);138 replyPacketList->writeString(details.errorInfo);
@@ -175,7 +177,7 @@ void EntityScriptServer::handleSettings() { · 38 unmodified lines
175}177}
176 178
177void EntityScriptServer::updateEntityPPS() {179void EntityScriptServer::updateEntityPPS() {
178 int numRunningScripts = _entitiesScriptEngine->getNumRunningEntityScripts();180 int numRunningScripts = _entitiesScriptManager->getNumRunningEntityScripts();
179 int pps;181 int pps;
180 if (std::numeric_limits<int>::max() / _entityPPSPerScript < numRunningScripts) {182 if (std::numeric_limits<int>::max() / _entityPPSPerScript < numRunningScripts) {
181 qWarning() << QString("Integer multiplication would overflow, clamping to maxint: %1 * %2").arg(numRunningScripts).arg(_entityPPSPerScript);183 qWarning() << QString("Integer multiplication would overflow, clamping to maxint: %1 * %2").arg(numRunningScripts).arg(_entityPPSPerScript);
@@ -236,7 +238,7 @@ void EntityScriptServer::pushLogs() { · 54 unmodified lines
236 238
237void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) {239void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) {
238 240
239 if (_entitiesScriptEngine && _entityViewer.getTree() && !_shuttingDown) {241 if (_entitiesScriptManager && _entityViewer.getTree() && !_shuttingDown) {
240 auto entityID = QUuid::fromRfc4122(receivedMessage->read(NUM_BYTES_RFC4122_UUID));242 auto entityID = QUuid::fromRfc4122(receivedMessage->read(NUM_BYTES_RFC4122_UUID));
241 243
242 auto method = receivedMessage->readString();244 auto method = receivedMessage->readString();
@@ -250,13 +252,13 @@ void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<Recei · 7 unmodified lines
250 params << paramString;252 params << paramString;
251 }253 }
252 254
253 _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params, senderNode->getUUID());255 _entitiesScriptManager->callEntityScriptMethod(entityID, method, params, senderNode->getUUID());
254 }256 }
255}257}
256 258
257 259
258void EntityScriptServer::run() {260void EntityScriptServer::run() {
259 DependencyManager::set<ScriptEngines>(ScriptEngine::ENTITY_SERVER_SCRIPT);261 DependencyManager::set<ScriptEngines>(ScriptManager::ENTITY_SERVER_SCRIPT);
260 DependencyManager::set<EntityScriptServerServices>();262 DependencyManager::set<EntityScriptServerServices>();
261 DependencyManager::set<AvatarHashMap>();263 DependencyManager::set<AvatarHashMap>();
262 264
@@ -446,52 +448,53 @@ void EntityScriptServer::selectAudioFormat(const QString& selectedCodecName) { · 183 unmodified lines
446 448
447void EntityScriptServer::resetEntitiesScriptEngine() {449void EntityScriptServer::resetEntitiesScriptEngine() {
448 auto engineName = QString("about:Entities %1").arg(++_entitiesScriptEngineCount);450 auto engineName = QString("about:Entities %1").arg(++_entitiesScriptEngineCount);
449 auto newEngine = scriptEngineFactory(ScriptEngine::ENTITY_SERVER_SCRIPT, NO_SCRIPT, engineName);451 auto newManager = scriptManagerFactory(ScriptManager::ENTITY_SERVER_SCRIPT, NO_SCRIPT, engineName);
452 auto newEngine = newManager->engine();
450 453
451 auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);454 auto webSocketServerConstructorValue = newEngine->newFunction(WebSocketServerClass::constructor);
452 newEngine->globalObject().setProperty("WebSocketServer", webSocketServerConstructorValue);455 newEngine->globalObject()->setProperty("WebSocketServer", webSocketServerConstructorValue);
453 456
454 newEngine->registerGlobalObject("SoundCache", DependencyManager::get<SoundCacheScriptingInterface>().data());457 newEngine->registerGlobalObject("SoundCache", DependencyManager::get<SoundCacheScriptingInterface>().data());
455 newEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarHashMap>().data());458 newEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarHashMap>().data());
456 459
457 // connect this script engines printedMessage signal to the global ScriptEngines these various messages460 // connect this script engines printedMessage signal to the global ScriptEngines these various messages
458 auto scriptEngines = DependencyManager::get<ScriptEngines>().data();461 auto scriptEngines = DependencyManager::get<ScriptEngines>().data();
459 connect(newEngine.data(), &ScriptEngine::printedMessage, scriptEngines, &ScriptEngines::onPrintedMessage);462 connect(newManager.data(), &ScriptManager::printedMessage, scriptEngines, &ScriptEngines::onPrintedMessage);
460 connect(newEngine.data(), &ScriptEngine::errorMessage, scriptEngines, &ScriptEngines::onErrorMessage);463 connect(newManager.data(), &ScriptManager::errorMessage, scriptEngines, &ScriptEngines::onErrorMessage);
461 connect(newEngine.data(), &ScriptEngine::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage);464 connect(newManager.data(), &ScriptManager::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage);
462 connect(newEngine.data(), &ScriptEngine::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage);465 connect(newManager.data(), &ScriptManager::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage);
463 466
464 connect(newEngine.data(), &ScriptEngine::update, this, [this] {467 connect(newManager.data(), &ScriptManager::update, this, [this] {
465 _entityViewer.queryOctree();468 _entityViewer.queryOctree();
466 _entityViewer.getTree()->preUpdate();469 _entityViewer.getTree()->preUpdate();
467 _entityViewer.getTree()->update();470 _entityViewer.getTree()->update();
468 });471 });
469 472
470 scriptEngines->runScriptInitializers(newEngine);473 scriptEngines->runScriptInitializers(newManager);
471 newEngine->runInThread();474 newManager->runInThread();
472 auto newEngineSP = qSharedPointerCast<EntitiesScriptEngineProvider>(newEngine);475 auto newEngineSP = qSharedPointerCast<EntitiesScriptEngineProvider>(newManager);
473 // On the entity script server, these are the same476 // On the entity script server, these are the same
474 DependencyManager::get<EntityScriptingInterface>()->setPersistentEntitiesScriptEngine(newEngineSP);477 DependencyManager::get<EntityScriptingInterface>()->setPersistentEntitiesScriptEngine(newEngineSP);
475 DependencyManager::get<EntityScriptingInterface>()->setNonPersistentEntitiesScriptEngine(newEngineSP);478 DependencyManager::get<EntityScriptingInterface>()->setNonPersistentEntitiesScriptEngine(newEngineSP);
476 479
477 if (_entitiesScriptEngine) {480 if (_entitiesScriptManager) {
478 disconnect(_entitiesScriptEngine.data(), &ScriptEngine::entityScriptDetailsUpdated,481 disconnect(_entitiesScriptManager.data(), &ScriptManager::entityScriptDetailsUpdated,
479 this, &EntityScriptServer::updateEntityPPS);482 this, &EntityScriptServer::updateEntityPPS);
480 }483 }
481 484
482 _entitiesScriptEngine.swap(newEngine);485 _entitiesScriptManager.swap(newManager);
483 connect(_entitiesScriptEngine.data(), &ScriptEngine::entityScriptDetailsUpdated,486 connect(_entitiesScriptManager.data(), &ScriptManager::entityScriptDetailsUpdated,
484 this, &EntityScriptServer::updateEntityPPS);487 this, &EntityScriptServer::updateEntityPPS);
485}488}
486 489
487 490
488void EntityScriptServer::clear() {491void EntityScriptServer::clear() {
489 // unload and stop the engine492 // unload and stop the engine
490 if (_entitiesScriptEngine) {493 if (_entitiesScriptManager) {
491 // do this here (instead of in deleter) to avoid marshalling unload signals back to this thread494 // do this here (instead of in deleter) to avoid marshalling unload signals back to this thread
492 _entitiesScriptEngine->unloadAllEntityScripts();495 _entitiesScriptManager->unloadAllEntityScripts();
493 _entitiesScriptEngine->stop();496 _entitiesScriptManager->stop();
494 _entitiesScriptEngine->waitTillDoneRunning();497 _entitiesScriptManager->waitTillDoneRunning();
495 }498 }
496 499
497 _entityViewer.clear();500 _entityViewer.clear();
@@ -503,8 +506,8 @@ void EntityScriptServer::clear() { · 5 unmodified lines
503}506}
504 507
505void EntityScriptServer::shutdownScriptEngine() {508void EntityScriptServer::shutdownScriptEngine() {
506 if (_entitiesScriptEngine) {509 if (_entitiesScriptManager) {
507 _entitiesScriptEngine->disconnectNonEssentialSignals(); // disconnect all slots/signals from the script engine, except essential510 _entitiesScriptManager->disconnectNonEssentialSignals(); // disconnect all slots/signals from the script engine, except essential
508 }511 }
509 _shuttingDown = true;512 _shuttingDown = true;
510 513
@@ -513,7 +516,7 @@ void EntityScriptServer::shutdownScriptEngine() { · 2 unmodified lines
513 auto scriptEngines = DependencyManager::get<ScriptEngines>();516 auto scriptEngines = DependencyManager::get<ScriptEngines>();
514 scriptEngines->shutdownScripting();517 scriptEngines->shutdownScripting();
515 518
516 _entitiesScriptEngine.clear();519 _entitiesScriptManager.clear();
517 520
518 auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();521 auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
519 // our entity tree is going to go away so tell that to the EntityScriptingInterface522 // our entity tree is going to go away so tell that to the EntityScriptingInterface
@@ -531,8 +534,8 @@ void EntityScriptServer::addingEntity(const EntityItemID& entityID) { · 11 unmodified lines
531}534}
532 535
533void EntityScriptServer::deletingEntity(const EntityItemID& entityID) {536void EntityScriptServer::deletingEntity(const EntityItemID& entityID) {
534 if (_entityViewer.getTree() && !_shuttingDown && _entitiesScriptEngine) {537 if (_entityViewer.getTree() && !_shuttingDown && _entitiesScriptManager) {
535 _entitiesScriptEngine->unloadEntityScript(entityID, true);538 _entitiesScriptManager->unloadEntityScript(entityID, true);
536 }539 }
537}540}
538 541
@@ -543,20 +546,20 @@ void EntityScriptServer::entityServerScriptChanging(const EntityItemID& entityID · 4 unmodified lines
543}546}
544 547
545void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, bool forceRedownload) {548void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, bool forceRedownload) {
546 if (_entityViewer.getTree() && !_shuttingDown && _entitiesScriptEngine) {549 if (_entityViewer.getTree() && !_shuttingDown && _entitiesScriptManager) {
547 550
548 EntityItemPointer entity = _entityViewer.getTree()->findEntityByEntityItemID(entityID);551 EntityItemPointer entity = _entityViewer.getTree()->findEntityByEntityItemID(entityID);
549 EntityScriptDetails details;552 EntityScriptDetails details;
550 bool isRunning = _entitiesScriptEngine->getEntityScriptDetails(entityID, details);553 bool isRunning = _entitiesScriptManager->getEntityScriptDetails(entityID, details);
551 if (entity && (forceRedownload || !isRunning || details.scriptText != entity->getServerScripts())) {554 if (entity && (forceRedownload || !isRunning || details.scriptText != entity->getServerScripts())) {
552 if (isRunning) {555 if (isRunning) {
553 _entitiesScriptEngine->unloadEntityScript(entityID, true);556 _entitiesScriptManager->unloadEntityScript(entityID, true);
554 }557 }
555 558
556 QString scriptUrl = entity->getServerScripts();559 QString scriptUrl = entity->getServerScripts();
557 if (!scriptUrl.isEmpty()) {560 if (!scriptUrl.isEmpty()) {
558 scriptUrl = DependencyManager::get<ResourceManager>()->normalizeURL(scriptUrl);561 scriptUrl = DependencyManager::get<ResourceManager>()->normalizeURL(scriptUrl);
559 _entitiesScriptEngine->loadEntityScript(entityID, scriptUrl, forceRedownload);562 _entitiesScriptManager->loadEntityScript(entityID, scriptUrl, forceRedownload);
560 }563 }
561 }564 }
562 }565 }
@@ -573,9 +576,9 @@ void EntityScriptServer::sendStatsPacket() { · 10 unmodified lines
573 576
574 QJsonObject scriptEngineStats;577 QJsonObject scriptEngineStats;
575 int numberRunningScripts = 0;578 int numberRunningScripts = 0;
576 const auto scriptEngine = _entitiesScriptEngine;579 const auto scriptManager = _entitiesScriptManager;
577 if (scriptEngine) {580 if (scriptManager) {
578 numberRunningScripts = scriptEngine->getNumRunningEntityScripts();581 numberRunningScripts = scriptManager->getNumRunningEntityScripts();
579 }582 }
580 scriptEngineStats["number_running_scripts"] = numberRunningScripts;583 scriptEngineStats["number_running_scripts"] = numberRunningScripts;
581 statsObject["script_engine_stats"] = scriptEngineStats;584 statsObject["script_engine_stats"] = scriptEngineStats;