refs #262, fix update of aircraft position

Described here (3): https://dev.vatsim-germany.org/boards/22/topics/1792?r=1801#message-1801

* Also renamed: setOwnAircraftAvionics -> setOwnCockpit to be consistent
* Removed outdated methods
This commit is contained in:
Klaus Basan
2014-06-09 01:33:19 +02:00
parent 8c792a61e3
commit dac556c6e9
18 changed files with 156 additions and 164 deletions

View File

@@ -52,7 +52,7 @@ Client::Client(QObject *parent)
connect(this, &Client::setOwnAircraft, m_net, &INetwork::setOwnAircraft); connect(this, &Client::setOwnAircraft, m_net, &INetwork::setOwnAircraft);
connect(this, &Client::setOwnAircraftPosition, m_net, &INetwork::setOwnAircraftPosition); connect(this, &Client::setOwnAircraftPosition, m_net, &INetwork::setOwnAircraftPosition);
connect(this, &Client::setOwnAircraftSituation, m_net, &INetwork::setOwnAircraftSituation); connect(this, &Client::setOwnAircraftSituation, m_net, &INetwork::setOwnAircraftSituation);
connect(this, &Client::setOwnAircraftAvionics, m_net, &INetwork::setOwnAircraftAvionics); connect(this, &Client::setOwnAircraftCockpit, m_net, &INetwork::setOwnCockpit);
connect(this, &Client::sendPing, m_net, &INetwork::sendPing); connect(this, &Client::sendPing, m_net, &INetwork::sendPing);
connect(this, &Client::sendMetarQuery, m_net, &INetwork::sendMetarQuery); connect(this, &Client::sendMetarQuery, m_net, &INetwork::sendMetarQuery);
connect(this, &Client::sendWeatherDataQuery, m_net, &INetwork::sendWeatherDataQuery); connect(this, &Client::sendWeatherDataQuery, m_net, &INetwork::sendWeatherDataQuery);
@@ -85,7 +85,7 @@ Client::Client(QObject *parent)
m_commands["setaircraft"] = std::bind(&Client::setOwnAircraftCmd, this, _1); m_commands["setaircraft"] = std::bind(&Client::setOwnAircraftCmd, this, _1);
m_commands["setposition"] = std::bind(&Client::setOwnAircraftPositionCmd, this, _1); m_commands["setposition"] = std::bind(&Client::setOwnAircraftPositionCmd, this, _1);
m_commands["setsituation"] = std::bind(&Client::setOwnAircraftSituationCmd, this, _1); m_commands["setsituation"] = std::bind(&Client::setOwnAircraftSituationCmd, this, _1);
m_commands["setavionics"] = std::bind(&Client::setOwnAircraftAvionicsCmd, this, _1); m_commands["setcockpit"] = std::bind(&Client::setOwnAircraftCockpitCmd, this, _1);
m_commands["ping"] = std::bind(&Client::sendPingCmd, this, _1); m_commands["ping"] = std::bind(&Client::sendPingCmd, this, _1);
m_commands["metar"] = std::bind(&Client::sendMetarQueryCmd, this, _1); m_commands["metar"] = std::bind(&Client::sendMetarQueryCmd, this, _1);
m_commands["weather"] = std::bind(&Client::sendWeatherDataQueryCmd, this, _1); m_commands["weather"] = std::bind(&Client::sendWeatherDataQueryCmd, this, _1);
@@ -377,14 +377,14 @@ void Client::setOwnAircraftSituationCmd(QTextStream &args)
)); ));
} }
void Client::setOwnAircraftAvionicsCmd(QTextStream &args) void Client::setOwnAircraftCockpitCmd(QTextStream &args)
{ {
double com1; double com1;
double com2; double com2;
int xpdrCode; int xpdrCode;
QString xpdrMode; QString xpdrMode;
args >> com1 >> com2 >> xpdrCode >> xpdrMode; args >> com1 >> com2 >> xpdrCode >> xpdrMode;
emit setOwnAircraftAvionics( emit setOwnAircraftCockpit(
BlackMisc::Aviation::CComSystem("COM1", BlackMisc::PhysicalQuantities::CFrequency(com1, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())), BlackMisc::Aviation::CComSystem("COM1", BlackMisc::PhysicalQuantities::CFrequency(com1, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())),
BlackMisc::Aviation::CComSystem("COM2", BlackMisc::PhysicalQuantities::CFrequency(com2, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())), BlackMisc::Aviation::CComSystem("COM2", BlackMisc::PhysicalQuantities::CFrequency(com2, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz())),
BlackMisc::Aviation::CTransponder("Transponder", xpdrCode, xpdrMode) BlackMisc::Aviation::CTransponder("Transponder", xpdrCode, xpdrMode)

View File

@@ -52,7 +52,7 @@ private: //commands
void setOwnAircraftCmd(QTextStream &args); void setOwnAircraftCmd(QTextStream &args);
void setOwnAircraftPositionCmd(QTextStream &args); void setOwnAircraftPositionCmd(QTextStream &args);
void setOwnAircraftSituationCmd(QTextStream &args); void setOwnAircraftSituationCmd(QTextStream &args);
void setOwnAircraftAvionicsCmd(QTextStream &args); void setOwnAircraftCockpitCmd(QTextStream &args);
void sendPingCmd(QTextStream &args); void sendPingCmd(QTextStream &args);
void sendMetarQueryCmd(QTextStream &args); void sendMetarQueryCmd(QTextStream &args);
void sendWeatherDataQueryCmd(QTextStream &args); void sendWeatherDataQueryCmd(QTextStream &args);
@@ -81,7 +81,7 @@ signals: //to send to INetwork
void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft); void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft);
void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude); void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude);
void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, void setOwnAircraftCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2,
const BlackMisc::Aviation::CTransponder &xpdr); const BlackMisc::Aviation::CTransponder &xpdr);
void sendPing(const BlackMisc::Aviation::CCallsign &callsign); void sendPing(const BlackMisc::Aviation::CCallsign &callsign);
void sendMetarQuery(const QString &airportICAO); void sendMetarQuery(const QString &airportICAO);

View File

@@ -40,9 +40,6 @@ namespace BlackCore
// 1. Init by "network driver" // 1. Init by "network driver"
this->m_network = new CNetworkVatlib(this); this->m_network = new CNetworkVatlib(this);
// 2. Init own aircraft
this->initOwnAircraft();
// 3. Init VATSIM bookings // 3. Init VATSIM bookings
this->m_vatsimBookingReader = new CVatsimBookingReader(this->getRuntime()->getIContextSettings()->getNetworkSettings().getBookingServiceUrl(), this); this->m_vatsimBookingReader = new CVatsimBookingReader(this->getRuntime()->getIContextSettings()->getNetworkSettings().getBookingServiceUrl(), this);
this->connect(this->m_vatsimBookingReader, &CVatsimBookingReader::dataRead, this, &CContextNetwork::psReceivedBookings); this->connect(this->m_vatsimBookingReader, &CVatsimBookingReader::dataRead, this, &CContextNetwork::psReceivedBookings);
@@ -89,31 +86,6 @@ namespace BlackCore
if (this->isConnected()) this->disconnectFromNetwork(); if (this->isConnected()) this->disconnectFromNetwork();
} }
/*
* Init own aircraft
*/
void CContextNetwork::initOwnAircraft()
{
Q_ASSERT(this->getRuntime());
Q_ASSERT(this->getRuntime()->getIContextSettings());
this->ownAircraft().initComSystems();
this->ownAircraft().initTransponder();
CAircraftSituation situation(
CCoordinateGeodetic(
CLatitude::fromWgs84("N 049° 18' 17"),
CLongitude::fromWgs84("E 008° 27' 05"),
CLength(0, CLengthUnit::m())),
CAltitude(312, CAltitude::MeanSeaLevel, CLengthUnit::ft())
);
this->ownAircraft().setSituation(situation);
this->ownAircraft().setPilot(this->getIContextSettings()->getNetworkSettings().getCurrentTrafficNetworkServer().getUser());
// TODO: This would need to come from somewhere (mappings)
// Own callsign, plane ICAO status, model used
this->ownAircraft().setCallsign(CCallsign("BLACK"));
this->ownAircraft().setIcaoInfo(CAircraftIcao("C172", "L1P", "GA", "GA", "0000ff"));
}
/* /*
* Connect to network * Connect to network
*/ */
@@ -141,12 +113,13 @@ namespace BlackCore
if (CNetworkUtils::canConnect(currentServer, msg, 2000)) if (CNetworkUtils::canConnect(currentServer, msg, 2000))
{ {
INetwork::LoginMode mode = static_cast<INetwork::LoginMode>(loginMode); INetwork::LoginMode mode = static_cast<INetwork::LoginMode>(loginMode);
this->ownAircraft().setPilot(currentServer.getUser()); // still needed? this->getIContextOwnAircraft()->updatePilot(currentServer.getUser(), this->getPathAndContextId());
const CAircraft ownAircraft = this->ownAircraft();
this->m_network->presetServer(currentServer); this->m_network->presetServer(currentServer);
this->m_network->presetLoginMode(mode); this->m_network->presetLoginMode(mode);
this->m_network->presetCallsign(this->ownAircraft().getCallsign()); this->m_network->presetCallsign(ownAircraft.getCallsign());
this->m_network->presetIcaoCodes(this->ownAircraft().getIcaoInfo()); this->m_network->presetIcaoCodes(ownAircraft.getIcaoInfo());
this->m_network->setOwnAircraft(this->ownAircraft()); this->m_network->setOwnAircraft(ownAircraft);
this->m_network->initiateConnection(); this->m_network->initiateConnection();
msg = "Connection pending "; msg = "Connection pending ";
msg.append(" ").append(currentServer.getAddress()).append(" ").append(QString::number(currentServer.getPort())); msg.append(" ").append(currentServer.getAddress()).append(" ").append(QString::number(currentServer.getPort()));
@@ -194,72 +167,6 @@ namespace BlackCore
return this->m_network->isConnected(); return this->m_network->isConnected();
} }
/*
* Own Aircraft
*/
CStatusMessageList CContextNetwork::setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft)
{
if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, aircraft.toQString());
CStatusMessageList msgs;
if (this->m_network->isConnected())
{
msgs.push_back(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityError, "Cannot set aircraft info, network already connected"));
}
else
{
this->ownAircraft() = aircraft;
}
return msgs;
}
/*
* Own position
*/
void CContextNetwork::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude)
{
if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, position.toQString(), altitude.toQString());
this->ownAircraft().setPosition(position);
this->ownAircraft().setAltitude(altitude);
this->m_network->setOwnAircraftPosition(position, altitude);
}
/*
* Update own situation
*/
void CContextNetwork::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation)
{
if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, situation.toQString());
this->ownAircraft().setSituation(situation);
this->m_network->setOwnAircraftSituation(situation);
}
/*
* Own cockpit data
*/
void CContextNetwork::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder)
{
if (this->getRuntime()->isSlotLogForNetworkEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString());
bool changed = false;
if (com1 != this->ownAircraft().getCom1System())
{
this->ownAircraft().setCom1System(com1);
changed = true;
}
if (com2 != this->ownAircraft().getCom2System())
{
this->ownAircraft().setCom2System(com2);
changed = true;
}
if (transponder != this->ownAircraft().getTransponder())
{
this->ownAircraft().setTransponder(transponder);
changed = true;
}
if (!changed) return;
this->m_network->setOwnAircraftAvionics(com1, com2, transponder);
}
/* /*
* Send text messages * Send text messages
*/ */
@@ -602,11 +509,11 @@ namespace BlackCore
return this->getRuntime()->getCContextOwnAircraft()->ownAircraft(); return this->getRuntime()->getCContextOwnAircraft()->ownAircraft();
} }
CAircraft &CContextNetwork::ownAircraft() void CContextNetwork::psChangedOwnAircraft(const CAircraft &aircraft, const QString &originator)
{ {
Q_ASSERT(this->getRuntime()); Q_ASSERT(this->m_network);
Q_ASSERT(this->getRuntime()->getCContextOwnAircraft()); Q_UNUSED(originator);
return this->getRuntime()->getCContextOwnAircraft()->ownAircraft(); this->m_network->setOwnAircraft(aircraft);
} }
} // namespace } // namespace

View File

@@ -35,22 +35,6 @@ namespace BlackCore
//! Destructor //! Destructor
virtual ~CContextNetwork(); virtual ~CContextNetwork();
/*!
* Set own aircraft
* \param aircraft
* \return message list, as aircraft can only be set prior connecting
*/
BlackMisc::CStatusMessageList setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft);
//! Own position, be aware height is terrain height
void updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude);
//! Complete situation update
void updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
//! Update own cockpit
void updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder);
public slots: // IContextNetwork overrides public slots: // IContextNetwork overrides
//! \copydoc IContextNetwork::readAtcBookingsFromSource() //! \copydoc IContextNetwork::readAtcBookingsFromSource()
@@ -163,9 +147,6 @@ namespace BlackCore
//! ATC list, with booked controllers //! ATC list, with booked controllers
BlackMisc::Aviation::CAtcStationList &atcStationsBooked() { return m_atcStationsBooked; } BlackMisc::Aviation::CAtcStationList &atcStationsBooked() { return m_atcStationsBooked; }
//! Init my very own aircraft
void initOwnAircraft();
//! Get network settings //! Get network settings
BlackMisc::Settings::CSettingsNetwork getNetworkSettings() const BlackMisc::Settings::CSettingsNetwork getNetworkSettings() const
{ {
@@ -186,10 +167,10 @@ namespace BlackCore
//! Own aircraft //! Own aircraft
const BlackMisc::Aviation::CAircraft &ownAircraft() const; const BlackMisc::Aviation::CAircraft &ownAircraft() const;
//! Own aircraft
BlackMisc::Aviation::CAircraft &ownAircraft();
private slots: private slots:
//! Own aircraft was updated
void psChangedOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
//! ATC bookings received //! ATC bookings received
void psReceivedBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations); void psReceivedBookings(const BlackMisc::Aviation::CAtcStationList &bookedStations);

View File

@@ -37,10 +37,17 @@ namespace BlackCore
return s; return s;
} }
//! \copydoc CContext::getPathAndContextId()
virtual QString getPathAndContextId() const { return this->buildPathAndContextId(ObjectPath()); }
//! Destructor //! Destructor
virtual ~IContextOwnAircraft() {} virtual ~IContextOwnAircraft() {}
signals: signals:
//! Aircraft changed
//! \remarks local only
void changedAircraft(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
//! Aircraft situation update //! Aircraft situation update
//! \remarks local only //! \remarks local only
void changedAircraftSituation(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); void changedAircraftSituation(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
@@ -50,6 +57,7 @@ namespace BlackCore
void changedAircraftPosition(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); void changedAircraftPosition(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
//! Aircraft cockpit update //! Aircraft cockpit update
//! \remarks DBus and local
void changedAircraftCockpit(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator); void changedAircraftCockpit(const BlackMisc::Aviation::CAircraft &aircraft, const QString &originator);
public slots: public slots:
@@ -69,6 +77,9 @@ namespace BlackCore
//! Update own cockpit //! Update own cockpit
virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) = 0; virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) = 0;
//! Set current pilot
virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) = 0;
//! Output volumens, volumes 0..100 //! Output volumens, volumes 0..100
virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) = 0; virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) = 0;

View File

@@ -99,14 +99,23 @@ namespace BlackCore
// trigger the correct signals // trigger the correct signals
bool changedCockpit = this->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), originator); bool changedCockpit = this->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), originator);
this->updateOwnPosition(aircraft.getPosition(), aircraft.getAltitude() , originator); bool changedPosition = this->updateOwnPosition(aircraft.getPosition(), aircraft.getAltitude() , originator);
this->updateOwnSituation(aircraft.getSituation(), originator); bool changedSituation = this->updateOwnSituation(aircraft.getSituation(), originator);
bool changed = changedCockpit || changedPosition || changedSituation;
// new voice rooms, cockpit has changed
if (changedCockpit) this->resolveVoiceRooms(); if (changedCockpit) this->resolveVoiceRooms();
// all the rest // 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)
{
emit this->changedAircraft(aircraft, originator);
// now set value
this->m_ownAircraft = aircraft; this->m_ownAircraft = aircraft;
} }
}
/* /*
* Own position * Own position
@@ -123,7 +132,11 @@ namespace BlackCore
this->m_ownAircraft.setAltitude(altitude); this->m_ownAircraft.setAltitude(altitude);
} }
if (changed) emit this->changedAircraftPosition(this->m_ownAircraft, originator); if (changed)
{
emit this->changedAircraftPosition(this->m_ownAircraft, originator);
emit this->changedAircraft(this->m_ownAircraft, originator);
}
return changed; return changed;
} }
@@ -136,8 +149,12 @@ namespace BlackCore
bool changed = this->m_ownAircraft.getSituation() == situation; bool changed = this->m_ownAircraft.getSituation() == situation;
if (!changed) return changed; if (!changed) return changed;
if (changed)
{
this->m_ownAircraft.setSituation(situation); this->m_ownAircraft.setSituation(situation);
emit this->changedAircraftSituation(this->m_ownAircraft, originator); emit this->changedAircraftSituation(this->m_ownAircraft, originator);
emit this->changedAircraft(this->m_ownAircraft, originator);
}
return changed; return changed;
} }
@@ -147,30 +164,25 @@ namespace BlackCore
bool CContextOwnAircraft::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) bool CContextOwnAircraft::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator)
{ {
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString()); if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString());
bool changed = false; bool changed = this->m_ownAircraft.hasChangedCockpitData(com1, com2, transponder);
if (com1 != this->m_ownAircraft.getCom1System())
{
this->m_ownAircraft.setCom1System(com1);
changed = true;
}
if (com2 != this->m_ownAircraft.getCom2System())
{
this->m_ownAircraft.setCom2System(com2);
changed = true;
}
if (transponder != this->m_ownAircraft.getTransponder())
{
this->m_ownAircraft.setTransponder(transponder);
changed = true;
}
if (changed) if (changed)
{ {
this->m_ownAircraft.setCockpit(com1, com2, transponder);
emit this->changedAircraftCockpit(this->m_ownAircraft, originator); emit this->changedAircraftCockpit(this->m_ownAircraft, originator);
emit this->changedAircraft(this->m_ownAircraft, originator);
this->resolveVoiceRooms(); this->resolveVoiceRooms();
} }
return changed; return changed;
} }
bool CContextOwnAircraft::updatePilot(const CUser &pilot, const QString &originator)
{
if (this->m_ownAircraft.getPilot() == pilot) return false;
this->m_ownAircraft.setPilot(pilot);
emit this->changedAircraft(this->m_ownAircraft, originator);
return true;
}
void CContextOwnAircraft::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) void CContextOwnAircraft::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2)
{ {
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, QString::number(outputVolumeCom1), QString::number(outputVolumeCom2)); if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, QString::number(outputVolumeCom1), QString::number(outputVolumeCom2));

View File

@@ -48,6 +48,9 @@ namespace BlackCore
//! \copydoc IContextOwnAircraft::updateOwnCockpit() //! \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; virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updatePilot()
virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) override;
//! \copydoc IContextOwnAircraft::setAudioOutputVolumes //! \copydoc IContextOwnAircraft::setAudioOutputVolumes
virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override; virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override;
@@ -80,7 +83,7 @@ namespace BlackCore
QString m_voiceRoom1UrlOverride; //!< overridden voice room url QString m_voiceRoom1UrlOverride; //!< overridden voice room url
QString m_voiceRoom2UrlOverride; //!< overridden voice room url QString m_voiceRoom2UrlOverride; //!< overridden voice room url
//! Init my very own aircraft //! Init my very own aircraft with some defaults, before overridden by simulator
void initOwnAircraft(); void initOwnAircraft();
//! Resolve voice rooms //! Resolve voice rooms

View File

@@ -58,6 +58,11 @@ namespace BlackCore
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateOwnCockpit"), com1, com2, transponder, originator); return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updateOwnCockpit"), com1, com2, transponder, originator);
} }
bool CContextOwnAircraftProxy::updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator)
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("updatePilot"), pilot, originator);
}
void CContextOwnAircraftProxy::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) void CContextOwnAircraftProxy::setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2)
{ {
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnCockpitOutputVolumes"), outputVolumeCom1, outputVolumeCom2); this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnCockpitOutputVolumes"), outputVolumeCom1, outputVolumeCom2);

View File

@@ -52,7 +52,10 @@ namespace BlackCore
virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override; virtual bool updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updateOwnCockpit() //! \copydoc IContextOwnAircraft::updateOwnCockpit()
virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originato4) override; virtual bool updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder, const QString &originator) override;
//! \copydoc IContextOwnAircraft::updatePilot()
virtual bool updatePilot(const BlackMisc::Network::CUser &pilot, const QString &originator) override;
//! \copydoc IContextOwnAircraft::setAudioOutputVolumes //! \copydoc IContextOwnAircraft::setAudioOutputVolumes
virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override; virtual void setAudioOutputVolumes(int outputVolumeCom1, int outputVolumeCom2) override;

View File

@@ -472,6 +472,11 @@ namespace BlackCore
c = this->connect(this->m_contextNetwork, &IContextNetwork::changedAtcStationOnlineConnectionStatus, c = this->connect(this->m_contextNetwork, &IContextNetwork::changedAtcStationOnlineConnectionStatus,
this->getCContextOwnAircraft(), &CContextOwnAircraft::changedAtcStationOnlineConnectionStatus); this->getCContextOwnAircraft(), &CContextOwnAircraft::changedAtcStationOnlineConnectionStatus);
Q_ASSERT(c); Q_ASSERT(c);
// inject updated own aircraft to network
c = this->connect(this->m_contextOwnAircraft, &IContextOwnAircraft::changedAircraft,
this->getCContextNetwork(), &CContextNetwork::psChangedOwnAircraft);
Q_ASSERT(c);
} }
} }
@@ -647,6 +652,20 @@ namespace BlackCore
return static_cast<CContextApplication *>(this->m_contextApplication); return static_cast<CContextApplication *>(this->m_contextApplication);
} }
CContextNetwork *CRuntime::getCContextNetwork()
{
Q_ASSERT_X(!this->m_contextApplication || this->m_contextNetwork->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object");
return static_cast<CContextNetwork *>(this->m_contextNetwork);
}
const CContextNetwork *CRuntime::getCContextNetwork() const
{
Q_ASSERT_X(!this->m_contextApplication || this->m_contextNetwork->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object");
return static_cast<CContextNetwork *>(this->m_contextNetwork);
}
CContextOwnAircraft *CRuntime::getCContextOwnAircraft() CContextOwnAircraft *CRuntime::getCContextOwnAircraft()
{ {
Q_ASSERT_X(!this->m_contextOwnAircraft || this->m_contextOwnAircraft->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object"); Q_ASSERT_X(!this->m_contextOwnAircraft || this->m_contextOwnAircraft->usingLocalObjects(), "CCoreRuntime", "Cannot downcast to local object");

View File

@@ -176,6 +176,14 @@ namespace BlackCore
//! \remarks only applicable for local object //! \remarks only applicable for local object
const CContextOwnAircraft *getCContextOwnAircraft() const; const CContextOwnAircraft *getCContextOwnAircraft() const;
//! Context for network
//! \remarks only applicable for local object
CContextNetwork *getCContextNetwork();
//! Context for network
//! \remarks only applicable for local object
const CContextNetwork *getCContextNetwork() const;
//! Context for simulator //! Context for simulator
//! \remarks only applicable for local object //! \remarks only applicable for local object
CContextSimulator *getCContextSimulator(); CContextSimulator *getCContextSimulator();

View File

@@ -124,12 +124,16 @@ namespace BlackCore
void CContextSimulator::updateOwnAircraft() void CContextSimulator::updateOwnAircraft()
{ {
Q_ASSERT(this->getIContextOwnAircraft()); Q_ASSERT(this->getIContextOwnAircraft());
CAircraft aircraft = m_simulator->getOwnAircraft();
// the methods will check, if an update is really required // we make sure not to override values we do not have
CAircraft aircraft = this->getIContextOwnAircraft()->getOwnAircraft();
CAircraft simulatorAircraft = this->m_simulator->getOwnAircraft();
aircraft.setSituation(simulatorAircraft.getSituation());
aircraft.setCockpit(simulatorAircraft.getCom1System(), simulatorAircraft.getCom2System(), simulatorAircraft.getTransponderCode());
// the method will check, if an update is really required
// these are local (non DBus) calls // these are local (non DBus) calls
this->getIContextOwnAircraft()->updateOwnSituation(aircraft.getSituation(), IContextSimulator::InterfaceName()); this->getIContextOwnAircraft()->updateOwnAircraft(aircraft, this->getPathAndContextId());
this->getIContextOwnAircraft()->updateOwnCockpit(aircraft.getCom1System(), aircraft.getCom2System(), aircraft.getTransponder(), IContextSimulator::InterfaceName());
} }
void CContextSimulator::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &initialSituation) void CContextSimulator::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &initialSituation)

View File

@@ -295,18 +295,21 @@ namespace BlackCore
/*! /*!
* Set the position and altitude of our own aircraft. * Set the position and altitude of our own aircraft.
* \deprecated No longer needed with own aircraft context, only used in client sample
*/ */
virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0; virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0;
/*! /*!
* Set the position, altitude, orientation, and miscellaneous state of our own aircraft. * Set the position, altitude, orientation, and miscellaneous state of our own aircraft.
* \deprecated No longer needed with own aircraft context, only used in client sample
*/ */
virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0; virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0;
/*! /*!
* Set the COM frequencies and transponder code and mode of our own aircraft. * Set the COM frequencies and transponder code and mode of our own aircraft.
* \deprecated No longer needed with own aircraft context, only used in client sample
*/ */
virtual void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, virtual void setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2,
const BlackMisc::Aviation::CTransponder &transponder) = 0; const BlackMisc::Aviation::CTransponder &transponder) = 0;
//! @} //! @}

View File

@@ -496,7 +496,7 @@ namespace BlackCore
m_ownAircraft.setSituation(situation); m_ownAircraft.setSituation(situation);
} }
void CNetworkVatlib::setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, void CNetworkVatlib::setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2,
const BlackMisc::Aviation::CTransponder &xpdr) const BlackMisc::Aviation::CTransponder &xpdr)
{ {
m_ownAircraft.setCom1System(com1); m_ownAircraft.setCom1System(com1);

View File

@@ -70,7 +70,7 @@ namespace BlackCore
virtual void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) override; virtual void setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) override;
virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) override; virtual void setOwnAircraftPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) override;
virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; virtual void setOwnAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
virtual void setOwnAircraftAvionics(const BlackMisc::Aviation::CComSystem &com1, virtual void setOwnCockpit(const BlackMisc::Aviation::CComSystem &com1,
const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CComSystem &com2,
const BlackMisc::Aviation::CTransponder &xpdr) override; const BlackMisc::Aviation::CTransponder &xpdr) override;

View File

@@ -56,6 +56,33 @@ namespace BlackMisc
} }
/* /*
* Set cockpit data
*/
void CAircraft::setCockpit(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder)
{
this->setCom1System(com1);
this->setCom2System(com2);
this->setTransponder(transponder);
}
/*
* Set cockpit data
*/
void CAircraft::setCockpit(const CComSystem &com1, const CComSystem &com2, qint32 transponderCode)
{
this->setCom1System(com1);
this->setCom2System(com2);
this->m_transponder.setTransponderCode(transponderCode);
}
/*
* Changed data
*/
bool CAircraft::hasChangedCockpitData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) const
{
return this->getCom1System() != com1 || this->getCom2System() != com2 || this->getTransponder() != transponder;
}
* Same COM system data * Same COM system data
*/ */
bool CAircraft::hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) bool CAircraft::hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder)

View File

@@ -141,6 +141,15 @@ namespace BlackMisc
//! Set COM2 system //! Set COM2 system
void setCom2System(const CComSystem &comSystem) { this->m_com2system = comSystem; } void setCom2System(const CComSystem &comSystem) { this->m_com2system = comSystem; }
//! Cockpit data
void setCockpit(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder);
//! Cockpit data
void setCockpit(const CComSystem &com1, const CComSystem &com2, qint32 transponderCode);
//! Changed cockpit data?
bool hasChangedCockpitData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder) const;
//! Identical COM system? //! Identical COM system?
bool hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder); bool hasSameComData(const CComSystem &com1, const CComSystem &com2, const CTransponder &transponder);