Showing the changes to assignment-client/src/scripts/EntityScriptServer.cpp (1 of 381 files). Show all
Unified · Split
| @@ -44,16 +44,8 @@ · 43 unmodified lines | |||
| 44 | using Mutex = std::mutex; | 44 | using Mutex = std::mutex; |
| 45 | using Lock = std::lock_guard<Mutex>; | 45 | using Lock = std::lock_guard<Mutex>; |
| 46 | 46 | ||
| 47 | static std::mutex logBufferMutex; | ||
| 48 | static std::string logBuffer; | ||
| 49 | |||
| 50 | void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { | 47 | void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { |
| 51 | auto logMessage = LogHandler::getInstance().printMessage((LogMsgType) type, context, message); | 48 | auto logMessage = LogHandler::getInstance().printMessage((LogMsgType) type, context, message); |
| 52 | |||
| 53 | if (!logMessage.isEmpty()) { | ||
| 54 | Lock lock(logBufferMutex); | ||
| 55 | logBuffer.append(logMessage.toStdString() + '\n'); | ||
| 56 | } | ||
| 57 | } | 49 | } |
| 58 | 50 | ||
| 59 | int EntityScriptServer::_entitiesScriptEngineCount = 0; | 51 | int EntityScriptServer::_entitiesScriptEngineCount = 0; |
| @@ -217,10 +209,10 @@ void EntityScriptServer::handleEntityServerScriptLogPacket(QSharedPointer<Receiv · 157 unmodified lines | |||
| 217 | } | 209 | } |
| 218 | 210 | ||
| 219 | void EntityScriptServer::pushLogs() { | 211 | void EntityScriptServer::pushLogs() { |
| 220 | std::string buffer; | 212 | QJsonArray buffer; |
| 221 | { | 213 | { |
| 222 | Lock lock(logBufferMutex); | 214 | Lock lock(_logBufferMutex); |
| 223 | std::swap(logBuffer, buffer); | 215 | std::swap(_logBuffer, buffer); |
| 224 | } | 216 | } |
| 225 | 217 | ||
| 226 | if (buffer.empty()) { | 218 | if (buffer.empty()) { |
| @@ -231,16 +223,27 @@ void EntityScriptServer::pushLogs() { · 4 unmodified lines | |||
| 231 | } | 223 | } |
| 232 | 224 | ||
| 233 | auto nodeList = DependencyManager::get<NodeList>(); | 225 | auto nodeList = DependencyManager::get<NodeList>(); |
| 226 | QJsonDocument document; | ||
| 227 | document.setArray(buffer); | ||
| 228 | QString data(document.toJson()); | ||
| 229 | std::string string = data.toStdString(); | ||
| 230 | auto cstring = string.c_str(); | ||
| 234 | for (auto uuid : _logListeners) { | 231 | for (auto uuid : _logListeners) { |
| 235 | auto node = nodeList->nodeWithUUID(uuid); | 232 | auto node = nodeList->nodeWithUUID(uuid); |
| 236 | if (node && node->getActiveSocket()) { | 233 | if (node && node->getActiveSocket()) { |
| 237 | auto packet = NLPacketList::create(PacketType::EntityServerScriptLog, QByteArray(), true, true); | 234 | auto packet = NLPacketList::create(PacketType::EntityServerScriptLog, QByteArray(), true, true); |
| 238 | packet->write(buffer.data(), buffer.size()); | 235 | packet->write(cstring, strlen(cstring)); |
| 239 | nodeList->sendPacketList(std::move(packet), *node); | 236 | nodeList->sendPacketList(std::move(packet), *node); |
| 240 | } | 237 | } |
| 241 | } | 238 | } |
| 242 | } | 239 | } |
| 243 | 240 | ||
| 241 | void EntityScriptServer::addLogEntry(const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID, ScriptMessage::Severity severity) { | ||
| 242 | ScriptMessage entry(message, fileName, lineNumber, entityID, ScriptMessage::ScriptType::TYPE_ENTITY_SCRIPT, severity); | ||
| 243 | Lock lock(_logBufferMutex); | ||
| 244 | _logBuffer.append(entry.toJson()); | ||
| 245 | } | ||
| 246 | |||
| 244 | void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) { | 247 | void EntityScriptServer::handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> receivedMessage, SharedNodePointer senderNode) { |
| 245 | 248 | ||
| 246 | if (_entitiesScriptManager && _entityViewer.getTree() && !_shuttingDown) { | 249 | if (_entitiesScriptManager && _entityViewer.getTree() && !_shuttingDown) { |
| @@ -470,6 +473,29 @@ void EntityScriptServer::resetEntitiesScriptEngine() { · 223 unmodified lines | |||
| 470 | connect(newManager.get(), &ScriptManager::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage); | 473 | connect(newManager.get(), &ScriptManager::warningMessage, scriptEngines, &ScriptEngines::onWarningMessage); |
| 471 | connect(newManager.get(), &ScriptManager::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage); | 474 | connect(newManager.get(), &ScriptManager::infoMessage, scriptEngines, &ScriptEngines::onInfoMessage); |
| 472 | 475 | ||
| 476 | // Make script engine messages available through ScriptDiscoveryService | ||
| 477 | connect(newManager.get(), &ScriptManager::infoEntityMessage, scriptEngines, &ScriptEngines::infoEntityMessage); | ||
| 478 | connect(newManager.get(), &ScriptManager::printedEntityMessage, scriptEngines, &ScriptEngines::printedEntityMessage); | ||
| 479 | connect(newManager.get(), &ScriptManager::errorEntityMessage, scriptEngines, &ScriptEngines::errorEntityMessage); | ||
| 480 | connect(newManager.get(), &ScriptManager::warningEntityMessage, scriptEngines, &ScriptEngines::warningEntityMessage); | ||
| 481 | |||
| 482 | connect(newManager.get(), &ScriptManager::infoEntityMessage, | ||
| 483 | [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) { | ||
| 484 | addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_INFO); | ||
| 485 | }); | ||
| 486 | connect(newManager.get(), &ScriptManager::printedEntityMessage, | ||
| 487 | [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) { | ||
| 488 | addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_PRINT); | ||
| 489 | }); | ||
| 490 | connect(newManager.get(), &ScriptManager::errorEntityMessage, | ||
| 491 | [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) { | ||
| 492 | addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_ERROR); | ||
| 493 | }); | ||
| 494 | connect(newManager.get(), &ScriptManager::warningEntityMessage, | ||
| 495 | [this](const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID) { | ||
| 496 | addLogEntry(message, fileName, lineNumber, entityID, ScriptMessage::Severity::SEVERITY_WARNING); | ||
| 497 | }); | ||
| 498 | |||
| 473 | connect(newManager.get(), &ScriptManager::update, this, [this] { | 499 | connect(newManager.get(), &ScriptManager::update, this, [this] { |
| 474 | _entityViewer.queryOctree(); | 500 | _entityViewer.queryOctree(); |
| 475 | _entityViewer.getTree()->preUpdate(); | 501 | _entityViewer.getTree()->preUpdate(); |