mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-07 19:35:32 +08:00
refs #375 finish sending of interim positions
Airspace monitor knows all remote aircrafts and which have interim positions enabled. It passes the list of receivers to INetwork and INetwork sends it to FSD.
This commit is contained in:
@@ -59,6 +59,8 @@ namespace BlackCore
|
||||
this->m_atcWatchdog.setTimeout(CTime(50, CTimeUnit::s()));
|
||||
this->connect(&this->m_aircraftWatchdog, &CAirspaceWatchdog::timeout, this, &CAirspaceMonitor::ps_pilotDisconnected);
|
||||
this->connect(&this->m_atcWatchdog, &CAirspaceWatchdog::timeout, this, &CAirspaceMonitor::ps_atcControllerDisconnected);
|
||||
|
||||
this->connect(&m_interimPositionUpdateTimer, &QTimer::timeout, this, &CAirspaceMonitor::ps_sendInterimPosition);
|
||||
}
|
||||
|
||||
const CSimulatedAircraftList &CAirspaceMonitor::remoteAircraft() const
|
||||
@@ -378,6 +380,18 @@ namespace BlackCore
|
||||
}
|
||||
}
|
||||
|
||||
void CAirspaceMonitor::enableFastPositionSending(bool enable)
|
||||
{
|
||||
if (enable) m_interimPositionUpdateTimer.start();
|
||||
else m_interimPositionUpdateTimer.stop();
|
||||
m_sendInterimPositions = enable;
|
||||
}
|
||||
|
||||
bool CAirspaceMonitor::isFastPositionSendingEnabled() const
|
||||
{
|
||||
return m_sendInterimPositions;
|
||||
}
|
||||
|
||||
void CAirspaceMonitor::ps_realNameReplyReceived(const CCallsign &callsign, const QString &realname)
|
||||
{
|
||||
Q_ASSERT(this->m_vatsimDataFileReader);
|
||||
@@ -948,4 +962,12 @@ namespace BlackCore
|
||||
this->m_aircraftWatchdog.resetCallsign(callsign);
|
||||
}
|
||||
|
||||
void CAirspaceMonitor::ps_sendInterimPosition()
|
||||
{
|
||||
Q_ASSERT(BlackCore::isCurrentThreadCreatingThread(this));
|
||||
if (!this->m_connected || !m_sendInterimPositions) { return; }
|
||||
CSimulatedAircraftList aircrafts = m_aircraftInRange.findBy(&CSimulatedAircraft::fastPositionUpdates, true);
|
||||
m_network->sendInterimPosition(aircrafts.getCallsigns());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -131,6 +131,12 @@ namespace BlackCore
|
||||
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot
|
||||
) override;
|
||||
|
||||
//! Is interim position sending enabled?
|
||||
bool isFastPositionSendingEnabled() const;
|
||||
|
||||
//! Enable interim position sending
|
||||
void enableFastPositionSending(bool enable);
|
||||
|
||||
static const qint64 AircraftSituationsRemovedOffsetMs = 30 * 1000; //!< situations older than now - offset will be removed
|
||||
static const qint64 AircraftPartsRemoveOffsetMs = 30* 1000; //!< parts older than now - offset will be removed
|
||||
|
||||
@@ -184,6 +190,9 @@ namespace BlackCore
|
||||
CAirspaceWatchdog m_aircraftWatchdog;
|
||||
bool m_serverSupportsNameQuery = false; //!< not all servers support name query
|
||||
bool m_connected = false; //!< retrieve data
|
||||
bool m_sendInterimPositions = false;
|
||||
|
||||
QTimer m_interimPositionUpdateTimer;
|
||||
|
||||
//! Remove ATC online stations
|
||||
void removeAllOnlineAtcStations();
|
||||
@@ -224,6 +233,8 @@ namespace BlackCore
|
||||
|
||||
//! Send the information if aircraft and(!) client are vailable
|
||||
void ps_sendReadyForModelMatching(const BlackMisc::Aviation::CCallsign &callsign, int trial);
|
||||
|
||||
void ps_sendInterimPosition();
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -554,15 +554,15 @@ namespace BlackCore
|
||||
bool CContextNetwork::isFastPositionSendingEnabled() const
|
||||
{
|
||||
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||
Q_ASSERT(this->m_network);
|
||||
return m_network->isFastPositionSendingEnabled();
|
||||
Q_ASSERT(this->m_airspace);
|
||||
return m_airspace->isFastPositionSendingEnabled();
|
||||
}
|
||||
|
||||
void CContextNetwork::enableFastPositionSending(bool enable)
|
||||
{
|
||||
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << enable; }
|
||||
Q_ASSERT(this->m_network);
|
||||
m_network->enableFastPositionSending(enable);
|
||||
Q_ASSERT(this->m_airspace);
|
||||
m_airspace->enableFastPositionSending(enable);
|
||||
}
|
||||
|
||||
void CContextNetwork::setFastPositionEnabledCallsigns(CCallsignSet &callsigns)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "blackmisc/network/textmessagelist.h"
|
||||
#include "blackmisc/aviation/informationmessage.h"
|
||||
#include "blackmisc/aviation/flightplan.h"
|
||||
#include "blackmisc/aviation/callsignset.h"
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QMap>
|
||||
@@ -198,12 +199,6 @@ namespace BlackCore
|
||||
*/
|
||||
virtual void terminateConnection() = 0;
|
||||
|
||||
//! Is interim position sending enabled?
|
||||
virtual bool isFastPositionSendingEnabled() const = 0;
|
||||
|
||||
//! Enable interim position sending
|
||||
virtual void enableFastPositionSending(bool enable) = 0;
|
||||
|
||||
/*!
|
||||
* Send a ping message to a user with a specific callsign.
|
||||
* \pre Network must be connected when calling this function.
|
||||
@@ -346,6 +341,12 @@ namespace BlackCore
|
||||
*/
|
||||
virtual void sendUserInfoQuery(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||
|
||||
/*!
|
||||
* Send interim position directly to a set of receivers.
|
||||
* \pre Network must be connected when calling this function.
|
||||
*/
|
||||
virtual void sendInterimPosition(const BlackMisc::Aviation::CCallsignSet &receiver) = 0;
|
||||
|
||||
//! @}
|
||||
////////////////////////////////////////////////////////////////
|
||||
//! \name Weather slots
|
||||
|
||||
@@ -417,6 +417,28 @@ namespace BlackCore
|
||||
Vat_SendClientQuery(m_net.data(), vatClientQueryInfo, toFSD(callsign));
|
||||
}
|
||||
|
||||
void CNetworkVatlib::sendInterimPosition(const CCallsignSet &receivers)
|
||||
{
|
||||
Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected");
|
||||
|
||||
if (this->m_loginMode == LoginNormal)
|
||||
{
|
||||
VatInterimPilotPosition pos;
|
||||
// TODO: we need to distinguish true and pressure altitude
|
||||
pos.altitudeTrue = ownAircraft().getAltitude().value(CLengthUnit::ft());
|
||||
pos.heading = ownAircraft().getHeading().value(CAngleUnit::deg());
|
||||
pos.pitch = ownAircraft().getPitch().value(CAngleUnit::deg());
|
||||
pos.bank = ownAircraft().getBank().value(CAngleUnit::deg());
|
||||
pos.latitude = ownAircraft().latitude().value(CAngleUnit::deg());
|
||||
pos.longitude = ownAircraft().longitude().value(CAngleUnit::deg());
|
||||
|
||||
for (const auto &receiver : receivers)
|
||||
{
|
||||
Vat_SendInterimPilotUpdate(m_net.data(), toFSD(receiver), &pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CNetworkVatlib::sendServerQuery(const BlackMisc::Aviation::CCallsign &callsign)
|
||||
{
|
||||
Q_ASSERT_X(isConnected(), "CNetworkVatlib", "Can't send to server when disconnected");
|
||||
@@ -604,16 +626,6 @@ namespace BlackCore
|
||||
sendCustomPacket(callsign, "FSIPI", data);
|
||||
}
|
||||
|
||||
void CNetworkVatlib::enableFastPositionSending(bool enable)
|
||||
{
|
||||
m_sendInterimPositions = enable;
|
||||
}
|
||||
|
||||
bool CNetworkVatlib::isFastPositionSendingEnabled() const
|
||||
{
|
||||
return m_sendInterimPositions;
|
||||
}
|
||||
|
||||
void CNetworkVatlib::broadcastAircraftConfig(const QJsonObject &config)
|
||||
{
|
||||
// Fixme: Use QJsonObject with std::initializer_list once 5.4 is baseline
|
||||
|
||||
@@ -62,8 +62,6 @@ namespace BlackCore
|
||||
virtual void sendCustomFsinnQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual void sendCustomFsinnReponse(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
|
||||
virtual bool isFastPositionSendingEnabled() const override;
|
||||
virtual void enableFastPositionSending(bool enable) override;
|
||||
virtual void broadcastAircraftConfig(const QJsonObject &config) override;
|
||||
virtual void sendAircraftConfigQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
|
||||
@@ -81,6 +79,7 @@ namespace BlackCore
|
||||
virtual void sendIcaoCodesQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual void sendFrequencyQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual void sendUserInfoQuery(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual void sendInterimPosition(const BlackMisc::Aviation::CCallsignSet &receiver) override;
|
||||
|
||||
// Weather slots
|
||||
virtual void sendMetarQuery(const BlackMisc::Aviation::CAirportIcao &airportIcao) override;
|
||||
@@ -167,7 +166,6 @@ namespace BlackCore
|
||||
BlackMisc::Simulation::CSimulatorPluginInfo m_simulatorInfo;
|
||||
BlackMisc::Aviation::CCallsign m_callsign; //!< "buffered callsign", as this must not change when connected
|
||||
BlackMisc::Aviation::CAircraftIcao m_icaoCode; //!< "buffered icao", as this must not change when connected
|
||||
bool m_sendInterimPositions = false; //!< send interim positions
|
||||
|
||||
QTimer m_processingTimer;
|
||||
QTimer m_positionUpdateTimer;
|
||||
|
||||
Reference in New Issue
Block a user