mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 16:56:53 +08:00
Ref T259, Ref T243 created an implementation for remote aircraft provider
* this implementation is used by airspace monitor * also used by dummy provider (advantage, unit tests test the real provider) * some functions adjusted
This commit is contained in:
@@ -10,13 +10,6 @@
|
||||
#include "blackmisc/aviation/callsign.h"
|
||||
#include "blackmisc/geo/elevationplane.h"
|
||||
#include "blackmisc/simulation/remoteaircraftproviderdummy.h"
|
||||
#include "blackmisc/collection.h"
|
||||
#include "blackmisc/compare.h"
|
||||
#include "blackmisc/dictionary.h"
|
||||
#include "blackmisc/propertyindexvariantmap.h"
|
||||
#include "blackmisc/variant.h"
|
||||
#include <QTimer>
|
||||
#include <QHash>
|
||||
|
||||
using namespace BlackMisc::Aviation;
|
||||
using namespace BlackMisc::Geo;
|
||||
@@ -25,227 +18,38 @@ namespace BlackMisc
|
||||
{
|
||||
namespace Simulation
|
||||
{
|
||||
CRemoteAircraftProviderDummy::CRemoteAircraftProviderDummy(QObject *parent) : QObject(parent)
|
||||
CRemoteAircraftProviderDummy::CRemoteAircraftProviderDummy(QObject *parent) : CRemoteAircraftProvider(parent)
|
||||
{ }
|
||||
|
||||
CSimulatedAircraftList CRemoteAircraftProviderDummy::getAircraftInRange() const
|
||||
{
|
||||
return m_aircraft;
|
||||
}
|
||||
|
||||
int CRemoteAircraftProviderDummy::getAircraftInRangeCount() const
|
||||
{
|
||||
return m_aircraft.size();
|
||||
}
|
||||
|
||||
CCallsignSet CRemoteAircraftProviderDummy::getAircraftInRangeCallsigns() const
|
||||
{
|
||||
return m_aircraft.getCallsigns();
|
||||
}
|
||||
|
||||
CSimulatedAircraft CRemoteAircraftProviderDummy::getAircraftInRangeForCallsign(const CCallsign &callsign) const
|
||||
{
|
||||
return m_aircraft.findFirstByCallsign(callsign);
|
||||
}
|
||||
|
||||
CAircraftModel CRemoteAircraftProviderDummy::getAircraftInRangeModelForCallsign(const CCallsign &callsign) const
|
||||
{
|
||||
return getAircraftInRangeForCallsign(callsign).getModel();
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isAircraftInRange(const CCallsign &callsign) const
|
||||
{
|
||||
return m_aircraft.containsCallsign(callsign);
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isVtolAircraft(const CCallsign &callsign) const
|
||||
{
|
||||
return m_aircraft.findFirstByCallsign(callsign).isVtol();
|
||||
}
|
||||
|
||||
CAirspaceAircraftSnapshot CRemoteAircraftProviderDummy::getLatestAirspaceAircraftSnapshot() const
|
||||
{
|
||||
return CAirspaceAircraftSnapshot(m_aircraft);
|
||||
}
|
||||
|
||||
CAircraftPartsList CRemoteAircraftProviderDummy::remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const
|
||||
{
|
||||
if (cutoffTimeBefore < 0) { return m_parts.value(callsign); }
|
||||
return m_parts.value(callsign).findBefore(cutoffTimeBefore);
|
||||
}
|
||||
|
||||
int CRemoteAircraftProviderDummy::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const
|
||||
{
|
||||
return this->remoteAircraftParts(callsign, cutoffTimeBefore).size();
|
||||
}
|
||||
|
||||
CAircraftSituationList CRemoteAircraftProviderDummy::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
|
||||
{
|
||||
return m_situations.findByCallsign(callsign);
|
||||
}
|
||||
|
||||
int CRemoteAircraftProviderDummy::remoteAircraftSituationsCount(const CCallsign &callsign) const
|
||||
{
|
||||
return remoteAircraftSituations(callsign).size();
|
||||
}
|
||||
|
||||
int CRemoteAircraftProviderDummy::getRemoteAircraftSupportingPartsCount() const
|
||||
{
|
||||
return m_parts.keys().size();
|
||||
}
|
||||
|
||||
CCallsignSet CRemoteAircraftProviderDummy::remoteAircraftSupportingParts() const
|
||||
{
|
||||
return CCollection<CCallsign>(m_parts.keys());
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
|
||||
{
|
||||
return remoteAircraftParts(callsign).size() > 0;
|
||||
}
|
||||
|
||||
QList<QMetaObject::Connection> CRemoteAircraftProviderDummy::connectRemoteAircraftProviderSignals(
|
||||
QObject *receiver,
|
||||
std::function<void (const CAircraftSituation &)> situationSlot,
|
||||
std::function<void (const BlackMisc::Aviation::CCallsign &, const CAircraftParts &)> partsSlot,
|
||||
std::function<void (const CCallsign &)> removedAircraftSlot,
|
||||
std::function<void (const CAirspaceAircraftSnapshot &)> aircraftSnapshotSlot
|
||||
)
|
||||
{
|
||||
Q_ASSERT_X(receiver, Q_FUNC_INFO, "Missing receiver");
|
||||
QList<QMetaObject::Connection> c(
|
||||
{
|
||||
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, receiver, situationSlot),
|
||||
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, receiver, partsSlot),
|
||||
connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, receiver, removedAircraftSlot),
|
||||
connect(this, &CRemoteAircraftProviderDummy::airspaceAircraftSnapshot, receiver, aircraftSnapshotSlot)
|
||||
});
|
||||
return c;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering)
|
||||
{
|
||||
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexEnabled, CVariant::fromValue(enabledForRendering));
|
||||
const int n = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateAircraftModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
|
||||
{
|
||||
Q_UNUSED(originator);
|
||||
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model));
|
||||
const int n = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateAircraftNetworkModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
|
||||
{
|
||||
Q_UNUSED(originator);
|
||||
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexNetworkModel, CVariant::from(model));
|
||||
const int n = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionUpdates)
|
||||
{
|
||||
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexFastPositionUpdates, CVariant::fromValue(enableFastPositionUpdates));
|
||||
const int n = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateAircraftRendered(const CCallsign &callsign, bool rendered)
|
||||
{
|
||||
CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexRendered, CVariant::fromValue(rendered));
|
||||
const int n = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation)
|
||||
{
|
||||
CPropertyIndexVariantMap vm({ CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundElevationPlane }, CVariant::fromValue(elevation));
|
||||
const int c = m_aircraft.applyIfCallsign(callsign, vm);
|
||||
return c > 0;
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::updateMarkAllAsNotRendered()
|
||||
{
|
||||
m_aircraft.markAllAsNotRendered();
|
||||
}
|
||||
|
||||
CStatusMessageList CRemoteAircraftProviderDummy::getReverseLookupMessages(const CCallsign &callsign) const
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
return CStatusMessageList();
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isReverseLookupMessagesEnabled() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::enableReverseLookupMessages(bool enabled)
|
||||
{
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
|
||||
CStatusMessageList CRemoteAircraftProviderDummy::getAircraftPartsHistory(const CCallsign &callsign) const
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
return CStatusMessageList();
|
||||
}
|
||||
|
||||
bool CRemoteAircraftProviderDummy::isAircraftPartsHistoryEnabled() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::enableAircraftPartsHistory(bool enabled)
|
||||
{
|
||||
Q_UNUSED(enabled);
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
m_situations.push_frontKeepLatestAdjustedFirst(situation);
|
||||
emit addedRemoteAircraftSituation(situation);
|
||||
this->storeAircraftSituation(situation);
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::insertNewSituations(const CAircraftSituationList &situations)
|
||||
{
|
||||
for (const CAircraftSituation &situation : situations)
|
||||
{
|
||||
m_situations.push_frontKeepLatestAdjustedFirst(situation);
|
||||
QTimer::singleShot(0, this, [ = ]
|
||||
{
|
||||
emit this->addedRemoteAircraftSituation(situation);
|
||||
});
|
||||
this->storeAircraftSituation(situation);
|
||||
}
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftParts &parts)
|
||||
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftParts &parts, bool removeOutdatedParts)
|
||||
{
|
||||
m_parts[callsign].push_frontKeepLatestAdjustedFirst(parts);
|
||||
emit addedRemoteAircraftParts(callsign, parts);
|
||||
this->storeAircraftParts(callsign, parts, removeOutdatedParts);
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftPartsList &partsList)
|
||||
void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftPartsList &partsList, bool removeOutdatedParts)
|
||||
{
|
||||
CAircraftPartsList &pl = m_parts[callsign];
|
||||
for (const CAircraftParts &parts : partsList)
|
||||
{
|
||||
pl.push_frontKeepLatestAdjustedFirst(parts);
|
||||
QTimer::singleShot(0, this, [ = ]
|
||||
{
|
||||
emit this->addedRemoteAircraftParts(callsign, parts);
|
||||
});
|
||||
this->storeAircraftParts(callsign, parts, removeOutdatedParts);
|
||||
}
|
||||
}
|
||||
|
||||
void CRemoteAircraftProviderDummy::clear()
|
||||
CAirspaceAircraftSnapshot CRemoteAircraftProviderDummy::getLatestAirspaceAircraftSnapshot() const
|
||||
{
|
||||
m_situations.clear();
|
||||
m_parts.clear();
|
||||
m_aircraft.clear();
|
||||
return CAirspaceAircraftSnapshot();
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user