Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 11 files). Show all
Unified · Split
| @@ -185,12 +185,20 @@ void EntityScriptServer::handleEntityServerScriptLogPacket(QSharedPointer<Receiv · 184 unmodified lines | |||
| 185 | if (senderNode->getCanRez() || senderNode->getCanRezTmp()) { | 185 | if (senderNode->getCanRez() || senderNode->getCanRezTmp()) { |
| 186 | bool enable = false; | 186 | bool enable = false; |
| 187 | message->readPrimitive(&enable); | 187 | message->readPrimitive(&enable); |
| 188 | qInfo() << "======== Got log packet:" << enable; | 188 | |
| 189 | auto senderUUID = senderNode->getUUID(); | ||
| 190 | auto it = _logListeners.find(senderUUID); | ||
| 189 | 191 | ||
| 190 | if (enable) { | 192 | if (enable) { |
| 191 | _logListeners.insert(senderNode->getUUID()); | 193 | if (it == std::end(_logListeners)) { |
| 194 | _logListeners.insert(senderUUID); | ||
| 195 | qInfo() << "Node" << senderUUID << "subscribed to log stream"; | ||
| 196 | } | ||
| 192 | } else { | 197 | } else { |
| 193 | _logListeners.erase(senderNode->getUUID()); | 198 | if (it != std::end(_logListeners)) { |
| 199 | _logListeners.erase(it); | ||
| 200 | qInfo() << "Node" << senderUUID << "unsubscribed from log stream"; | ||
| 201 | } | ||
| 194 | } | 202 | } |
| 195 | } | 203 | } |
| 196 | } | 204 | } |
| @@ -290,9 +298,67 @@ void EntityScriptServer::run() { · 93 unmodified lines | |||
| 290 | connect(tree, &EntityTree::entityServerScriptChanging, this, &EntityScriptServer::entityServerScriptChanging, Qt::QueuedConnection); | 298 | connect(tree, &EntityTree::entityServerScriptChanging, this, &EntityScriptServer::entityServerScriptChanging, Qt::QueuedConnection); |
| 291 | } | 299 | } |
| 292 | 300 | ||
| 301 | void EntityScriptServer::cleanupOldKilledListeners() { | ||
| 302 | auto threshold = usecTimestampNow() - 5 * USECS_PER_SECOND; | ||
| 303 | using ValueType = std::pair<QUuid, quint64>; | ||
| 304 | auto it = std::remove_if(std::begin(_killedListeners), std::end(_killedListeners), [&](ValueType value) { | ||
| 305 | return value.second < threshold; | ||
| 306 | }); | ||
| 307 | _killedListeners.erase(it, std::end(_killedListeners)); | ||
| 308 | } | ||
| 309 | |||
| 293 | void EntityScriptServer::nodeActivated(SharedNodePointer activatedNode) { | 310 | void EntityScriptServer::nodeActivated(SharedNodePointer activatedNode) { |
| 294 | if (activatedNode->getType() == NodeType::AudioMixer) { | 311 | switch (activatedNode->getType()) { |
| 295 | negotiateAudioFormat(); | 312 | case NodeType::AudioMixer: |
| 313 | negotiateAudioFormat(); | ||
| 314 | break; | ||
| 315 | case NodeType::Agent: { | ||
| 316 | auto activatedNodeUUID = activatedNode->getUUID(); | ||
| 317 | using ValueType = std::pair<QUuid, quint64>; | ||
| 318 | auto it = std::find_if(std::begin(_killedListeners), std::end(_killedListeners), [&](ValueType value) { | ||
| 319 | return value.first == activatedNodeUUID; | ||
| 320 | }); | ||
| 321 | if (it != std::end(_killedListeners)) { | ||
| 322 | _killedListeners.erase(it); | ||
| 323 | _logListeners.insert(activatedNodeUUID); | ||
| 324 | } | ||
| 325 | break; | ||
| 326 | } | ||
| 327 | default: | ||
| 328 | // Do nothing | ||
| 329 | break; | ||
| 330 | } | ||
| 331 | } | ||
| 332 | |||
| 333 | void EntityScriptServer::nodeKilled(SharedNodePointer killedNode) { | ||
| 334 | switch (killedNode->getType()) { | ||
| 335 | case NodeType::EntityServer: { | ||
| 336 | if (!_shuttingDown) { | ||
| 337 | if (_entitiesScriptEngine) { | ||
| 338 | _entitiesScriptEngine->unloadAllEntityScripts(); | ||
| 339 | _entitiesScriptEngine->stop(); | ||
| 340 | } | ||
| 341 | |||
| 342 | resetEntitiesScriptEngine(); | ||
| 343 | |||
| 344 | _entityViewer.clear(); | ||
| 345 | } | ||
| 346 | break; | ||
| 347 | } | ||
| 348 | case NodeType::Agent: { | ||
| 349 | cleanupOldKilledListeners(); | ||
| 350 | |||
| 351 | auto killedNodeUUID = killedNode->getUUID(); | ||
| 352 | auto it = _logListeners.find(killedNodeUUID); | ||
| 353 | if (it != std::end(_logListeners)) { | ||
| 354 | _logListeners.erase(killedNodeUUID); | ||
| 355 | _killedListeners.emplace_back(killedNodeUUID, usecTimestampNow()); | ||
| 356 | } | ||
| 357 | break; | ||
| 358 | } | ||
| 359 | default: | ||
| 360 | // Do nothing | ||
| 361 | break; | ||
| 296 | } | 362 | } |
| 297 | } | 363 | } |
| 298 | 364 | ||
| @@ -433,31 +499,6 @@ void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, const · 134 unmodified lines | |||
| 433 | } | 499 | } |
| 434 | } | 500 | } |
| 435 | 501 | ||
| 436 | void EntityScriptServer::nodeKilled(SharedNodePointer killedNode) { | ||
| 437 | switch (killedNode->getType()) { | ||
| 438 | case NodeType::EntityServer: { | ||
| 439 | if (!_shuttingDown) { | ||
| 440 | if (_entitiesScriptEngine) { | ||
| 441 | _entitiesScriptEngine->unloadAllEntityScripts(); | ||
| 442 | _entitiesScriptEngine->stop(); | ||
| 443 | } | ||
| 444 | |||
| 445 | resetEntitiesScriptEngine(); | ||
| 446 | |||
| 447 | _entityViewer.clear(); | ||
| 448 | } | ||
| 449 | break; | ||
| 450 | } | ||
| 451 | case NodeType::Agent: { | ||
| 452 | _logListeners.erase(killedNode->getUUID()); | ||
| 453 | break; | ||
| 454 | } | ||
| 455 | default: | ||
| 456 | // Do nothing | ||
| 457 | break; | ||
| 458 | } | ||
| 459 | } | ||
| 460 | |||
| 461 | void EntityScriptServer::sendStatsPacket() { | 502 | void EntityScriptServer::sendStatsPacket() { |
| 462 | 503 | ||
| 463 | } | 504 | } |