Make simulator listeners safe against multiple starts

refs #909
This commit is contained in:
Roland Winklmeier
2017-03-25 18:57:57 +01:00
committed by Mathew Sutcliffe
parent 0eaab1753d
commit aafe211b5c
8 changed files with 45 additions and 23 deletions

View File

@@ -83,4 +83,18 @@ namespace BlackCore
return m_info.toQString();
}
void ISimulatorListener::start()
{
if (m_isRunning) { return; }
m_isRunning = true;
startImpl();
}
void ISimulatorListener::stop()
{
if(!m_isRunning) { return; }
stopImpl();
m_isRunning = false;
}
} // namespace

View File

@@ -255,17 +255,25 @@ namespace BlackCore
public slots:
//! Start listening for the simulator to start.
virtual void start() = 0;
void start();
//! Stops listening.
virtual void stop() = 0;
void stop();
signals:
//! Emitted when the listener discovers the simulator running.
void simulatorStarted(const BlackMisc::Simulation::CSimulatorPluginInfo &info);
protected:
//! Plugin specific implementation to start listener
virtual void startImpl() = 0;
//! Plugin specific implementation to stop listener
virtual void stopImpl() = 0;
private:
BlackMisc::Simulation::CSimulatorPluginInfo m_info;
bool m_isRunning = false;
};
//! Factory pattern class to create instances of ISimulator