refs #364, refs #368 contexts:

* changed to CSimulatedAircraft / Simulation::CAircraftModel
* added new functions such as icons for model
* improved ICAO code handling in airspace
* removed implicit logging from network context
This commit is contained in:
Klaus Basan
2015-01-18 22:17:21 +01:00
parent b12352047b
commit c61a963a99
14 changed files with 534 additions and 214 deletions

View File

@@ -18,6 +18,7 @@
using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Audio;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Geo;
using namespace BlackMisc::PhysicalQuantities;
@@ -61,7 +62,7 @@ namespace BlackCore
CFlightPlan plan;
// use cache, but not for own callsign (always reload)
if (this->m_flightPlanCache.contains(callsign)) plan = this->m_flightPlanCache[callsign];
if (this->m_flightPlanCache.contains(callsign)) { plan = this->m_flightPlanCache[callsign]; }
if (!plan.wasSentOrLoaded() || plan.timeDiffSentOrLoadedMs() > 30 * 1000)
{
// outdated, or not in cache at all
@@ -103,7 +104,7 @@ namespace BlackCore
CUserList CAirspaceMonitor::getUsersForCallsigns(const CCallsignList &callsigns) const
{
CUserList users;
if (callsigns.isEmpty()) return users;
if (callsigns.isEmpty()) { return users; }
CCallsignList searchList(callsigns);
// myself, which is not in the lists below
@@ -214,8 +215,15 @@ namespace BlackCore
foreach(CAircraft aircraft, this->m_aircraftInRange)
{
this->m_network->sendFrequencyQuery(aircraft.getCallsign());
this->m_network->sendIcaoCodesQuery(aircraft.getCallsign());
const CCallsign cs(aircraft.getCallsign());
this->m_network->sendFrequencyQuery(cs);
// we only query ICAO if we have none yet
// it happens sometimes with some FSD servers (e.g our testserver) a first query is skipped
if (!aircraft.hasValidAircraftDesignator())
{
this->m_network->sendIcaoCodesQuery(cs);
}
}
}
@@ -238,6 +246,17 @@ namespace BlackCore
emit this->changedAtcStationsOnline();
}
void CAirspaceMonitor::clear()
{
m_metarCache.clear();
m_flightPlanCache.clear();
m_icaoCodeCache.clear();
removeAllOnlineAtcStations();
removeAllAircraft();
removeAllOtherClients();
}
void CAirspaceMonitor::ps_realNameReplyReceived(const CCallsign &callsign, const QString &realname)
{
if (realname.isEmpty()) return;
@@ -251,24 +270,26 @@ namespace BlackCore
// Client
vm = CPropertyIndexVariantMap({CClient::IndexUser, CUser::IndexRealName}, realname);
this->addVoiceCapabilitiesFromDataFile(vm, callsign);
if (!this->m_otherClients.contains(&CClient::getCallsign, callsign)) { this->m_otherClients.push_back(CClient(callsign)); }
this->m_otherClients.applyIf(&CClient::getCallsign, callsign, vm);
}
void CAirspaceMonitor::ps_capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags)
{
if (callsign.isEmpty()) return;
if (callsign.isEmpty()) { return; }
CPropertyIndexVariantMap capabilities;
capabilities.addValue(CClient::FsdAtisCanBeReceived, (flags & INetwork::AcceptsAtisResponses));
capabilities.addValue(CClient::FsdWithInterimPositions, (flags & INetwork::SupportsInterimPosUpdates));
capabilities.addValue(CClient::FsdWithModelDescription, (flags & INetwork::SupportsModelDescriptions));
CPropertyIndexVariantMap vm(CClient::IndexCapabilities, capabilities.toCVariant());
this->addVoiceCapabilitiesFromDataFile(vm, callsign);
if (!this->m_otherClients.contains(&CClient::getCallsign, callsign)) { this->m_otherClients.push_back(CClient(callsign)); }
this->m_otherClients.applyIf(&CClient::getCallsign, callsign, vm);
}
void CAirspaceMonitor::ps_fsipirCustomPacketReceived(const CCallsign &callsign, const QString &, const QString &, const QString &, const QString &model)
void CAirspaceMonitor::ps_fsipirCustomPacketReceived(const CCallsign &callsign, const QString &airlineIcao, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model)
{
if (callsign.isEmpty() || model.isEmpty()) return;
if (callsign.isEmpty() || model.isEmpty()) { return; }
// Request of other client, I can get the other's model from that
CPropertyIndexVariantMap vm({ CClient::IndexModel, CAircraftModel::IndexModelString }, model);
@@ -276,16 +297,33 @@ namespace BlackCore
if (!this->m_otherClients.contains(&CClient::getCallsign, callsign))
{
// with custom packets it can happen,
//the packet is received before any other packet
// the packet is received before any other packet
this->m_otherClients.push_back(CClient(callsign));
}
this->m_otherClients.applyIf(&CClient::getCallsign, callsign, vm);
this->sendFsipiCustomPacket(callsign); // response
// ICAO response from custom data
if (!aircraftDesignator.isEmpty())
{
CAircraftIcao icao(aircraftDesignator, combinedAircraftType, airlineIcao, "", ""); // from custom packet
if (this->m_aircraftInRange.containsCallsign(callsign))
{
// we have that aircraft, set straight away
this->ps_icaoCodesReceived(callsign, icao);
}
else
{
// store in cache
this->m_icaoCodeCache.insert(callsign, icao);
}
}
}
void CAirspaceMonitor::ps_serverReplyReceived(const CCallsign &callsign, const QString &server)
{
if (callsign.isEmpty() || server.isEmpty()) return;
if (callsign.isEmpty() || server.isEmpty()) { return; }
if (!this->m_otherClients.contains(&CClient::getCallsign, callsign)) { this->m_otherClients.push_back(CClient(callsign)); }
CPropertyIndexVariantMap vm(CClient::IndexServer, server);
this->m_otherClients.applyIf(&CClient::getCallsign, callsign, vm);
}
@@ -319,7 +357,7 @@ namespace BlackCore
CAircraft me = this->m_ownAircraft;
CAircraftIcao icao = me.getIcaoInfo();
QString modelString = this->m_ownAircraftModel.getModelString();
if (modelString.isEmpty()) modelString = CProject::systemNameAndVersion();
if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); }
this->m_network->sendFsipiCustomPacket(recipientCallsign, icao.getAirlineDesignator(), icao.getAircraftDesignator(), icao.getAircraftCombinedType(), modelString);
}
@@ -328,7 +366,7 @@ namespace BlackCore
CAircraft me = this->m_ownAircraft;
CAircraftIcao icao = me.getIcaoInfo();
QString modelString = this->m_ownAircraftModel.getModelString();
if (modelString.isEmpty()) modelString = CProject::systemNameAndVersion();
if (modelString.isEmpty()) { modelString = CProject::systemNameAndVersion(); }
this->m_network->sendFsipirCustomPacket(recipientCallsign, icao.getAirlineDesignator(), icao.getAircraftDesignator(), icao.getAircraftCombinedType(), modelString);
}
@@ -343,7 +381,7 @@ namespace BlackCore
}
}
void CAirspaceMonitor::removeAllAtcStations()
void CAirspaceMonitor::removeAllOnlineAtcStations()
{
m_atcWatchdog.removeAll();
m_atcStationsOnline.clear();
@@ -357,6 +395,8 @@ namespace BlackCore
emit removedAircraft(aircraft.getCallsign());
}
m_aircraftInRange.clear();
m_flightPlanCache.clear();
m_icaoCodeCache.clear();
}
void CAirspaceMonitor::removeAllOtherClients()
@@ -364,6 +404,21 @@ namespace BlackCore
m_otherClients.clear();
}
void CAirspaceMonitor::removeFromAircraftCaches(const CCallsign &callsign)
{
if (callsign.isEmpty()) { return; }
this->m_icaoCodeCache.remove(callsign);
this->m_flightPlanCache.remove(callsign);
}
void CAirspaceMonitor::fireDelayedReadyForModelMatching(const CCallsign &callsign, int trial, int delayMs)
{
BlackMisc::singleShot(delayMs, QThread::currentThread(), [ = ]()
{
this->ps_sendReadyForModelMatching(callsign, trial + 1);
});
}
void CAirspaceMonitor::ps_receivedBookings(const CAtcStationList &bookedStations)
{
Q_ASSERT(BlackCore::isCurrentThreadCreatingThread(this));
@@ -394,11 +449,30 @@ namespace BlackCore
}
}
void CAirspaceMonitor::ps_sendReadyForModelMatching(const CCallsign &callsign)
void CAirspaceMonitor::ps_sendReadyForModelMatching(const CCallsign &callsign, int trial)
{
CAircraft remoteAircraft = this->m_aircraftInRange.findFirstByCallsign(callsign);
// some checks for special conditions, e.g. logout -> empty list, but still signals pending
if (this->m_aircraftInRange.isEmpty()) { return; }
if (!this->m_aircraftInRange.containsCallsign(callsign)) { return; }
// build simulated aircraft and crosscheck if all data are available
CSimulatedAircraft remoteAircraft(this->m_aircraftInRange.findFirstByCallsign(callsign));
Q_ASSERT(remoteAircraft.hasValidCallsign());
CClient remoteClient = this->m_otherClients.findFirstByCallsign(callsign);
emit readyForModelMatching(remoteAircraft, remoteClient);
remoteAircraft.setClient(remoteClient);
remoteAircraft.setModel(remoteClient.getAircraftModel());
bool dataComplete = remoteAircraft.hasValidAircraftDesignator() && remoteAircraft.hasValidRealName();
if (trial < 3 && !dataComplete)
{
// allow another period for the client data to arrive, otherwise go ahead
this->fireDelayedReadyForModelMatching(callsign, trial + 1);
return;
}
Q_ASSERT(remoteAircraft.hasValidAircraftDesignator());
Q_ASSERT(remoteAircraft.hasValidRealName());
emit this->readyForModelMatching(remoteAircraft);
}
void CAirspaceMonitor::ps_atcPositionUpdate(const CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &frequency, const CCoordinateGeodetic &position, const BlackMisc::PhysicalQuantities::CLength &range)
@@ -525,43 +599,35 @@ namespace BlackCore
void CAirspaceMonitor::ps_icaoCodesReceived(const CCallsign &callsign, const CAircraftIcao &icaoData)
{
Q_ASSERT(BlackCore::isCurrentThreadCreatingThread(this));
Q_ASSERT(!callsign.isEmpty());
// update
CPropertyIndexVariantMap vm(CAircraft::IndexIcao, icaoData.toCVariant());
if (!icaoData.hasAircraftDesignator())
{
// empty so far, try to fetch from data file
CLogMessage(this).debug() << "Empty ICAO info for %1 %2" << callsign << icaoData;
CAircraftIcao icaoDataDataFile = this->m_vatsimDataFileReader->getIcaoInfo(callsign);
if (!icaoDataDataFile.hasAircraftDesignator()) return; // give up!
vm = CPropertyIndexVariantMap(CAircraft::IndexIcao, icaoData.toCVariant());
CLogMessage(this).warning("Empty ICAO info for %1 %2") << callsign.toQString() << icaoData.toQString();
CAircraftIcao icaoDataFromDataFile = this->m_vatsimDataFileReader->getIcaoInfo(callsign);
if (!icaoDataFromDataFile.hasAircraftDesignator()) { return; } // give up!
vm = CPropertyIndexVariantMap(CAircraft::IndexIcao, icaoDataFromDataFile.toCVariant());
}
// ICAO code received when aircraft is already removed or not yet ready
if (!this->m_aircraftInRange.containsCallsign(callsign))
{
this->m_icaoCodeCache.insert(callsign, icaoData);
return;
}
int changed = this->m_aircraftInRange.applyIf(&CAircraft::getCallsign, callsign, vm, true);
if (changed > 0) { emit this->changedAircraftInRange(); }
// we have most important data for model matching
// but do we already have the client
if (this->m_otherClients.contains(&CClient::getCallsign, callsign))
{
// yes, client with possible model string is there
ps_sendReadyForModelMatching(callsign);
}
else
{
// allow another period for the client data to arrive, otherwise go ahead
BlackMisc::singleShot(5000, QThread::currentThread(), [ = ]()
{
ps_sendReadyForModelMatching(callsign);
});
}
// update
int c = this->m_aircraftInRange.applyIfCallsign(callsign, vm);
if (c > 0) {ps_sendReadyForModelMatching(callsign, 1); }
}
void CAirspaceMonitor::ps_aircraftUpdateReceived(const CCallsign &callsign, const CAircraftSituation &situation, const CTransponder &transponder)
{
Q_ASSERT(BlackCore::isCurrentThreadCreatingThread(this));
CAircraftList list = this->m_aircraftInRange.findByCallsign(callsign);
if (list.isEmpty())
bool exists = this->m_aircraftInRange.containsCallsign(callsign);
if (!exists)
{
// new aircraft
CAircraft aircraft;
@@ -569,11 +635,21 @@ namespace BlackCore
aircraft.setSituation(situation);
aircraft.setTransponder(transponder);
aircraft.setCalculcatedDistanceToPosition(this->m_ownAircraft.getPosition()); // distance from myself
// ICAO from cache if avialable
bool setIcao = false;
if (this->m_icaoCodeCache.contains(callsign))
{
CAircraftIcao icao = this->m_icaoCodeCache.value(callsign);
this->m_icaoCodeCache.remove(callsign);
aircraft.setIcaoInfo(icao);
setIcao = true;
}
this->m_vatsimDataFileReader->updateWithVatsimDataFileData(aircraft);
this->m_aircraftInRange.push_back(aircraft);
// and new client, there is a chance it has been created by
// custom packet first
// new client, there is a chance it has been already created by custom packet
if (!this->m_otherClients.contains(&CClient::getCallsign, callsign))
{
CClient c(callsign);
@@ -583,18 +659,28 @@ namespace BlackCore
if (this->m_network->isConnected())
{
// only if still connected
// the order here makes some sense, as we hope to receive ICAO codes last, and everthing else already in place
this->sendFsipirCustomPacket(callsign); // own aircraft model
this->m_network->sendFrequencyQuery(callsign);
this->m_network->sendRealNameQuery(callsign);
this->m_network->sendIcaoCodesQuery(callsign);
this->m_network->sendCapabilitiesQuery(callsign);
this->m_network->sendServerQuery(callsign);
this->sendFsipirCustomPacket(callsign); // own aircraft model
}
this->m_aircraftWatchdog.addCallsign(callsign);
emit this->addedAircraft(callsign, situation);
// keep as last
if (setIcao)
{
this->fireDelayedReadyForModelMatching(callsign);
}
else
{
this->m_network->sendIcaoCodesQuery(callsign);
}
this->m_aircraftWatchdog.addCallsign(callsign);
emit this->addedAircraft(callsign, situation);
} // connected
}
else
else // not exists yet
{
// update
CLength distance = this->m_ownAircraft.calculcateDistanceToPosition(situation.getPosition());
@@ -605,7 +691,7 @@ namespace BlackCore
vm.addValue(CAircraft::IndexDistance, distance);
// here I expect always a changed value
this->m_aircraftInRange.applyIf(&CAircraft::getCallsign, callsign, vm, false);
this->m_aircraftInRange.applyIfCallsign(callsign, vm);
this->m_aircraftWatchdog.resetCallsign(callsign);
emit this->changedAircraftSituation(callsign, situation);
}
@@ -622,6 +708,7 @@ namespace BlackCore
{
this->m_aircraftInRange.removeIf(&CAircraft::getCallsign, callsign);
this->m_otherClients.removeIf(&CClient::getCallsign, callsign);
this->removeFromAircraftCaches(callsign);
emit this->removedAircraft(callsign);
}
}

View File

@@ -12,6 +12,7 @@
#ifndef BLACKCORE_AIRSPACE_MONITOR_H
#define BLACKCORE_AIRSPACE_MONITOR_H
#include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/avatcstationlist.h"
#include "blackmisc/avaircraftlist.h"
#include "blackmisc/nwclientlist.h"
@@ -44,6 +45,7 @@ namespace BlackCore
BlackMisc::Network::CUserList getUsersForCallsigns(const BlackMisc::Aviation::CCallsignList &callsigns) const;
//! Returns the flightplan for the given callsign
//! \remarks pseudo synchronous, call the async functions and waits for result
BlackMisc::Aviation::CFlightPlan loadFlightPlanFromNetwork(const BlackMisc::Aviation::CCallsign &callsign);
//! Returns this list of other clients we know about
@@ -99,25 +101,18 @@ namespace BlackCore
void removedAircraft(const BlackMisc::Aviation::CCallsign &callsign);
//! Read for model matching
void readyForModelMatching(const BlackMisc::Aviation::CAircraft &remoteAircraft, const BlackMisc::Network::CClient &remoteClient);
void readyForModelMatching(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft);
public slots:
//! Own aircraft updated
void setOwnAircraft(const BlackMisc::Aviation::CAircraft &ownAircraft) { m_ownAircraft = ownAircraft; }
//! Own aircraft model updated
void setOwnAircraftModel(const BlackMisc::Network::CAircraftModel &model) { m_ownAircraftModel = model; }
void setOwnAircraftModel(const BlackMisc::Simulation::CAircraftModel &model) { m_ownAircraftModel = model; }
public:
//! Clear the contents
void clear()
{
removeAllAtcStations();
removeAllAircraft();
removeAllOtherClients();
m_metarCache.clear();
m_flightPlanCache.clear();
}
void clear();
private:
BlackMisc::Aviation::CAtcStationList m_atcStationsOnline;
@@ -125,14 +120,15 @@ namespace BlackCore
BlackMisc::Aviation::CAircraftList m_aircraftInRange;
BlackMisc::Network::CClientList m_otherClients;
QMap<BlackMisc::Aviation::CAirportIcao, BlackMisc::Aviation::CInformationMessage> m_metarCache;
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CFlightPlan> m_flightPlanCache;
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CFlightPlan> m_flightPlanCache;
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::Aviation::CAircraftIcao> m_icaoCodeCache;
BlackMisc::Aviation::CAircraft m_ownAircraft;
BlackMisc::Network::CAircraftModel m_ownAircraftModel;
BlackMisc::Aviation::CAircraft m_ownAircraft;
BlackMisc::Simulation::CAircraftModel m_ownAircraftModel;
INetwork *m_network = nullptr;
CVatsimBookingReader *m_vatsimBookingReader;
CVatsimDataFileReader *m_vatsimDataFileReader;
CVatsimBookingReader *m_vatsimBookingReader = nullptr;
CVatsimDataFileReader *m_vatsimDataFileReader = nullptr;
CAirspaceWatchdog m_atcWatchdog;
CAirspaceWatchdog m_aircraftWatchdog;
@@ -144,14 +140,28 @@ namespace BlackCore
//! Helper method, add voice capabilites if available
void addVoiceCapabilitiesFromDataFile(BlackMisc::CPropertyIndexVariantMap &vm, const BlackMisc::Aviation::CCallsign &callsign);
void removeAllAtcStations();
//! Remove ATC online stations
void removeAllOnlineAtcStations();
//! Remove all aircraft in range
void removeAllAircraft();
//! Remove all clients
void removeAllOtherClients();
//! Remove data from caches
void removeFromAircraftCaches(const BlackMisc::Aviation::CCallsign &callsign);
//! Schedule a ready for model matching
void fireDelayedReadyForModelMatching(const BlackMisc::Aviation::CCallsign &callsign, int trial = 1, int delayMs = 2500);
private slots:
//! Create aircraft in range, this is the only place where a new aircraft should be added
void ps_aircraftUpdateReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CTransponder &transponder);
void ps_realNameReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &realname);
void ps_capabilitiesReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, quint32 flags);
void ps_fsipirCustomPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &, const QString &, const QString &, const QString &model);
void ps_fsipirCustomPacketReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &p1, const QString &aircraftDesignator, const QString &combinedAircraftType, const QString &model);
void ps_serverReplyReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &server);
void ps_metarReceived(const QString &metarMessage);
void ps_flightPlanReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CFlightPlan &flightPlan);
@@ -161,14 +171,13 @@ namespace BlackCore
void ps_atisVoiceRoomReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &url);
void ps_atisLogoffTimeReceived(const BlackMisc::Aviation::CCallsign &callsign, const QString &zuluTime);
void ps_icaoCodesReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftIcao &icaoData);
void ps_aircraftUpdateReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CTransponder &transponder);
void ps_pilotDisconnected(const BlackMisc::Aviation::CCallsign &callsign);
void ps_frequencyReceived(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::PhysicalQuantities::CFrequency &frequency);
void ps_receivedBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations);
void ps_receivedDataFile();
// non network related slots
void ps_sendReadyForModelMatching(const BlackMisc::Aviation::CCallsign &callsign);
//! Send the information if aircraft and(!) client are vailable
void ps_sendReadyForModelMatching(const BlackMisc::Aviation::CCallsign &callsign, int trial);
};
} // namespace

View File

@@ -108,7 +108,7 @@ namespace BlackCore
void CContextApplication::processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event)
{
CInputManager::getInstance()->callFunctionsBy(event.getFunction(), event.getFunctionArgument());
qDebug() << "Calling function from origin" << event.getEventOriginator().toQString();
CLogMessage(this, CLogCategory::contextSlot()).debug() << "Calling function from origin" << event.getEventOriginator().toQString();
}
} // namespace

View File

@@ -76,6 +76,8 @@ namespace BlackCore
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus);
connect(this->m_airspace, &CAirspaceMonitor::changedAircraftInRange, this, &CContextNetwork::changedAircraftInRange);
connect(this->m_airspace, &CAirspaceMonitor::changedAircraftSituation, this, &CContextNetwork::changedAircraftSituation);
//! \todo Should be set in runtime, but this would require airspace to be a context
connect(this->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraft, this->m_airspace, &CAirspaceMonitor::setOwnAircraft);
connect(this->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this->m_airspace, &CAirspaceMonitor::setOwnAircraftModel);
}
@@ -107,23 +109,23 @@ namespace BlackCore
QString msg;
if (!server.getUser().isValid())
{
return CLogMessage(this).error("Invalid user credentials");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid user credentials");
}
else if (!this->ownAircraft().getIcaoInfo().hasAircraftAndAirlineDesignator())
{
return CLogMessage(this).error("Invalid ICAO data for own aircraft");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid ICAO data for own aircraft");
}
else if (!CNetworkUtils::canConnect(server, msg, 2000))
{
return CLogMessage(this).error(msg);
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, msg);
}
else if (this->m_network->isConnected())
{
return CLogMessage(this).error("Already connected");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Already connected");
}
else if (this->isPendingConnection())
{
return CLogMessage(this).error("Pending connection, please wait");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Pending connection, please wait");
}
else
{
@@ -137,7 +139,7 @@ namespace BlackCore
this->m_network->presetIcaoCodes(ownAircraft.getIcaoInfo());
this->m_network->setOwnAircraft(ownAircraft);
this->m_network->initiateConnection();
return CLogMessage(this).info("Connection pending %1 %2") << server.getAddress() << server.getPort();
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityInfo, "Connection pending " + server.getAddress() + " " + QString::number(server.getPort()));
}
}
@@ -152,15 +154,15 @@ namespace BlackCore
this->m_currentStatus = INetwork::Disconnecting; // as semaphore we are going to disconnect
this->m_network->terminateConnection();
this->m_airspace->clear();
return CLogMessage(this).info("Connection terminating");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityInfo, "Connection terminating");
}
else if (this->isPendingConnection())
{
return CLogMessage(this).warning("Pending connection, please wait");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityInfo, "Pending connection, please wait");
}
else
{
return CLogMessage(this).warning("Already disconnected");
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityWarning, "Already disconnected");
}
}

View File

@@ -13,8 +13,8 @@
#define BLACKCORE_CONTEXTOWNAIRCRAFT_H
#include "blackcore/context.h"
#include "blackmisc/avaircraft.h"
#include "blackmisc/avatcstation.h"
#include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/avaircrafticao.h"
#include "blackmisc/voiceroomlist.h"
#include "blackmisc/avselcal.h"
@@ -32,7 +32,7 @@
namespace BlackCore
{
//! \brief Own context proxy
//! Own context proxy
//! \ingroup dbus
class IContextOwnAircraft : public CContext
{
@@ -66,19 +66,19 @@ namespace BlackCore
signals:
//! Aircraft changed
//! \remarks local only
void changedAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
void changedAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Aircraft situation update
//! \remarks local only
void changedAircraftSituation(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
void changedAircraftSituation(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Aircraft position update
//! \remarks local only
void changedAircraftPosition(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
void changedAircraftPosition(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Aircraft cockpit update
//! \remarks DBus and local
void changedAircraftCockpit(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
void changedAircraftCockpit(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Changed SELCAL code
//! \remarks DBus and local
@@ -87,27 +87,32 @@ namespace BlackCore
public slots:
//! Get own aircraft
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0;
virtual BlackMisc::Simulation::CSimulatedAircraft getOwnAircraft() const = 0;
//! Own aircraft
//! \todo remove "own", left over from past
virtual void updateOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) = 0;
virtual bool updateAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator) = 0;
//! Own aircraft
virtual bool updateAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) = 0;
//! Own position, be aware height is terrain height
//! \todo remove "own", left over from past
virtual bool updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) = 0;
virtual bool updatePosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) = 0;
//! Complete situation update
//! \todo remove "own", left over from past
virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) = 0;
virtual bool updateSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) = 0;
//! Update own cockpit
//! \todo remove "own", left over from past
virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) = 0;
virtual bool updateCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) = 0;
//! Tune in a com frequency
virtual bool updateComFrequency(const BlackMisc::PhysicalQuantities::CFrequency &frequency, int comUnit, const QString &originator) = 0;
//! Update model
virtual bool updateModel(const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) = 0;
//! Update client
virtual bool updateClient(const BlackMisc::Network::CClient &client, const QString &originator) = 0;
//! Set current pilot
virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) = 0;

View File

@@ -21,6 +21,8 @@ using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Geo;
using namespace BlackMisc::Audio;
using namespace BlackMisc::Simulation;
namespace BlackCore
{
@@ -97,34 +99,87 @@ namespace BlackCore
/*
* Own Aircraft
*/
void CContextOwnAircraft::updateOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator)
bool CContextOwnAircraft::updateAircraft(const CSimulatedAircraft &aircraft, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << ownAircraft() << originator;
bool changedAircraft = this->updateAircraft(static_cast<CAircraft>(aircraft), originator);
bool changedModel = this->updateModel(aircraft.getModel(), originator);
bool changedClient = this->updateClient(aircraft.getClient(), originator);
if (changedModel || changedClient)
{
if (!changedAircraft)
{
// no signal so far
emit this->changedAircraft(this->m_ownAircraft, originator);
}
}
bool changed = changedModel || changedClient || changedAircraft;
return changed;
}
/*
* Own Aircraft
*/
bool CContextOwnAircraft::updateAircraft(const CAircraft &aircraft, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << ownAircraft() << originator;
// trigger the correct signals
bool changedCockpit = this->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), originator);
bool changedPosition = this->updateOwnPosition(aircraft.getPosition(), aircraft.getAltitude() , originator);
bool changedSituation = this->updateOwnSituation(aircraft.getSituation(), originator);
bool changedCockpit = this->updateCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), originator);
bool changedPosition = this->updatePosition(aircraft.getPosition(), aircraft.getAltitude() , originator);
bool changedSituation = this->updateSituation(aircraft.getSituation(), originator);
bool changed = changedCockpit || changedPosition || changedSituation;
// new voice rooms, cockpit has changed
if (changedCockpit) this->resolveVoiceRooms();
if (changedCockpit) { this->resolveVoiceRooms(); }
// any change triggers a global updated aircraft signal
// comparison is not to avoid setting the value, but avoid wrong signals
if (changed || this->m_ownAircraft != aircraft)
if (changed || this->getAviationAircraft() != aircraft)
{
emit this->changedAircraft(aircraft, originator);
// now set value
this->m_ownAircraft = aircraft;
this->m_ownAircraft.update(aircraft);
changed = true;
}
return changed;
}
/*
* Client
*/
bool CContextOwnAircraft::updateClient(const CClient &client, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << client << originator;
bool changed = this->m_ownAircraft.getClient() != client;
if (!changed) { return false; }
this->m_ownAircraft.setClient(client);
return true;
}
/*
* Model
*/
bool CContextOwnAircraft::updateModel(const CAircraftModel &model, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << model << originator;
bool changed = this->m_ownAircraft.getModel() != model;
if (!changed) { return false; }
this->m_ownAircraft.setModel(model);
return true;
}
/*
* Own position
*/
bool CContextOwnAircraft::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator)
bool CContextOwnAircraft::updatePosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << position << altitude << originator;
bool changed = (this->m_ownAircraft.getPosition() != position);
@@ -147,7 +202,7 @@ namespace BlackCore
/*
* Update own situation
*/
bool CContextOwnAircraft::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator)
bool CContextOwnAircraft::updateSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << situation;
bool changed = this->m_ownAircraft.getSituation() != situation;
@@ -165,7 +220,7 @@ namespace BlackCore
/*
* Own cockpit data
*/
bool CContextOwnAircraft::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator)
bool CContextOwnAircraft::updateCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << com1 << com2 << transponder;
bool changed = this->m_ownAircraft.hasChangedCockpitData(com1, com2, transponder);
@@ -198,7 +253,7 @@ namespace BlackCore
{
com2.setFrequencyActive(frequency);
}
return updateOwnCockpit(com1, com2, xpdr, originator);
return updateCockpit(com1, com2, xpdr, originator);
}
/*
@@ -287,7 +342,7 @@ namespace BlackCore
/*
* Own aircraft
*/
CAircraft CContextOwnAircraft::getOwnAircraft() const
CSimulatedAircraft CContextOwnAircraft::getOwnAircraft() const
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << this->m_ownAircraft;
return this->m_ownAircraft;
@@ -316,14 +371,14 @@ namespace BlackCore
if (CTransponder::isValidTransponderCode(xprCode))
{
transponder.setTransponderCode(xprCode);
this->updateOwnCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), transponder, "commandline");
this->updateCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), transponder, "commandline");
return true;
}
else
{
CTransponder::TransponderMode mode = CTransponder::modeFromString(parser.part(1));
transponder.setTransponderMode(mode);
this->updateOwnCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), transponder, "commandline");
this->updateCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), transponder, "commandline");
return true;
}
}
@@ -346,7 +401,7 @@ namespace BlackCore
{
return false;
}
this->updateOwnCockpit(com1, com2, ownAircraft.getTransponder(), "commandline");
this->updateCockpit(com1, com2, ownAircraft.getTransponder(), "commandline");
return true;
}
}
@@ -361,4 +416,12 @@ namespace BlackCore
return false;
}
/*
* Helper
*/
const CAircraft &CContextOwnAircraft::getAviationAircraft() const
{
return static_cast<CAircraft const &>(this->m_ownAircraft);
}
} // namespace

View File

@@ -16,6 +16,7 @@
#include "blackcore/context_settings.h"
#include "blackcore/context_runtime.h"
#include "blackcore/dbus_server.h"
#include "blackmisc/avatcstation.h"
namespace BlackCore
{
@@ -33,27 +34,36 @@ namespace BlackCore
virtual ~CContextOwnAircraft();
//! Own aircraft
const BlackMisc::Aviation::CAircraft &ownAircraft() const { return this->m_ownAircraft; }
const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft() const { return this->m_ownAircraft; }
//! Own aircraft
BlackMisc::Aviation::CAircraft &ownAircraft() { return this->m_ownAircraft; }
BlackMisc::Simulation::CSimulatedAircraft &ownAircraft() { return this->m_ownAircraft; }
public slots: // IContextOwnAircraft overrides
//! \copydoc IContextOwnAircraft::getOwnAircraft()
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
virtual BlackMisc::Simulation::CSimulatedAircraft getOwnAircraft() const override;
//! \copydoc IContextOwnAircraft::setOwnAircraft
virtual void updateOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateAircraft
virtual bool updateAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnPosition
virtual bool updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateAircraft
virtual bool updateAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnSituation
virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateModel
virtual bool updateModel(const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnCockpit
virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateClient
virtual bool updateClient(const BlackMisc::Network::CClient &client, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updatePosition
virtual bool updatePosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateSituation
virtual bool updateSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateCockpit
virtual bool updateCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateComFrequency
virtual bool updateComFrequency(const BlackMisc::PhysicalQuantities::CFrequency &frequency, int comUnit, const QString &originator) override;
@@ -108,7 +118,7 @@ namespace BlackCore
void ps_changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected);
private:
BlackMisc::Aviation::CAircraft m_ownAircraft; //!< my aircraft
BlackMisc::Simulation::CSimulatedAircraft m_ownAircraft; //!< my aircraft
bool m_automaticVoiceRoomResolution = true; //!< automatic voice room resolution, or disable for override
QString m_voiceRoom1UrlOverride; //!< overridden voice room url
QString m_voiceRoom2UrlOverride; //!< overridden voice room url
@@ -119,6 +129,9 @@ namespace BlackCore
//! Resolve voice rooms
void resolveVoiceRooms();
//! Own aircraft
const BlackMisc::Aviation::CAircraft &getAviationAircraft() const;
};
}

View File

@@ -10,6 +10,7 @@
using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Simulation;
namespace BlackCore
{
@@ -31,7 +32,7 @@ namespace BlackCore
void CContextOwnAircraftProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
{
bool s = connection.connect(serviceName, IContextOwnAircraft::ObjectPath(), IContextOwnAircraft::InterfaceName(),
"changedAircraftCockpit", this, SIGNAL(changedAircraftCockpit(BlackMisc::Aviation::CAircraft, QString)));
"changedAircraftCockpit", this, SIGNAL(changedAircraftCockpit(BlackMisc::Simulation::CSimulatedAircraft, QString)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextOwnAircraft::ObjectPath(), IContextOwnAircraft::InterfaceName(),
"changedSelcal", this, SIGNAL(changedSelcal(BlackMisc::Aviation::CSelcal, QString)));
@@ -39,29 +40,44 @@ namespace BlackCore
Q_UNUSED(s);
}
BlackMisc::Aviation::CAircraft CContextOwnAircraftProxy::getOwnAircraft() const
BlackMisc::Simulation::CSimulatedAircraft CContextOwnAircraftProxy::getOwnAircraft() const
{
return this->m_dBusInterface->callDBusRet<BlackMisc::Aviation::CAircraft>(QLatin1Literal("getOwnAircraft"));
return this->m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraft>(QLatin1Literal("getOwnAircraft"));
}
void CContextOwnAircraftProxy::updateOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator)
bool CContextOwnAircraftProxy::updateAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator)
{
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnAircraft"), aircraft, originator);
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraft"), aircraft, originator);
}
bool CContextOwnAircraftProxy::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator)
bool CContextOwnAircraftProxy::updateAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateOwnPosition"), position, altitude, originator);
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateAircraft"), aircraft, originator);
}
bool CContextOwnAircraftProxy::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator)
bool CContextOwnAircraftProxy::updateModel(const Simulation::CAircraftModel &model, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateOwnSituation"), situation, originator);
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateModel"), model, originator);
}
bool CContextOwnAircraftProxy::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator)
bool CContextOwnAircraftProxy::updateClient(const Network::CClient &client, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateOwnCockpit"), com1, com2, transponder, originator);
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateClient"), client, originator);
}
bool CContextOwnAircraftProxy::updatePosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updatePosition"), position, altitude, originator);
}
bool CContextOwnAircraftProxy::updateSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateSituation"), situation, originator);
}
bool CContextOwnAircraftProxy::updateCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateCockpit"), com1, com2, transponder, originator);
}
bool CContextOwnAircraftProxy::updateComFrequency(const PhysicalQuantities::CFrequency &frequency, int comUnit, const QString &originator)
@@ -91,7 +107,7 @@ namespace BlackCore
void CContextOwnAircraftProxy::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2)
{
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnCockpitOutputVolumes"), outputVolumeCom1, outputVolumeCom2);
this->m_dBusInterface->callDBus(QLatin1Literal("updateCockpitOutputVolumes"), outputVolumeCom1, outputVolumeCom2);
}
void CContextOwnAircraftProxy::setAudioVoiceRoomOverrideUrls(const QString &voiceRoom1Url, const QString &voiceRoom2Url)

View File

@@ -14,12 +14,13 @@
#include "blackcore/context_ownaircraft.h"
#include "blackmisc/genericdbusinterface.h"
#include "blackmisc/avallclasses.h"
#include "blackmisc/avaircrafticao.h"
#include "blackmisc/simulation/simulatedaircraft.h"
namespace BlackCore
{
//! \brief Own aircraft context proxy
//! Own aircraft context proxy
//! \ingroup dbus
class CContextOwnAircraftProxy : public IContextOwnAircraft
{
@@ -31,35 +32,31 @@ namespace BlackCore
//! Destructor
virtual ~CContextOwnAircraftProxy() {}
private:
BlackMisc::CGenericDBusInterface *m_dBusInterface; /*!< DBus interface */
//! \brief Relay connection signals to local signals.
void relaySignals(const QString &serviceName, QDBusConnection &connection);
protected:
//! \brief Constructor
CContextOwnAircraftProxy(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextOwnAircraft(mode, runtime), m_dBusInterface(nullptr) {}
//! \brief DBus version constructor
CContextOwnAircraftProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime);
public slots: // IContextOwnAircraft overrides
//! \copydoc IContextOwnAircraft::getOwnAircraft()
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
virtual BlackMisc::Simulation::CSimulatedAircraft getOwnAircraft() const override;
//! \copydoc IContextOwnAircraft::setOwnAircraft()
virtual void updateOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateAircraft
virtual bool updateAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnPosition
virtual bool updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateAircraft
virtual bool updateAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnSituation
virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateModel
virtual bool updateModel(const BlackMisc::Simulation::CAircraftModel &model, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnCockpit
virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateClient
virtual bool updateClient(const BlackMisc::Network::CClient &client, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updatePosition
virtual bool updatePosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateSituation
virtual bool updateSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateCockpit
virtual bool updateCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateComFrequency
virtual bool updateComFrequency(const BlackMisc::PhysicalQuantities::CFrequency &frequency, int comUnit, const QString &originator) override;
@@ -80,7 +77,7 @@ namespace BlackCore
virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override;
//! \copydoc IContextOwnAircraft::setAudioVoiceRoomOverrideUrls
virtual void setAudioVoiceRoomOverrideUrls(const QString &voiceRoom1Url,const QString &voiceRoom2Url);
virtual void setAudioVoiceRoomOverrideUrls(const QString &voiceRoom1Url, const QString &voiceRoom2Url);
//! \copydoc IContextOwnAircraft::enableAutomaticVoiceRoomResolution
virtual void enableAutomaticVoiceRoomResolution(bool enable);
@@ -88,6 +85,20 @@ namespace BlackCore
//! \copydoc IContextOwnAircraft::parseCommandLine
virtual bool parseCommandLine(const QString &commandLine) override;
protected:
//! \brief Constructor
CContextOwnAircraftProxy(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextOwnAircraft(mode, runtime), m_dBusInterface(nullptr) {}
//! \brief DBus version constructor
CContextOwnAircraftProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime);
private:
BlackMisc::CGenericDBusInterface *m_dBusInterface; //!< DBus interface */
//! \brief Relay connection signals to local signals.
void relaySignals(const QString &serviceName, QDBusConnection &connection);
};
}

View File

@@ -26,12 +26,14 @@
#include "context.h"
#include "blackcore/dbus_server.h"
#include "blackcore/context_runtime.h"
#include "blackmisc/simulation/aircraftmodellist.h"
#include "blacksim/simulatorinfo.h"
#include "blacksim/simulatorinfolist.h"
#include "blackmisc/nwaircraftmodellist.h"
#include "blackmisc/avaircraft.h"
#include "blackmisc/simulation/simulatedaircraftlist.h"
#include "blackmisc/avairportlist.h"
#include "blackmisc/project.h"
#include "blackmisc/pixmap.h"
#include <QObject>
namespace BlackCore
@@ -79,19 +81,23 @@ namespace BlackCore
//! Installed aircraft models ready or changed
void installedAircraftModelsChanged();
//! A single model has been matched
void modelMatchingCompleted(BlackMisc::Network::CAircraftModel model);
//! A single model has been matched for given Aircraft
void modelMatchingCompleted(BlackMisc::Simulation::CSimulatedAircraft aircraft);
//! A remote aircraft got changed
void remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft);
//! Emitted when own aircraft model changes
//! \todo move to own aircraft context?
void ownAircraftModelChanged(BlackMisc::Network::CAircraftModel model);
void ownAircraftModelChanged(BlackMisc::Simulation::CSimulatedAircraft aircraft);
public slots:
//! Return list of available simulator plugins
virtual BlackSim::CSimulatorInfoList getAvailableSimulatorPlugins() const = 0;
//! Returns true when simulator is connected and available
//! Returns true when simulator is connected
//! \sa isSimulating
virtual bool isConnected() const = 0;
//! Can we connect?
@@ -106,8 +112,8 @@ namespace BlackCore
//! Disconnect from simulator
virtual bool disconnectFrom() = 0;
//! Returns true when simulator is running
virtual bool isRunning() const = 0;
//! Returns true when simulator is running / simulating
virtual bool isSimulating() const = 0;
//! Simulator info
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const = 0;
@@ -116,13 +122,17 @@ namespace BlackCore
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0;
//! Aircraft model
virtual BlackMisc::Network::CAircraftModel getOwnAircraftModel() const = 0;
virtual BlackMisc::Simulation::CAircraftModel getOwnAircraftModel() const = 0;
//! Installed models in simulator eco system
virtual BlackMisc::Network::CAircraftModelList getInstalledModels() const = 0;
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const = 0;
//! Remote aircraft in range having a valid model matching (which should be all aircraft in range)
virtual BlackMisc::Network::CAircraftModelList getCurrentlyMatchedModels() const = 0;
//! Simulated other aircraft in range
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const = 0;
//! Changed remote aircraft (e.g. by disabling aircraft)
//! \todo tbd No add/remove remote aircraft function as those are added implicitly by accessing airspace monitor
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) = 0;
//! Set time synchronization between simulator and user's computer time
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
@@ -131,6 +141,12 @@ namespace BlackCore
//! Is time synchronization on?
virtual bool isTimeSynchronized() const = 0;
//! Max. number of remote aircraft rendered
virtual int getMaxRenderedRemoteAircraft() const = 0;
//! Max. number of remote aircraft rendered
virtual void setMaxRenderedRemoteAircraft(int number) = 0;
//! Time synchronization offset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0;
@@ -143,7 +159,7 @@ namespace BlackCore
//! Unload simulator plugin
virtual void unloadSimulatorPlugin() = 0;
//! Simulator avialable?
//! Simulator avialable (driver available)?
bool isSimulatorAvailable() const { return BlackMisc::CProject::isCompiledWithFlightSimulatorSupport() && !getSimulatorInfo().isUnspecified(); }
//! Simulator paused?
@@ -152,6 +168,9 @@ namespace BlackCore
//! Settings have been changed
virtual void settingsChanged(uint type) = 0;
//! Icon representing the model
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const = 0;
protected:
//! Constructor
IContextSimulator(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : CContext(mode, runtime) {}

View File

@@ -13,6 +13,7 @@
#include "context_application.h"
#include "context_network_impl.h"
#include "context_runtime.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/loghandler.h"
#include <QPluginLoader>
@@ -22,6 +23,7 @@ using namespace BlackMisc;
using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Geo;
using namespace BlackSim;
using namespace BlackSim::Settings;
@@ -97,11 +99,11 @@ namespace BlackCore
return m_simulator->getSimulatorInfo();
}
Network::CAircraftModel CContextSimulator::getOwnAircraftModel() const
Simulation::CAircraftModel CContextSimulator::getOwnAircraftModel() const
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
// If no ISimulator object is available, return a dummy.
if (!m_simulator) { return Network::CAircraftModel(); }
if (!m_simulator) { return Simulation::CAircraftModel(); }
return this->m_simulator->getOwnAircraftModel();
}
@@ -124,13 +126,26 @@ namespace BlackCore
return this->m_simulator->getInstalledModels();
}
CAircraftModelList CContextSimulator::getCurrentlyMatchedModels() const
CSimulatedAircraftList CContextSimulator::getRemoteAircraft() const
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
// If no ISimulator object is available, return a dummy.
if (!m_simulator) { return CAircraftModelList(); }
if (!m_simulator) { return CSimulatedAircraftList(); }
return this->m_simulator->getCurrentlyMatchedModels();
return this->m_simulator->getRemoteAircraft();
}
int CContextSimulator::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!m_simulator) { return 0; }
int c = this->m_simulator->changeRemoteAircraft(changedAircraft, changedValues);
if (c > 0)
{
// really changed something
emit this->remoteAircraftChanged(changedAircraft);
}
return c;
}
void CContextSimulator::setTimeSynchronization(bool enable, CTime offset)
@@ -147,6 +162,20 @@ namespace BlackCore
return this->m_simulator->isTimeSynchronized();
}
int CContextSimulator::getMaxRenderedRemoteAircraft() const
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
if (!m_simulator) return 0;
return 13;
}
void CContextSimulator::setMaxRenderedRemoteAircraft(int number)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
//! \todo implement
Q_UNUSED(number);
}
CTime CContextSimulator::getTimeSynchronizationOffset() const
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
@@ -194,14 +223,17 @@ namespace BlackCore
connect(m_simulator, &ISimulator::simulatorStatusChanged, this, &CContextSimulator::simulatorStatusChanged);
connect(m_simulator, &ISimulator::ownAircraftModelChanged, this, &IContextSimulator::ownAircraftModelChanged);
connect(m_simulator, &ISimulator::modelMatchingCompleted, this, &IContextSimulator::modelMatchingCompleted);
connect(m_simulator, &ISimulator::installedAircraftModelsChanged, this, &IContextSimulator::installedAircraftModelsChanged);
// log
// log from context to simulator
connect(CLogHandler::instance(), &CLogHandler::localMessageLogged, m_simulator, &ISimulator::displayStatusMessage);
connect(CLogHandler::instance(), &CLogHandler::remoteMessageLogged, m_simulator, &ISimulator::displayStatusMessage);
// connect with network
//! \todo using airspace monitor directly is maybe wrong (KB: I think it is). It assumes simulator and network
//! context reside in the same process, which is not guranteed IMHO
CAirspaceMonitor *airspace = this->getRuntime()->getCContextNetwork()->getAirspaceMonitor();
// connect(airspace, &CAirspaceMonitor::addedAircraft, this, &CContextSimulator::ps_addRemoteAircraft);
// use readyForModelMatching instead of CAirspaceMonitor::addedAircraft, as it contains client information
connect(airspace, &CAirspaceMonitor::readyForModelMatching, this, &CContextSimulator::ps_addRemoteAircraft);
connect(airspace, &CAirspaceMonitor::changedAircraftSituation, this, &CContextSimulator::ps_addAircraftSituation);
connect(airspace, &CAirspaceMonitor::removedAircraft, this, &CContextSimulator::ps_removeRemoteAircraft);
@@ -209,7 +241,9 @@ namespace BlackCore
{
Q_ASSERT(!aircraft.getCallsign().isEmpty());
CClient client = airspace->getOtherClients().findFirstByCallsign(aircraft.getCallsign());
m_simulator->addRemoteAircraft(aircraft, client);
CSimulatedAircraft simAircraft(aircraft);
simAircraft.setClient(client);
m_simulator->addRemoteAircraft(simAircraft);
}
// apply latest settings
@@ -257,6 +291,7 @@ namespace BlackCore
if (m_simulator)
{
// depending on shutdown order, network might already have been deleted
//! \todo why do we need to disconnet context when we unload driver?
if (this->getRuntime()->getIContextNetwork()->isUsingImplementingObject())
{
CContextNetwork *network = this->getRuntime()->getCContextNetwork();
@@ -288,16 +323,16 @@ namespace BlackCore
{
// the method will check, if an update is really required
// these are local (non DBus) calls
this->getIContextOwnAircraft()->updateOwnAircraft(contextAircraft, this->getPathAndContextId());
this->getIContextOwnAircraft()->updateAircraft(contextAircraft, this->getPathAndContextId());
}
}
void CContextSimulator::ps_addRemoteAircraft(const CAircraft &remoteAircraft, const CClient &remoteClient)
void CContextSimulator::ps_addRemoteAircraft(const CSimulatedAircraft &remoteAircraft)
{
Q_ASSERT(this->m_simulator);
Q_ASSERT(!remoteAircraft.getCallsign().isEmpty());
if (!this->m_simulator) { return; }
this->m_simulator->addRemoteAircraft(remoteAircraft, remoteClient);
this->m_simulator->addRemoteAircraft(remoteAircraft);
}
void CContextSimulator::ps_addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
@@ -380,13 +415,19 @@ namespace BlackCore
this->m_simulator->setTimeSynchronization(timeSync, syncOffset);
}
CPixmap CContextSimulator::iconForModel(const QString &modelString) const
{
if (!this->m_simulator) { return CPixmap(); }
return this->m_simulator->iconForModel(modelString);
}
bool CContextSimulator::isPaused() const
{
if (!this->m_simulator) return false;
return this->m_simulator->isPaused();
}
bool CContextSimulator::isRunning() const
bool CContextSimulator::isSimulating() const
{
if (!this->m_simulator) return false;
return this->m_simulator->isSimulating();

View File

@@ -15,10 +15,10 @@
#include "blackcore/context_simulator.h"
#include "blackcore/context_network.h"
#include "blackcore/simulator.h"
#include "blacksim/simulatorinfo.h"
#include "blacksim/simulatorinfolist.h"
#include "blackmisc/pixmap.h"
#include "blackmisc/simulation/simulatedaircraftlist.h"
#include <QTimer>
#include <QDir>
#include <QtConcurrent/QtConcurrent>
@@ -62,23 +62,26 @@ namespace BlackCore
//! \copydoc IContextSimulator::isPaused
virtual bool isPaused() const override;
//! \copydoc IContextSimulator::isRunning
virtual bool isRunning() const override;
//! \copydoc IContextSimulator::isSimulating
virtual bool isSimulating() const override;
//! \copydoc IContextSimulator::getSimulatorInfo()
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
//! \copydoc IContextSimulator::getAircraftModel()
virtual BlackMisc::Network::CAircraftModel getOwnAircraftModel() const override;
virtual BlackMisc::Simulation::CAircraftModel getOwnAircraftModel() const override;
//! \copydoc IContextSimulator::getAirportsInRange()
//! \copydoc IContextSimulator::getAirportsInRange
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
//! \copydoc IContextSimulator::getInstalledModels()
virtual BlackMisc::Network::CAircraftModelList getInstalledModels() const override;
//! \copydoc IContextSimulator::getInstalledModels
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override;
//! \copydoc IContextSimulator::getCurrentlyMatchedModels()
virtual BlackMisc::Network::CAircraftModelList getCurrentlyMatchedModels() const override;
//! \copydoc IContextSimulator::getRemoteAircraft
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override;
//! \copydoc IContextSimulator::changeRemoteAircraft
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override;
//! \copydoc IContextSimulator::setTimeSynchronization
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) override;
@@ -86,6 +89,12 @@ namespace BlackCore
//! \copydoc IContextSimulator::isTimeSynchronized
virtual bool isTimeSynchronized() const override;
//! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft
virtual int getMaxRenderedRemoteAircraft() const override;
//! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft
virtual void setMaxRenderedRemoteAircraft(int number) override;
//! \copydoc IContextSimulator::getTimeSynchronizationOffset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;
@@ -101,6 +110,9 @@ namespace BlackCore
//! \copydoc IContextSimulator::settingsChanged
virtual void settingsChanged(uint type) override;
//! \copydoc IContextSimulator::iconForModel
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override;
protected:
//! \brief Constructor
CContextSimulator(CRuntimeConfig::ContextMode, CRuntime *runtime);
@@ -118,8 +130,7 @@ namespace BlackCore
void ps_updateOwnAircraftContext();
//! \copydoc ISimulator::addRemoteAircraft
// void ps_addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation);
void ps_addRemoteAircraft(const BlackMisc::Aviation::CAircraft &remoteAircraft, const BlackMisc::Network::CClient &remoteClient);
void ps_addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft);
//! \copydoc ISimulator::addAircraftSituation
void ps_addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation);

View File

@@ -1,7 +1,11 @@
/* Copyright (C) 2013 VATSIM Community / authors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* 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 and at http://www.swift-project.org/license.html. 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_simulator_proxy.h"
#include <QObject>
@@ -13,6 +17,7 @@ using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Geo;
using namespace BlackMisc::Simulation;
using namespace BlackSim;
namespace BlackCore
@@ -38,11 +43,16 @@ namespace BlackCore
"simulatorStatusChanged", this, SIGNAL(simulatorStatusChanged(bool, bool, bool)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
"ownAircraftModelChanged", this, SIGNAL(ownAircraftModelChanged(BlackMisc::Network::CAircraftModel)));
"installedAircraftModelsChanged", this, SIGNAL(installedAircraftModelsChanged()));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
"modelMatchingCompleted", this, SIGNAL(modelMatchingCompleted(BlackMisc::Network::CAircraftModel)));
"ownAircraftModelChanged", this, SIGNAL(ownAircraftModelChanged(BlackMisc::Simulation::CSimulatedAircraft)));
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(),
"remoteAircraftChanged", this, SIGNAL(remoteAircraftChanged(BlackMisc::Simulation::CSimulatedAircraft)));
Q_ASSERT(s);
Q_UNUSED(s);
}
@@ -77,9 +87,9 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("disconnectFrom"));
}
BlackMisc::Network::CAircraftModel CContextSimulatorProxy::getOwnAircraftModel() const
BlackMisc::Simulation::CAircraftModel CContextSimulatorProxy::getOwnAircraftModel() const
{
return m_dBusInterface->callDBusRet<BlackMisc::Network::CAircraftModel>(QLatin1Literal("getOwnAircraftModel"));
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModel>(QLatin1Literal("getOwnAircraftModel"));
}
CAirportList CContextSimulatorProxy::getAirportsInRange() const
@@ -89,12 +99,17 @@ namespace BlackCore
CAircraftModelList CContextSimulatorProxy::getInstalledModels() const
{
return m_dBusInterface->callDBusRet<BlackMisc::Network::CAircraftModelList>(QLatin1Literal("getInstalledModels"));
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CAircraftModelList>(QLatin1Literal("getInstalledModels"));
}
CAircraftModelList CContextSimulatorProxy::getCurrentlyMatchedModels() const
CSimulatedAircraftList CContextSimulatorProxy::getRemoteAircraft() const
{
return m_dBusInterface->callDBusRet<BlackMisc::Network::CAircraftModelList>(QLatin1Literal("getCurrentlyMatchedModels"));
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatedAircraftList>(QLatin1Literal("getRemoteAircraft"));
}
int CContextSimulatorProxy::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues)
{
return m_dBusInterface->callDBusRet<int>(QLatin1Literal("changeRemoteAircraft"), changedAircraft, changedValues);
}
BlackSim::CSimulatorInfo CContextSimulatorProxy::getSimulatorInfo() const
@@ -112,6 +127,16 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isTimeSynchronized"));
}
void CContextSimulatorProxy::setMaxRenderedRemoteAircraft(int number)
{
m_dBusInterface->callDBus(QLatin1Literal("setMaxRenderedRemoteAircraft"), number);
}
int CContextSimulatorProxy::getMaxRenderedRemoteAircraft() const
{
return m_dBusInterface->callDBusRet<int>(QLatin1Literal("getMaxRenderedRemoteAircraft"));
}
CTime CContextSimulatorProxy::getTimeSynchronizationOffset() const
{
return m_dBusInterface->callDBusRet<BlackMisc::PhysicalQuantities::CTime>(QLatin1Literal("getTimeSynchronizationOffset"));
@@ -137,14 +162,19 @@ namespace BlackCore
m_dBusInterface->callDBus(QLatin1Literal("settingsChanged"), type);
}
CPixmap CContextSimulatorProxy::iconForModel(const QString &modelString) const
{
return m_dBusInterface->callDBusRet<CPixmap>(QLatin1Literal("iconForModel"), modelString);
}
bool CContextSimulatorProxy::isPaused() const
{
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isPaused"));
}
bool CContextSimulatorProxy::isRunning() const
bool CContextSimulatorProxy::isSimulating() const
{
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isRunning"));
}
} // namespace BlackCore
} // namespace

View File

@@ -14,6 +14,7 @@
#include "blackcore/context_simulator.h"
#include "blackmisc/genericdbusinterface.h"
#include "blackmisc/pixmap.h"
namespace BlackCore
{
@@ -61,23 +62,26 @@ namespace BlackCore
//! \copydoc IContextSimulator::disconnectFrom
virtual bool disconnectFrom() override;
//! \copydoc IContextSimulator::isRunning
virtual bool isRunning() const override;
//! \copydoc IContextSimulator::isSimulating
virtual bool isSimulating() const override;
//! \copydoc IContextSimulator::isPaused
virtual bool isPaused() const override;
//! \copydoc IContextSimulator::getAircraftModel()
virtual BlackMisc::Network::CAircraftModel getOwnAircraftModel() const override;
virtual BlackMisc::Simulation::CAircraftModel getOwnAircraftModel() const override;
//! \copydoc IContextSimulator::getAirportsInRange()
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
//! \copydoc IContextSimulator::getInstalledModels()
virtual BlackMisc::Network::CAircraftModelList getInstalledModels() const override;
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override;
//! \copydoc IContextSimulator::getCurrentlyMatchedModels()
virtual BlackMisc::Network::CAircraftModelList getCurrentlyMatchedModels() const override;
//! \copydoc IContextSimulator::getRemoteAircraft
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override;
//! \copydoc IContextSimulator::changeRemoteAircraft
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues) override;
//! \copydoc IContextSimulator::getSimulatorInfo
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;
@@ -88,6 +92,12 @@ namespace BlackCore
//! \copydoc IContextSimulator::isTimeSynchronized
virtual bool isTimeSynchronized() const override;
//! \copydoc IContextSimulator::getMaxRenderedRemoteAircraft
virtual int getMaxRenderedRemoteAircraft() const override;
//! \copydoc IContextSimulator::setMaxRenderedRemoteAircraft
virtual void setMaxRenderedRemoteAircraft(int number) override;
//! \copydoc IContextSimulator::getTimeSynchronizationOffset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;
@@ -103,6 +113,9 @@ namespace BlackCore
//! \copydoc IContextSimulator::settingsChanged
virtual void settingsChanged(uint type) override;
//! \copydoc IContextSimulator::iconForModel
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override;
};
} // namespace BlackCore