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