/* Copyright (C) 2013 * swift Project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, * or distributed except according to the terms contained in the LICENSE file. */ #include "blackcore/context/contextsimulatorproxy.h" #include "blackmisc/dbus.h" #include "blackmisc/dbusserver.h" #include "blackmisc/genericdbusinterface.h" #include "blackmisc/simulation/simulatedaircraft.h" #include #include #include #include using namespace BlackMisc; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; using namespace BlackMisc::Network; using namespace BlackMisc::Geo; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::Settings; namespace BlackCore { namespace Context { CContextSimulatorProxy::CContextSimulatorProxy(const QString &serviceName, QDBusConnection &connection, CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime) : IContextSimulator(mode, runtime), m_dBusInterface(nullptr) { this->m_dBusInterface = new BlackMisc::CGenericDBusInterface( serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), connection, this); this->relaySignals(serviceName, connection); } void CContextSimulatorProxy::unitTestRelaySignals() { // connect signals, asserts when failures QDBusConnection con = QDBusConnection::sessionBus(); CContextSimulatorProxy c(CDBusServer::coreServiceName(), con, CCoreFacadeConfig::Remote, nullptr); Q_UNUSED(c); } void CContextSimulatorProxy::relaySignals(const QString &serviceName, QDBusConnection &connection) { // the types here have to be fully qualifed bool s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "simulatorStatusChanged", this, SIGNAL(simulatorStatusChanged(int))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "simulatorPluginChanged", this, SIGNAL(simulatorPluginChanged(BlackMisc::Simulation::CSimulatorPluginInfo))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "simulatorChanged", this, SIGNAL(simulatorChanged(BlackMisc::Simulation::CSimulatorInfo))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "vitalityLost", this, SIGNAL(vitalityLost())); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "renderRestrictionsChanged", this, SIGNAL(renderRestrictionsChanged(bool, bool, int, BlackMisc::PhysicalQuantities::CLength))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "interpolationAndRenderingSetupChanged", this, SIGNAL(interpolationAndRenderingSetupChanged())); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "matchingSetupChanged", this, SIGNAL(matchingSetupChanged())); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "modelSetChanged", this, SIGNAL(modelSetChanged(BlackMisc::Simulation::CSimulatorInfo))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "modelMatchingCompleted", this, SIGNAL(modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "addingRemoteModelFailed", this, SIGNAL(addingRemoteModelFailed(BlackMisc::Simulation::CSimulatedAircraft, bool, bool, BlackMisc::CStatusMessage))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "aircraftRenderingChanged", this, SIGNAL(aircraftRenderingChanged(BlackMisc::Simulation::CSimulatedAircraft))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "ownAircraftModelChanged", this, SIGNAL(ownAircraftModelChanged(BlackMisc::Simulation::CAircraftModel))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "airspaceSnapshotHandled", this, SIGNAL(airspaceSnapshotHandled())); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "weatherGridReceived", this, SIGNAL(weatherGridReceived(BlackMisc::Weather::CWeatherGrid, BlackMisc::CIdentifier))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "driverMessages", this, SIGNAL(driverMessages(BlackMisc::CStatusMessageList))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "requestUiConsoleMessage", this, SIGNAL(requestUiConsoleMessage(QString, bool))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "validatedModelSet", this, SIGNAL(validatedModelSet(BlackMisc::Simulation::CSimulatorInfo, BlackMisc::Simulation::CAircraftModelList, BlackMisc::Simulation::CAircraftModelList, bool, BlackMisc::CStatusMessageList))); Q_ASSERT(s); Q_UNUSED(s); this->relayBaseClassSignals(serviceName, connection, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName()); } CSimulatorPluginInfoList CContextSimulatorProxy::getAvailableSimulatorPlugins() const { return m_dBusInterface->callDBusRet(QLatin1String("getAvailableSimulatorPlugins")); } CSimulatorSettings CContextSimulatorProxy::getSimulatorSettings() const { return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorSettings")); } bool CContextSimulatorProxy::setSimulatorSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulatorInfo) { return m_dBusInterface->callDBusRet(QLatin1String("setSimulatorSettings"), settings, simulatorInfo); } int CContextSimulatorProxy::getSimulatorStatus() const { return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorStatus")); } CAirportList CContextSimulatorProxy::getAirportsInRange(bool recalculatePosition) const { return m_dBusInterface->callDBusRet(QLatin1String("getAirportsInRange"), recalculatePosition); } CAircraftModelList CContextSimulatorProxy::getModelSet() const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSet")); } CSimulatorInfo CContextSimulatorProxy::simulatorsWithInitializedModelSet() const { return m_dBusInterface->callDBusRet(QLatin1String("simulatorsWithInitializedModelSet")); } CStatusMessageList CContextSimulatorProxy::verifyPrerequisites() const { return m_dBusInterface->callDBusRet(QLatin1String("verifyPrerequisites")); } CSimulatorInfo CContextSimulatorProxy::getModelSetLoaderSimulator() const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetLoaderSimulator")); } void CContextSimulatorProxy::setModelSetLoaderSimulator(const CSimulatorInfo &simulator) { m_dBusInterface->callDBus(QLatin1String("setModelSetLoaderSimulator"), simulator); } QStringList CContextSimulatorProxy::getModelSetStrings() const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetStrings")); } QStringList CContextSimulatorProxy::getModelSetCompleterStrings(bool sorted) const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetCompleterStrings"), sorted); } int CContextSimulatorProxy::removeModelsFromSet(const CAircraftModelList &removeModels) { return m_dBusInterface->callDBusRet(QLatin1String("removeModelsFromSet"), removeModels); } bool CContextSimulatorProxy::isKnownModelInSet(const QString &modelString) const { return m_dBusInterface->callDBusRet(QLatin1String("isKnownModelInSet"), modelString); } CAircraftModelList CContextSimulatorProxy::getModelSetModelsStartingWith(const QString &modelString) const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetModelsStartingWith"), modelString); } int CContextSimulatorProxy::getModelSetCount() const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetCount")); } CSimulatorPluginInfo CContextSimulatorProxy::getSimulatorPluginInfo() const { return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorPluginInfo")); } CSimulatorInternals CContextSimulatorProxy::getSimulatorInternals() const { return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorInternals")); } void CContextSimulatorProxy::disableModelsForMatching(const CAircraftModelList &removedModels, bool incremental) { m_dBusInterface->callDBus(QLatin1String("disableModelsForMatching"), removedModels, incremental); } CAircraftModelList CContextSimulatorProxy::getDisabledModelsForMatching() const { return m_dBusInterface->callDBusRet(QLatin1String("getDisabledModelsForMatching")); } bool CContextSimulatorProxy::triggerModelSetValidation(const CSimulatorInfo &simulator) { return m_dBusInterface->callDBusRet(QLatin1String("triggerModelSetValidation"), simulator); } bool CContextSimulatorProxy::isValidationInProgress() const { return m_dBusInterface->callDBusRet(QLatin1String("isValidationInProgress")); } void CContextSimulatorProxy::restoreDisabledModels() { m_dBusInterface->callDBus(QLatin1String("restoreDisabledModels")); } bool CContextSimulatorProxy::setTimeSynchronization(bool enable, const CTime &offset) { return m_dBusInterface->callDBusRet(QLatin1String("setTimeSynchronization"), enable, offset); } bool CContextSimulatorProxy::isTimeSynchronized() const { return m_dBusInterface->callDBusRet(QLatin1String("isTimeSynchronized")); } CInterpolationAndRenderingSetupGlobal CContextSimulatorProxy::getInterpolationAndRenderingSetupGlobal() const { return m_dBusInterface->callDBusRet(QLatin1String("getInterpolationAndRenderingSetupGlobal")); } CInterpolationSetupList CContextSimulatorProxy::getInterpolationAndRenderingSetupsPerCallsign() const { return m_dBusInterface->callDBusRet(QLatin1String("getInterpolationAndRenderingSetupsPerCallsign")); } CInterpolationAndRenderingSetupPerCallsign CContextSimulatorProxy::getInterpolationAndRenderingSetupPerCallsignOrDefault(const CCallsign &callsign) const { return m_dBusInterface->callDBusRet(QLatin1String("getInterpolationAndRenderingSetupPerCallsignOrDefault"), callsign); } bool CContextSimulatorProxy::setInterpolationAndRenderingSetupsPerCallsign(const CInterpolationSetupList &setups, bool ignoreSameAsGlobal) { return m_dBusInterface->callDBusRet(QLatin1String("setInterpolationAndRenderingSetupsPerCallsign"), setups, ignoreSameAsGlobal); } CStatusMessageList CContextSimulatorProxy::getInterpolationMessages(const CCallsign &callsign) const { return m_dBusInterface->callDBusRet(QLatin1String("getInterpolationMessages"), callsign); } void CContextSimulatorProxy::setInterpolationAndRenderingSetupGlobal(const CInterpolationAndRenderingSetupGlobal &setup) { m_dBusInterface->callDBus(QLatin1String("setInterpolationAndRenderingSetupGlobal"), setup); } CTime CContextSimulatorProxy::getTimeSynchronizationOffset() const { return m_dBusInterface->callDBusRet(QLatin1String("getTimeSynchronizationOffset")); } bool CContextSimulatorProxy::startSimulatorPlugin(const CSimulatorPluginInfo &simulatorInfo) { return m_dBusInterface->callDBusRet(QLatin1String("startSimulatorPlugin"), simulatorInfo); } void CContextSimulatorProxy::stopSimulatorPlugin(const CSimulatorPluginInfo &simulatorInfo) { m_dBusInterface->callDBus(QLatin1String("stopSimulatorPlugin"), simulatorInfo); } int CContextSimulatorProxy::checkListeners() { return m_dBusInterface->callDBusRet(QLatin1String("checkListeners")); } CPixmap CContextSimulatorProxy::iconForModel(const QString &modelString) const { return m_dBusInterface->callDBusRet(QLatin1String("iconForModel"), modelString); } void CContextSimulatorProxy::highlightAircraft(const CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const CTime &displayTime) { m_dBusInterface->callDBus(QLatin1String("highlightAircraft"), aircraftToHighlight, enableHighlight, displayTime); } bool CContextSimulatorProxy::followAircraft(const CCallsign &callsign) { return m_dBusInterface->callDBusRet(QLatin1String("followAircraft"), callsign); } void CContextSimulatorProxy::recalculateAllAircraft() { m_dBusInterface->callDBus(QLatin1String("recalculateAllAircraft")); } bool CContextSimulatorProxy::resetToModelMatchingAircraft(const CCallsign &callsign) { return m_dBusInterface->callDBusRet(QLatin1String("resetToModelMatchingAircraft"), callsign); } bool CContextSimulatorProxy::isWeatherActivated() const { return m_dBusInterface->callDBusRet(QLatin1String("isWeatherActivated")); } void CContextSimulatorProxy::setWeatherActivated(bool activated) { m_dBusInterface->callDBus(QLatin1String("setWeatherActivated"), activated); } void CContextSimulatorProxy::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier) { m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), weatherGrid, identifier); } CStatusMessageList CContextSimulatorProxy::getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const { return m_dBusInterface->callDBusRet(QLatin1String("getMatchingMessages"), callsign); } MatchingLog CContextSimulatorProxy::isMatchingMessagesEnabled() const { return m_dBusInterface->callDBusRet(QLatin1String("isMatchingMessagesEnabled")); } void CContextSimulatorProxy::enableMatchingMessages(MatchingLog enabled) { m_dBusInterface->callDBus(QLatin1String("enableMatchingMessages"), enabled); } bool CContextSimulatorProxy::parseCommandLine(const QString &commandLine, const CIdentifier &originator) { return m_dBusInterface->callDBusRet(QLatin1String("parseCommandLine"), commandLine, originator); } int CContextSimulatorProxy::doMatchingsAgain() { return m_dBusInterface->callDBusRet(QLatin1String("doMatchingsAgain")); } bool CContextSimulatorProxy::doMatchingAgain(const CCallsign &callsign) { return m_dBusInterface->callDBusRet(QLatin1String("doMatchingAgain"), callsign); } CMatchingStatistics CContextSimulatorProxy::getCurrentMatchingStatistics(bool missingOnly) const { return m_dBusInterface->callDBusRet(QLatin1String("getCurrentMatchingStatistics"), missingOnly); } void CContextSimulatorProxy::setMatchingSetup(const CAircraftMatcherSetup &setup) { m_dBusInterface->callDBus(QLatin1String("setMatchingSetup"), setup); } CAircraftMatcherSetup CContextSimulatorProxy::getMatchingSetup() const { return m_dBusInterface->callDBusRet(QLatin1String("getMatchingSetup")); } CStatusMessageList CContextSimulatorProxy::copyFsxTerrainProbe(const CSimulatorInfo &simulator) { return m_dBusInterface->callDBusRet(QLatin1String("copyFsxTerrainProbe"), simulator); } } // namespace } // namespace