20void QQmlEngineControlServiceImpl::messageReceived(
const QByteArray &message)
22 QMutexLocker lock(&dataMutex);
23 QQmlDebugPacket d(message);
26 d >> command >> engineId;
27 QJSEngine *engine = qobject_cast<QJSEngine *>(objectForId(engineId));
28 if (command == StartWaitingEngine && startingEngines.contains(engine)) {
29 startingEngines.removeOne(engine);
30 emit attachedToEngine(engine);
31 }
else if (command == StopWaitingEngine && stoppingEngines.contains(engine)) {
32 stoppingEngines.removeOne(engine);
33 emit detachedFromEngine(engine);
37void QQmlEngineControlServiceImpl::engineAboutToBeAdded(QJSEngine *engine)
39 QMutexLocker lock(&dataMutex);
40 if (blockingMode && state() == Enabled) {
41 Q_ASSERT(!stoppingEngines.contains(engine));
42 Q_ASSERT(!startingEngines.contains(engine));
43 startingEngines.append(engine);
44 sendMessage(EngineAboutToBeAdded, engine);
46 emit attachedToEngine(engine);
50void QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QJSEngine *engine)
52 QMutexLocker lock(&dataMutex);
53 if (blockingMode && state() == Enabled) {
54 Q_ASSERT(!stoppingEngines.contains(engine));
55 Q_ASSERT(!startingEngines.contains(engine));
56 stoppingEngines.append(engine);
57 sendMessage(EngineAboutToBeRemoved, engine);
59 emit detachedFromEngine(engine);
63void QQmlEngineControlServiceImpl::engineAdded(QJSEngine *engine)
65 if (state() == Enabled) {
66 QMutexLocker lock(&dataMutex);
67 Q_ASSERT(!startingEngines.contains(engine));
68 Q_ASSERT(!stoppingEngines.contains(engine));
69 sendMessage(EngineAdded, engine);
73void QQmlEngineControlServiceImpl::engineRemoved(QJSEngine *engine)
75 if (state() == Enabled) {
76 QMutexLocker lock(&dataMutex);
77 Q_ASSERT(!startingEngines.contains(engine));
78 Q_ASSERT(!stoppingEngines.contains(engine));
79 sendMessage(EngineRemoved, engine);
91void QQmlEngineControlServiceImpl::stateChanged(State)
94 QMutexLocker lock(&dataMutex);
95 for (QJSEngine *engine : std::as_const(startingEngines))
96 emit attachedToEngine(engine);
97 startingEngines.clear();
98 for (QJSEngine *engine : std::as_const(stoppingEngines))
99 emit detachedFromEngine(engine);
100 stoppingEngines.clear();