History

implement support for Entities.callEntityServerMethod()

ZappoMan committed 9 years ago

Commit 934c9471 parent e85494b7 files · +95 −7Browse files

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

Unified · Split

assignment-client/src/scripts/EntityScriptServer.cpp+28−0
@@ -85,6 +85,7 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig · 84 unmodified lines
8585 packetReceiver.registerListener(PacketType::ReloadEntityServerScript, this, "handleReloadEntityServerScriptPacket");
8686 packetReceiver.registerListener(PacketType::EntityScriptGetStatus, this, "handleEntityScriptGetStatusPacket");
8787 packetReceiver.registerListener(PacketType::EntityServerScriptLog, this, "handleEntityServerScriptLogPacket");
88+ packetReceiver.registerListener(PacketType::EntityScriptCallMethod, this, "handleEntityScriptCallMethodPacket");
8889
8990 static const int LOG_INTERVAL = MSECS_PER_SECOND / 10;
9091 auto timer = new QTimer(this);
@@ -231,6 +232,33 @@ void EntityScriptServer::pushLogs() { · 140 unmodified lines
231232 }
232233 }
233234
235+void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) {
236+
237+ if (_entitiesScriptEngine && _entityViewer.getTree() && !_shuttingDown) {
238+ auto entityID = QUuid::fromRfc4122(receivedMessage->read(NUM_BYTES_RFC4122_UUID));
239+
240+ quint16 methodLength;
241+ receivedMessage->readPrimitive(&methodLength);
242+ auto methodData = receivedMessage->read(methodLength);
243+ auto method = QString::fromUtf8(methodData);
244+
245+ quint16 paramCount;
246+ receivedMessage->readPrimitive(&paramCount);
247+
248+ QStringList params;
249+ for (int param = 0; param < paramCount; param++) {
250+ quint16 paramLength;
251+ receivedMessage->readPrimitive(&paramLength);
252+ auto paramData = receivedMessage->read(paramLength);
253+ auto paramString = QString::fromUtf8(paramData);
254+ params << paramString;
255+ }
256+
257+ _entitiesScriptEngine->callEntityScriptMethod(entityID, method, params);
258+ }
259+}
260+
261+
234262 void EntityScriptServer::run() {
235263 // make sure we request our script once the agent connects to the domain
236264 auto nodeList = DependencyManager::get<NodeList>();