Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 260 files). Show all
Unified · Split
| @@ -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 | ||
| 177 | void EntityScriptServer::updateEntityPPS() { | 179 | void 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 | ||
| 237 | void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) { | 239 | void 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 | ||
| 258 | void EntityScriptServer::run() { | 260 | void 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 | ||
| 447 | void EntityScriptServer::resetEntitiesScriptEngine() { | 449 | void 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 messages | 460 | // 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 same | 476 | // 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 | ||
| 488 | void EntityScriptServer::clear() { | 491 | void EntityScriptServer::clear() { |
| 489 | // unload and stop the engine | 492 | // 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 thread | 494 | // 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 | ||
| 505 | void EntityScriptServer::shutdownScriptEngine() { | 508 | void EntityScriptServer::shutdownScriptEngine() { |
| 506 | if (_entitiesScriptEngine) { | 509 | if (_entitiesScriptManager) { |
| 507 | _entitiesScriptEngine->disconnectNonEssentialSignals(); // disconnect all slots/signals from the script engine, except essential | 510 | _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 EntityScriptingInterface | 522 | // 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 | ||
| 533 | void EntityScriptServer::deletingEntity(const EntityItemID& entityID) { | 536 | void 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 | ||
| 545 | void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, bool forceRedownload) { | 548 | void 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; |