mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 12:55:33 +08:00
refs #242, own aircraft context
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "context_application.h"
|
||||
#include "context_audio.h"
|
||||
#include "context_network.h"
|
||||
#include "context_ownaircraft.h"
|
||||
#include "context_settings.h"
|
||||
#include "context_simulator.h"
|
||||
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
#include "context_application_proxy.h"
|
||||
#include "context_audio_proxy.h"
|
||||
#include "context_network_proxy.h"
|
||||
#include "context_ownaircraft_proxy.h"
|
||||
#include "context_settings_proxy.h"
|
||||
#include "context_simulator_proxy.h"
|
||||
|
||||
|
||||
#endif // guard
|
||||
|
||||
74
src/blackcore/context_ownaircraft.h
Normal file
74
src/blackcore/context_ownaircraft.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/* Copyright (C) 2013 VATSIM Community / contributors
|
||||
* 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/. */
|
||||
|
||||
#ifndef BLACKCORE_CONTEXTOWNAIRCRAFT_H
|
||||
#define BLACKCORE_CONTEXTOWNAIRCRAFT_H
|
||||
|
||||
#include "blackcore/context.h"
|
||||
#include "blackmisc/avallclasses.h"
|
||||
#include "blackmisc/statusmessagelist.h"
|
||||
|
||||
#define BLACKCORE_CONTEXTOWNAIRCRAFT_INTERFACENAME "net.vatsim.PilotClient.BlackCore.ContextOwnAircraft"
|
||||
#define BLACKCORE_CONTEXTOWNAIRCRAFT_OBJECTPATH "/OwnAircraft"
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
|
||||
//! \brief Own context proxy
|
||||
class IContextOwnAircraft : public CContext
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTOWNAIRCRAFT_INTERFACENAME)
|
||||
|
||||
public:
|
||||
//! DBus interface name
|
||||
static const QString &InterfaceName()
|
||||
{
|
||||
static QString s(BLACKCORE_CONTEXTOWNAIRCRAFT_INTERFACENAME);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! DBus object path
|
||||
static const QString &ObjectPath()
|
||||
{
|
||||
static QString s(BLACKCORE_CONTEXTOWNAIRCRAFT_OBJECTPATH);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! Destructor
|
||||
virtual ~IContextOwnAircraft() {}
|
||||
|
||||
signals:
|
||||
//! Aircraft situation update
|
||||
void changedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||
|
||||
public slots:
|
||||
|
||||
//! Get own aircraft
|
||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0;
|
||||
|
||||
/*!
|
||||
* Set own aircraft
|
||||
* \param aircraft
|
||||
* \return message list, as aircraft can only be set prior connecting
|
||||
*/
|
||||
virtual BlackMisc::CStatusMessageList setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) = 0;
|
||||
|
||||
//! Own position, be aware height is terrain height
|
||||
virtual void updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) = 0;
|
||||
|
||||
//! Complete situation update
|
||||
virtual void updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0;
|
||||
|
||||
//! Update own cockpit
|
||||
virtual void updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder) = 0;
|
||||
|
||||
protected:
|
||||
//! Constructor
|
||||
IContextOwnAircraft(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : CContext(mode, runtime) {}
|
||||
};
|
||||
}
|
||||
|
||||
#endif // guard
|
||||
130
src/blackcore/context_ownaircraft_impl.cpp
Normal file
130
src/blackcore/context_ownaircraft_impl.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
/* 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/. */
|
||||
|
||||
#include "context_ownaircraft_impl.h"
|
||||
#include "context_runtime.h"
|
||||
#include "context_settings.h"
|
||||
|
||||
|
||||
using namespace BlackMisc;
|
||||
using namespace BlackMisc::PhysicalQuantities;
|
||||
using namespace BlackMisc::Aviation;
|
||||
using namespace BlackMisc::Network;
|
||||
using namespace BlackMisc::Geo;
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
|
||||
/*
|
||||
* Init this context
|
||||
*/
|
||||
CContextOwnAircraft::CContextOwnAircraft(CRuntimeConfig::ContextMode mode, CRuntime *runtime) :
|
||||
IContextOwnAircraft(mode, runtime)
|
||||
{
|
||||
Q_ASSERT(this->getRuntime());
|
||||
Q_ASSERT(this->getRuntime()->getIContextSettings());
|
||||
|
||||
// 1. Init own aircraft
|
||||
this->initOwnAircraft();
|
||||
|
||||
// 2. connect signals and slots
|
||||
}
|
||||
|
||||
/*
|
||||
* Cleanup
|
||||
*/
|
||||
CContextOwnAircraft::~CContextOwnAircraft()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Init own aircraft
|
||||
*/
|
||||
void CContextOwnAircraft::initOwnAircraft()
|
||||
{
|
||||
Q_ASSERT(this->getRuntime());
|
||||
Q_ASSERT(this->getRuntime()->getIContextSettings());
|
||||
this->m_ownAircraft.initComSystems();
|
||||
this->m_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->m_ownAircraft.setSituation(situation);
|
||||
this->m_ownAircraft.setPilot(this->getIContextSettings()->getNetworkSettings().getCurrentTrafficNetworkServer().getUser());
|
||||
|
||||
// TODO: This would need to come from somewhere (mappings)
|
||||
// Own callsign, plane ICAO status, model used
|
||||
this->m_ownAircraft.setCallsign(CCallsign("BLACK"));
|
||||
this->m_ownAircraft.setIcaoInfo(CAircraftIcao("C172", "L1P", "GA", "GA", "0000ff"));
|
||||
}
|
||||
|
||||
/*
|
||||
* Own Aircraft
|
||||
*/
|
||||
CStatusMessageList CContextOwnAircraft::setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft)
|
||||
{
|
||||
this->m_ownAircraft = aircraft;
|
||||
return CStatusMessageList();
|
||||
}
|
||||
|
||||
/*
|
||||
* Own position
|
||||
*/
|
||||
void CContextOwnAircraft::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude)
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, position.toQString(), altitude.toQString());
|
||||
this->m_ownAircraft.setPosition(position);
|
||||
this->m_ownAircraft.setAltitude(altitude);
|
||||
}
|
||||
|
||||
/*
|
||||
* Update own situation
|
||||
*/
|
||||
void CContextOwnAircraft::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation)
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, situation.toQString());
|
||||
this->m_ownAircraft.setSituation(situation);
|
||||
}
|
||||
|
||||
/*
|
||||
* Own cockpit data
|
||||
*/
|
||||
void CContextOwnAircraft::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder)
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, com1.toQString(), com2.toQString(), transponder.toQString());
|
||||
bool changed = false;
|
||||
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) return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Own aircraft
|
||||
*/
|
||||
CAircraft CContextOwnAircraft::getOwnAircraft() const
|
||||
{
|
||||
if (this->getRuntime()->isSlotLogForOwnAircraftEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO, this->m_ownAircraft.toQString());
|
||||
return this->m_ownAircraft;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
67
src/blackcore/context_ownaircraft_impl.h
Normal file
67
src/blackcore/context_ownaircraft_impl.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/* 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/. */
|
||||
|
||||
#ifndef BLACKCORE_CONTEXTOWNAIRCRAFT_IMPL_H
|
||||
#define BLACKCORE_CONTEXTOWNAIRCRAFT_IMPL_H
|
||||
|
||||
#include "blackcore/context_ownaircraft.h"
|
||||
#include "blackcore/context_settings.h"
|
||||
#include "blackcore/context_runtime.h"
|
||||
#include "blackcore/dbus_server.h"
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
|
||||
//! Network context implementation
|
||||
class CContextOwnAircraft : public IContextOwnAircraft
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", BLACKCORE_CONTEXTOWNAIRCRAFT_INTERFACENAME)
|
||||
friend class CRuntime;
|
||||
|
||||
public:
|
||||
//! Destructor
|
||||
virtual ~CContextOwnAircraft();
|
||||
|
||||
public slots: // IContextOwnAircraft overrides
|
||||
|
||||
//! \copydoc IContextOwnAircraft::setOwnAircraft()
|
||||
virtual BlackMisc::CStatusMessageList setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnPosition()
|
||||
virtual void updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnSituation()
|
||||
virtual void updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnCockpit()
|
||||
virtual void updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::getOwnAircraft()
|
||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
|
||||
|
||||
protected:
|
||||
//! Constructor, with link to runtime
|
||||
CContextOwnAircraft(CRuntimeConfig::ContextMode, CRuntime *runtime);
|
||||
|
||||
//! Register myself in DBus
|
||||
CContextOwnAircraft *registerWithDBus(CDBusServer *server)
|
||||
{
|
||||
if (!server || this->m_mode != CRuntimeConfig::LocalInDbusServer) return this;
|
||||
server->addObject(IContextOwnAircraft::ObjectPath(), this);
|
||||
return this;
|
||||
}
|
||||
|
||||
private:
|
||||
BlackMisc::Aviation::CAircraft m_ownAircraft;
|
||||
|
||||
//! Init my very own aircraft
|
||||
void initOwnAircraft();
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif // guard
|
||||
63
src/blackcore/context_ownaircraft_proxy.cpp
Normal file
63
src/blackcore/context_ownaircraft_proxy.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
/* 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/. */
|
||||
|
||||
#include "blackcore/context_ownaircraft_proxy.h"
|
||||
#include <QObject>
|
||||
#include <QMetaEnum>
|
||||
#include <QDBusConnection>
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
|
||||
/*
|
||||
* Constructor for DBus
|
||||
*/
|
||||
CContextOwnAircraftProxy::CContextOwnAircraftProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextOwnAircraft(mode, runtime), m_dBusInterface(nullptr)
|
||||
{
|
||||
this->m_dBusInterface = new BlackMisc::CGenericDBusInterface(
|
||||
serviceName , IContextOwnAircraft::ObjectPath(), IContextOwnAircraft::InterfaceName(),
|
||||
connection, this);
|
||||
this->relaySignals(serviceName, connection);
|
||||
}
|
||||
|
||||
/*
|
||||
* Workaround for signals, not working without, but why?
|
||||
*/
|
||||
void CContextOwnAircraftProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
|
||||
{
|
||||
// bool s; = connection.connect(serviceName, IContextOwnAircraft::ObjectPath(), IContextOwnAircraft::InterfaceName(),
|
||||
// "connectionStatusChanged", this, SIGNAL(connectionStatusChanged(uint, uint, const QString &)));
|
||||
// Q_ASSERT(s);
|
||||
// s = connection.connect(serviceName, IContextOwnAircraft::ObjectPath(), IContextOwnAircraft::InterfaceName(),
|
||||
// "changedAtcStationsBooked", this, SIGNAL(changedAtcStationsBooked()));
|
||||
// Q_ASSERT(s);
|
||||
// Q_UNUSED(s);
|
||||
}
|
||||
|
||||
BlackMisc::Aviation::CAircraft CContextOwnAircraftProxy::getOwnAircraft() const
|
||||
{
|
||||
return this->m_dBusInterface->callDBusRet<BlackMisc::Aviation::CAircraft>(QLatin1Literal("getOwnAircraft"));
|
||||
}
|
||||
|
||||
BlackMisc::CStatusMessageList CContextOwnAircraftProxy::setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft)
|
||||
{
|
||||
return this->m_dBusInterface->callDBusRet<BlackMisc::CStatusMessageList>(QLatin1Literal("setOwnAircraft"), aircraft);
|
||||
}
|
||||
|
||||
void CContextOwnAircraftProxy::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude)
|
||||
{
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnPosition"), position, altitude);
|
||||
}
|
||||
|
||||
void CContextOwnAircraftProxy::updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation)
|
||||
{
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnSituation"), situation);
|
||||
}
|
||||
|
||||
void CContextOwnAircraftProxy::updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder)
|
||||
{
|
||||
this->m_dBusInterface->callDBus(QLatin1Literal("updateOwnCockpit"), com1, com2, transponder);
|
||||
}
|
||||
} // namespace
|
||||
59
src/blackcore/context_ownaircraft_proxy.h
Normal file
59
src/blackcore/context_ownaircraft_proxy.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/* 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/. */
|
||||
|
||||
#ifndef BLACKCORE_OWNAIRCRAFT_PROXY_H
|
||||
#define BLACKCORE_OWNAIRCRAFT_PROXY_H
|
||||
|
||||
#include "blackcore/context_ownaircraft.h"
|
||||
#include "blackmisc/genericdbusinterface.h"
|
||||
#include "blackmisc/avallclasses.h"
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
|
||||
//! \brief Network context proxy
|
||||
class CContextOwnAircraftProxy : public IContextOwnAircraft
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class CRuntime;
|
||||
|
||||
public:
|
||||
|
||||
//! 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::setOwnAircraft()
|
||||
virtual BlackMisc::CStatusMessageList setOwnAircraft(const BlackMisc::Aviation::CAircraft &aircraft) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnPosition()
|
||||
virtual void updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnSituation()
|
||||
virtual void updateOwnSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::updateOwnCockpit()
|
||||
virtual void updateOwnCockpit(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2, const BlackMisc::Aviation::CTransponder &transponder) override;
|
||||
|
||||
//! \copydoc IContextOwnAircraft::getOwnAircraft()
|
||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
|
||||
};
|
||||
}
|
||||
|
||||
#endif // guard
|
||||
Reference in New Issue
Block a user