Entity script status + reload
Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 15 files). Show all
Unified · Split
| @@ -25,6 +25,8 @@ · 24 unmodified lines | ||
| 25 | 25 | |
| 26 | 26 | #include "../entities/AssignmentParentFinder.h" |
| 27 | 27 | |
| 28 | +const size_t UUID_LENGTH_BYTES = 16; | |
| 29 | + | |
| 28 | 30 | int EntityScriptServer::_entitiesScriptEngineCount = 0; |
| 29 | 31 | |
| 30 | 32 | EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssignment(message) { |
| @@ -52,10 +54,39 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig · 21 unmodified lines | ||
| 52 | 54 | packetReceiver.registerListener(PacketType::BulkAvatarData, avatarHashMap.data(), "processAvatarDataPacket"); |
| 53 | 55 | packetReceiver.registerListener(PacketType::KillAvatar, avatarHashMap.data(), "processKillAvatar"); |
| 54 | 56 | packetReceiver.registerListener(PacketType::AvatarIdentity, avatarHashMap.data(), "processAvatarIdentityPacket"); |
| 57 | + | |
| 58 | + packetReceiver.registerListener(PacketType::ReloadEntityServerScript, this, "handleReloadEntityServerScriptPacket"); | |
| 59 | + packetReceiver.registerListener(PacketType::EntityScriptGetStatus, this, "handleEntityScriptGetStatusPacket"); | |
| 55 | 60 | } |
| 56 | 61 | |
| 57 | 62 | static const QString ENTITY_SCRIPT_SERVER_LOGGING_NAME = "entity-script-server"; |
| 58 | 63 | |
| 64 | +void EntityScriptServer::handleReloadEntityServerScriptPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) { | |
| 65 | + auto entityID = QUuid::fromRfc4122(message->read(UUID_LENGTH_BYTES)); | |
| 66 | + | |
| 67 | + if (_entityViewer.getTree() && !_shuttingDown) { | |
| 68 | + qDebug() << "Reloading: " << entityID; | |
| 69 | + _entitiesScriptEngine->unloadEntityScript(entityID); | |
| 70 | + checkAndCallPreload(entityID, true); | |
| 71 | + } | |
| 72 | +} | |
| 73 | + | |
| 74 | +void EntityScriptServer::handleEntityScriptGetStatusPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) { | |
| 75 | + MessageID messageID; | |
| 76 | + message->readPrimitive(&messageID); | |
| 77 | + auto entityID = QUuid::fromRfc4122(message->read(UUID_LENGTH_BYTES)); | |
| 78 | + | |
| 79 | + // TODO(Huffman) Get Status | |
| 80 | + | |
| 81 | + qDebug() << "Getting script status of: " << entityID; | |
| 82 | + auto replyPacket = NLPacket::create(PacketType::EntityScriptGetStatusReply, -1, true); | |
| 83 | + replyPacket->writePrimitive(messageID); | |
| 84 | + replyPacket->writeString("running"); | |
| 85 | + | |
| 86 | + auto nodeList = DependencyManager::get<NodeList>(); | |
| 87 | + nodeList->sendPacket(std::move(replyPacket), *senderNode); | |
| 88 | +} | |
| 89 | + | |
| 59 | 90 | void EntityScriptServer::run() { |
| 60 | 91 | // make sure we request our script once the agent connects to the domain |
| 61 | 92 | auto nodeList = DependencyManager::get<NodeList>(); |
| @@ -75,7 +106,8 @@ void EntityScriptServer::run() { · 13 unmodified lines | ||
| 75 | 106 | connect(nodeList.data(), &LimitedNodeList::nodeKilled, this, &EntityScriptServer::nodeKilled); |
| 76 | 107 | |
| 77 | 108 | nodeList->addSetOfNodeTypesToNodeInterestSet({ |
| 78 | − NodeType::AudioMixer, NodeType::AvatarMixer, NodeType::EntityServer, NodeType::MessagesMixer, NodeType::AssetServer | |
| 109 | + NodeType::Agent, NodeType::AudioMixer, NodeType::AvatarMixer, | |
| 110 | + NodeType::EntityServer, NodeType::MessagesMixer, NodeType::AssetServer | |
| 79 | 111 | }); |
| 80 | 112 | |
| 81 | 113 | // Setup Script Engine |