19void QQmlEngineControlServiceImpl::messageReceived(
const QByteArray &message)
21 QMutexLocker lock(&dataMutex);
22 QQmlDebugPacket d(message);
25 d >> command >> engineId;
26 QJSEngine *engine = qobject_cast<QJSEngine *>(objectForId(engineId));
27 if (command == StartWaitingEngine && startingEngines.contains(engine)) {
28 startingEngines.removeOne(engine);
29 emit attachedToEngine(engine);
30 }
else if (command == StopWaitingEngine && stoppingEngines.contains(engine)) {
31 stoppingEngines.removeOne(engine);
32 emit detachedFromEngine(engine);
36void QQmlEngineControlServiceImpl::engineAboutToBeAdded(QJSEngine *engine)
38 QMutexLocker lock(&dataMutex);
39 if (blockingMode && state() == Enabled) {
40 Q_ASSERT(!stoppingEngines.contains(engine));
41 Q_ASSERT(!startingEngines.contains(engine));
42 startingEngines.append(engine);
43 sendMessage(EngineAboutToBeAdded, engine);
45 emit attachedToEngine(engine);
49void QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QJSEngine *engine)
51 QMutexLocker lock(&dataMutex);
52 if (blockingMode && state() == Enabled) {
53 Q_ASSERT(!stoppingEngines.contains(engine));
54 Q_ASSERT(!startingEngines.contains(engine));
55 stoppingEngines.append(engine);
56 sendMessage(EngineAboutToBeRemoved, engine);
58 emit detachedFromEngine(engine);
62void QQmlEngineControlServiceImpl::engineAdded(QJSEngine *engine)
64 if (state() == Enabled) {
65 QMutexLocker lock(&dataMutex);
66 Q_ASSERT(!startingEngines.contains(engine));
67 Q_ASSERT(!stoppingEngines.contains(engine));
68 sendMessage(EngineAdded, engine);
72void QQmlEngineControlServiceImpl::engineRemoved(QJSEngine *engine)
74 if (state() == Enabled) {
75 QMutexLocker lock(&dataMutex);
76 Q_ASSERT(!startingEngines.contains(engine));
77 Q_ASSERT(!stoppingEngines.contains(engine));
78 sendMessage(EngineRemoved, engine);
90void QQmlEngineControlServiceImpl::stateChanged(State)
93 QMutexLocker lock(&dataMutex);
94 for (QJSEngine *engine : std::as_const(startingEngines))
95 emit attachedToEngine(engine);
96 startingEngines.clear();
97 for (QJSEngine *engine : std::as_const(stoppingEngines))
98 emit detachedFromEngine(engine);
99 stoppingEngines.clear();