6 #include <QDBusConnection>
7 #include <QElapsedTimer>
11 #include <QStringBuilder>
40 using namespace swift::misc::aviation;
41 using namespace swift::misc::simulation;
43 using namespace swift::core::context;
59 if (!CContextApplicationProxy::isContextResponsive(dBusAddress, connectMsg))
62 u
"Cannot connect DBus at '" % dBusAddress % u
"', reason: " % connectMsg };
73 void CCoreFacade::init()
75 if (m_initalized || m_shuttingDown) {
return; }
83 m_launcherSetup.setProperty(CLauncherSetup::IndexDBusAddress, dbusAddress);
90 this->initDBusConnection(dbusAddress);
111 default: qFatal(
"Invalid application context mode");
116 m_logHistorySource->
initialize(m_dataLinkDBus);
131 if (m_contextApplication) { m_contextApplication->
deleteLater(); }
132 m_contextApplication = IContextApplication::create(
this, m_config.
getMode(), m_dbusServer, m_dbusConnection);
135 if (m_contextAudio) { m_contextAudio->
deleteLater(); }
136 m_contextAudio = qobject_cast<CContextAudioBase *>(
137 IContextAudio::create(
this, m_config.
getMode(), m_dbusServer, m_dbusConnection));
140 if (m_contextOwnAircraft) { m_contextOwnAircraft->
deleteLater(); }
141 m_contextOwnAircraft = IContextOwnAircraft::create(
this, m_config.
getMode(), m_dbusServer, m_dbusConnection);
144 if (m_contextSimulator) { m_contextSimulator->
deleteLater(); }
145 m_contextSimulator = IContextSimulator::create(
this, m_config.
getMode(), m_dbusServer, m_dbusConnection);
149 if (m_contextNetwork) { m_contextNetwork->
deleteLater(); }
150 m_contextNetwork = IContextNetwork::create(
this, m_config.
getMode(), m_dbusServer, m_dbusConnection);
159 Q_ASSERT(!m_contextNetwork ||
164 this->initPostSetup(times);
180 bool handled =
false;
201 void CCoreFacade::initDBusServer(
const QString &dBusAddress)
203 Q_ASSERT(!dBusAddress.
isEmpty());
206 CLogMessage(
this).
info(u
"DBus server on address: '%1'") << dBusAddress;
227 Q_ASSERT_X(this->
getCContextNetwork()->airspace(), Q_FUNC_INFO,
"No airspace object");
241 c =
connect(m_contextNetwork, &IContextNetwork::changedRemoteAircraftModel,
245 c =
connect(m_contextNetwork, &IContextNetwork::changedRemoteAircraftEnabled,
272 c =
connect(m_contextOwnAircraft, &IContextOwnAircraft::changedAircraftCockpit,
276 &CContextSimulator::xCtxUpdateSimulatorSelcalFromContext);
309 Q_ASSERT(m_contextApplication);
331 if (!m_initalized) {
return; }
332 if (m_shuttingDown) {
return; }
333 m_shuttingDown =
true;
340 m_logHistory =
nullptr;
341 delete m_logHistorySource;
342 m_logHistorySource =
nullptr;
343 delete m_dataLinkDBus;
344 m_dataLinkDBus =
nullptr;
357 m_contextAudio =
nullptr;
394 m_contextOwnAircraft =
403 m_contextApplication =
408 void CCoreFacade::initDBusConnection(
const QString &address)
410 if (m_initDBusConnection) {
return; }
456 "Cannot downcast to local object");
463 "Cannot downcast to local object");
470 "Cannot downcast to local object");
477 "Cannot downcast to local object");
484 "Cannot downcast to local object");
491 "Cannot downcast to local object");
498 "Cannot downcast to local object");
505 "Cannot downcast to local object");
512 "Cannot downcast to local object");
519 "Cannot downcast to local object");
Configuration object for the contexts.
bool hasDBusAddress() const
DBus address?
bool requiresDBusSever() const
Requires server (at least one in server)?
ContextMode getMode() const
Mode.
bool requiresDBusConnection() const
Requires DBus connection (at least one remote)?
@ NotUsed
during shutdown or not used at all
@ Local
context runs in same process
@ Remote
context runs in a different process.
@ LocalInDBusServer
context runs in same process.
QString getDBusAddress() const
DBus address.
context::CContextSimulator * getCContextSimulator()
Context for simulator.
void gracefulShutdown()
Clean up (will be connected to signal QCoreApplication::aboutToQuit)
context::IContextAudio * getIContextAudio()
Context for audio.
context::IContextOwnAircraft * getIContextOwnAircraft()
Context for own aircraft.
context::IContextApplication * getIContextApplication()
Context for application.
QString getDBusAddress() const
DBus address if any.
context::IContextNetwork * getIContextNetwork()
Context for network.
bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)
Parse command line in all contexts.
context::CContextAudio * getCContextAudio()
Context for audio.
context::IContextSimulator * getIContextSimulator()
Context for simulator.
context::CContextApplication * getCContextApplication()
Context for application.
swift::misc::CStatusMessage tryToReconnectWithDBus()
In case connection between DBus parties is lost, try to reconnect.
context::CContextNetwork * getCContextNetwork()
Context for network.
context::CContextOwnAircraft * getCContextOwnAircraft()
Context for own aircraft.
static void registerMetadata()
Register metadata.
context::CContextAudioBase * getCContextAudioBase()
Context for audio.
Audio context base class.
void gracefulShutdown()
Graceful shutdown.
Audio context implementation.
Network context implementation.
void gracefulShutdown()
Gracefully shut down, e.g. for thread safety.
void setSimulationEnvironmentProvider(swift::misc::simulation::ISimulationEnvironmentProvider *provider)
Set the provider.
Own aircraft context implementation. Central instance of data for.
Network simulator concrete implementation.
void gracefulShutdown()
Gracefully shut down, e.g. for plugin unloading.
Application context interface.
bool isUsingImplementingObject() const
Using local implementing object?
virtual bool parseCommandLine(const QString &commandLine, const swift::misc::CIdentifier &originator)=0
Parse a given command line.
virtual swift::misc::CStatusMessage disconnectFromNetwork()=0
Disconnect from network.
const QString & getDBusAddress() const
Destructor.
void removeAllObjects()
Remove all objects added with addObject.
static const QString & systemBusAddress()
Address denoting a system bus server.
static const QString & sessionBusAddress()
Address denoting a session bus server.
static const QString & p2pConnectionName()
P2P connection name.
static const QString & coreServiceName()
Default service name.
Value object encapsulating information identifying a component of a modular distributed swift process...
Records all log messages to a list that persists for the lifetime of the application.
Allows distributed insertion of log messages into a central CLogHistory.
Class for emitting a log message.
Derived & error(const char16_t(&format)[N])
Set the severity to error, providing a format string.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
Streamable status message, e.g.
constexpr static auto SeverityError
Status severities.
constexpr static auto SeverityInfo
Status severities.
A transport mechanism using signals and slots distributed by DBus.
void initializeRemote(const QDBusConnection &connection, const QString &service)
Initialize on client side.
void initializeLocal(CDBusServer *server=nullptr)
Initialize on server side.
void initialize(IDataLink *)
Publish using the given transport mechanism.
void initialize(IDataLink *)
Publish using the given transport mechanism.
Aircraft model (used by another pilot, my models on disk)
Core data traits (aka cached values) and classes.
Backend services of the swift project, like dealing with the network or the simulators.
void registerMetadata()
Register all relevant metadata in swift::core.
Free functions in swift::misc.
void registerMetadata()
Register all relevant metadata in Misc.
QString qmapToString(const QMap< K, V > &map)
A map converted to string.
const char * constData() const const
QDBusConnection connectToPeer(const QString &address, const QString &name)
void disconnectFromBus(const QString &name)
void disconnectFromPeer(const QString &name)
bool isConnected() const const
QDBusError lastError() const const
QString name() const const
QDBusConnection sessionBus()
QDBusConnection systemBus()
QString message() const const
QMap< Key, T >::iterator insert(QMap< Key, T >::const_iterator pos, const Key &key, const T &value)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
bool isEmpty() const const
QByteArray toUtf8() const const
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.