CPluginManagerSimulator::getListener should not create listeners

Up to now, CPluginManagerSimulator::getListener was allocating a listener
automatically in the background which was not always the desired
behaviour. For example in case simulators are stopped, it is unnecessary
to allocate all listeners and call stop on them. It is enough to stop
the existing ones.
In order to achieve the correct behaviour the creation part is moved to
CPluginManagerSimulator::createListener.

refs #606
This commit is contained in:
Roland Winklmeier
2016-02-28 12:37:38 +01:00
parent 39285541b7
commit 211a7dcc5b
3 changed files with 21 additions and 4 deletions

View File

@@ -69,6 +69,7 @@ namespace BlackCore
}
ISimulatorListener *listener = m_plugins->getListener(simulatorInfo.getIdentifier());
Q_ASSERT(listener);
QMetaObject::invokeMethod(listener, "stop");
}
@@ -396,7 +397,7 @@ namespace BlackCore
m_listenersThread.start(QThread::LowPriority);
}
ISimulatorListener *listener = m_plugins->getListener(simulatorInfo.getIdentifier());
ISimulatorListener *listener = m_plugins->createListener(simulatorInfo.getIdentifier());
Q_ASSERT_X(listener, Q_FUNC_INFO, "No listener");
if (listener->thread() != &m_listenersThread)
@@ -584,7 +585,7 @@ namespace BlackCore
for (const auto &info : getAvailableSimulatorPlugins())
{
ISimulatorListener *listener = m_plugins->getListener(info.getIdentifier());
QMetaObject::invokeMethod(listener, "stop");
if(listener) { QMetaObject::invokeMethod(listener, "stop"); }
}
}

View File

@@ -58,7 +58,7 @@ namespace BlackCore
return getPluginById<ISimulatorFactory>(pluginId);
}
ISimulatorListener *CPluginManagerSimulator::getListener(const QString &pluginId)
ISimulatorListener *CPluginManagerSimulator::createListener(const QString &pluginId)
{
if (!m_plugins.contains(pluginId))
{
@@ -83,6 +83,17 @@ namespace BlackCore
return plugin.listener;
}
ISimulatorListener *CPluginManagerSimulator::getListener(const QString &pluginId)
{
if (!m_plugins.contains(pluginId))
{
return nullptr;
}
PluginExtended &plugin = m_plugins[pluginId];
return plugin.listener;
}
CSimulatorPluginInfoList CPluginManagerSimulator::getAvailableSimulatorPlugins() const
{
CSimulatorPluginInfoList list;

View File

@@ -47,7 +47,12 @@ namespace BlackCore
//! Get simulator factory from the plugin
ISimulatorFactory *getFactory(const QString &pluginId);
//! Get simulator listener from the plugin
//! Create simulator listener from the plugin
//! In case one is existing already, it is returned instead.
ISimulatorListener *createListener(const QString &pluginId);
//! Get previously created simulator listener from the plugin
//! Returns nullptr if listener is not yet created
ISimulatorListener *getListener(const QString &pluginId);
//! Get all simulator driver plugins