Issue #94 Add server capability flag for VISUPDATE

This commit is contained in:
Mat Sutcliffe
2021-10-11 18:42:02 +01:00
parent 3f57c66784
commit a583ac056c
10 changed files with 29 additions and 9 deletions

View File

@@ -290,7 +290,7 @@ namespace BlackCore::Context
} }
m_fsdClient->setClientIdAndKey(static_cast<quint16>(clientId), clientKey.toLocal8Bit()); m_fsdClient->setClientIdAndKey(static_cast<quint16>(clientId), clientKey.toLocal8Bit());
m_fsdClient->setClientCapabilities(Capabilities::AircraftInfo | Capabilities::FastPos | Capabilities::AtcInfo | Capabilities::AircraftConfig); m_fsdClient->setClientCapabilities(Capabilities::AircraftInfo | Capabilities::FastPos | Capabilities::VisPos | Capabilities::AtcInfo | Capabilities::AircraftConfig);
m_fsdClient->setServer(server); m_fsdClient->setServer(server);
m_fsdClient->setPilotRating(PilotRating::Student); m_fsdClient->setPilotRating(PilotRating::Student);

View File

@@ -166,11 +166,14 @@ namespace BlackCore::Fsd
/*! Can send/receive fast position updates (pilot only). */ /*! Can send/receive fast position updates (pilot only). */
FastPos = (1 << 6), FastPos = (1 << 6),
/*! Can send/receive visual position updates (pilot only). */
VisPos = (1 << 7),
/*! Stealth mode */ /*! Stealth mode */
Stealth = (1 << 7), Stealth = (1 << 8),
/*! Aircraft Config */ /*! Aircraft Config */
AircraftConfig = (1 << 8) AircraftConfig = (1 << 9)
}; };
//! Operators //! Operators

View File

@@ -854,6 +854,7 @@ namespace BlackCore::Fsd
if (m_capabilities & Capabilities::OngoingCoord) responseData.push_back(toQString(Capabilities::OngoingCoord) % "=1"); if (m_capabilities & Capabilities::OngoingCoord) responseData.push_back(toQString(Capabilities::OngoingCoord) % "=1");
if (m_capabilities & Capabilities::InterminPos) responseData.push_back(toQString(Capabilities::InterminPos) % "=1"); if (m_capabilities & Capabilities::InterminPos) responseData.push_back(toQString(Capabilities::InterminPos) % "=1");
if (m_capabilities & Capabilities::FastPos) responseData.push_back(toQString(Capabilities::FastPos) % "=1"); if (m_capabilities & Capabilities::FastPos) responseData.push_back(toQString(Capabilities::FastPos) % "=1");
if (m_capabilities & Capabilities::VisPos) responseData.push_back(toQString(Capabilities::VisPos) % "=1");
if (m_capabilities & Capabilities::Stealth) responseData.push_back(toQString(Capabilities::Stealth) % "=1"); if (m_capabilities & Capabilities::Stealth) responseData.push_back(toQString(Capabilities::Stealth) % "=1");
if (m_capabilities & Capabilities::AircraftConfig) responseData.push_back(toQString(Capabilities::AircraftConfig) % "=1"); if (m_capabilities & Capabilities::AircraftConfig) responseData.push_back(toQString(Capabilities::AircraftConfig) % "=1");
const ClientResponse clientResponse(ownCallsign, receiver, ClientQueryType::Capabilities, responseData); const ClientResponse clientResponse(ownCallsign, receiver, ClientQueryType::Capabilities, responseData);
@@ -1390,6 +1391,7 @@ namespace BlackCore::Fsd
CClient::Capabilities caps = CClient::None; CClient::Capabilities caps = CClient::None;
if (capabilities & Capabilities::AtcInfo) { caps |= CClient::FsdAtisCanBeReceived; } if (capabilities & Capabilities::AtcInfo) { caps |= CClient::FsdAtisCanBeReceived; }
if (capabilities & Capabilities::FastPos) { caps |= CClient::FsdWithInterimPositions; } if (capabilities & Capabilities::FastPos) { caps |= CClient::FsdWithInterimPositions; }
if (capabilities & Capabilities::VisPos) { caps |= CClient::FsdWithVisualPositions; }
if (capabilities & Capabilities::AircraftInfo) { caps |= CClient::FsdWithIcaoCodes; } if (capabilities & Capabilities::AircraftInfo) { caps |= CClient::FsdWithIcaoCodes; }
if (capabilities & Capabilities::AircraftConfig) { caps |= CClient::FsdWithAircraftConfig; } if (capabilities & Capabilities::AircraftConfig) { caps |= CClient::FsdWithAircraftConfig; }
@@ -1782,6 +1784,12 @@ namespace BlackCore::Fsd
return (d & CFsdSetup::ReceiveInterimPositions); return (d & CFsdSetup::ReceiveInterimPositions);
} }
bool CFSDClient::isVisualPositionSendingEnabledForServer() const
{
const CFsdSetup::SendReceiveDetails d = this->getSetupForServer().getSendReceiveDetails();
return (d & CFsdSetup::SendVisualPositions);
}
const CFsdSetup &CFSDClient::getSetupForServer() const const CFsdSetup &CFSDClient::getSetupForServer() const
{ {
return m_server.getFsdSetup(); return m_server.getFsdSetup();

View File

@@ -416,6 +416,7 @@ namespace BlackCore::Fsd
bool isInterimPositionSendingEnabledForServer() const; bool isInterimPositionSendingEnabledForServer() const;
bool isInterimPositionReceivingEnabledForServer() const; bool isInterimPositionReceivingEnabledForServer() const;
bool isVisualPositionSendingEnabledForServer() const;
const BlackMisc::Network::CFsdSetup &getSetupForServer() const; const BlackMisc::Network::CFsdSetup &getSetupForServer() const;
//! Handles ATIS replies from non-VATSIM servers. If the conditions are not met, //! Handles ATIS replies from non-VATSIM servers. If the conditions are not met,

View File

@@ -407,6 +407,7 @@ namespace BlackCore::Fsd
case Capabilities::AircraftInfo: return "MODELDESC"; case Capabilities::AircraftInfo: return "MODELDESC";
case Capabilities::OngoingCoord: return "ONGOINGCOORD"; case Capabilities::OngoingCoord: return "ONGOINGCOORD";
case Capabilities::InterminPos: return "INTERIMPOS"; case Capabilities::InterminPos: return "INTERIMPOS";
case Capabilities::VisPos: return "VISUPDATE";
case Capabilities::FastPos: return "FASTPOS"; case Capabilities::FastPos: return "FASTPOS";
case Capabilities::Stealth: return "STEALTH"; case Capabilities::Stealth: return "STEALTH";
case Capabilities::AircraftConfig: return "ACCONFIG"; case Capabilities::AircraftConfig: return "ACCONFIG";
@@ -424,6 +425,7 @@ namespace BlackCore::Fsd
else if (str == "ONGOINGCOORD") return Capabilities::OngoingCoord; else if (str == "ONGOINGCOORD") return Capabilities::OngoingCoord;
else if (str == "INTERIMPOS") return Capabilities::InterminPos; else if (str == "INTERIMPOS") return Capabilities::InterminPos;
else if (str == "FASTPOS") return Capabilities::FastPos; else if (str == "FASTPOS") return Capabilities::FastPos;
else if (str == "VISUPDATE") return Capabilities::VisPos;
else if (str == "STEALTH") return Capabilities::Stealth; else if (str == "STEALTH") return Capabilities::Stealth;
else if (str == "ACCONFIG") return Capabilities::AircraftConfig; else if (str == "ACCONFIG") return Capabilities::AircraftConfig;

View File

@@ -40,6 +40,7 @@ namespace BlackGui::Editors
ui->cb_AircraftPartsSend->isChecked(), ui->cb_AircraftPartsReceive->isChecked(), ui->cb_AircraftPartsSend->isChecked(), ui->cb_AircraftPartsReceive->isChecked(),
ui->cb_GndFlagSend->isChecked(), ui->cb_GndFlagReceive->isChecked(), ui->cb_GndFlagSend->isChecked(), ui->cb_GndFlagReceive->isChecked(),
ui->cb_FastPositionSend->isChecked(), ui->cb_FastPositionReceive->isChecked(), ui->cb_FastPositionSend->isChecked(), ui->cb_FastPositionReceive->isChecked(),
false, //! \todo GUI for visual position updates
ui->cb_EuroscopeSimData->isChecked() ui->cb_EuroscopeSimData->isChecked()
); );
s.setForce3LetterAirlineCodes(ui->cb_3LetterAirlineICAO->isChecked()); s.setForce3LetterAirlineCodes(ui->cb_3LetterAirlineICAO->isChecked());

View File

@@ -67,6 +67,7 @@ namespace BlackMisc::Network
if (cap.testFlag(FsdWithAircraftConfig)) sl << "aircraft config"; if (cap.testFlag(FsdWithAircraftConfig)) sl << "aircraft config";
if (cap.testFlag(FsdWithGroundFlag)) sl << "gnd.flag"; if (cap.testFlag(FsdWithGroundFlag)) sl << "gnd.flag";
if (cap.testFlag(FsdModelString)) sl << "modelstring"; if (cap.testFlag(FsdModelString)) sl << "modelstring";
if (cap.testFlag(FsdWithVisualPositions)) sl << "visual pos.";
if (sl.isEmpty()) { return {}; } if (sl.isEmpty()) { return {}; }
return sl.join(", "); return sl.join(", ");
} }

View File

@@ -54,7 +54,8 @@ namespace BlackMisc::Network
FsdAtisCanBeReceived = 1 << 2, //!< ATIS FsdAtisCanBeReceived = 1 << 2, //!< ATIS
FsdWithAircraftConfig = 1 << 3, //!< Aircraft parts FsdWithAircraftConfig = 1 << 3, //!< Aircraft parts
FsdWithGroundFlag = 1 << 4, //!< supports gnd. flag (in position) FsdWithGroundFlag = 1 << 4, //!< supports gnd. flag (in position)
FsdModelString = 1 << 5 //!< model string can be queried FsdModelString = 1 << 5, //!< model string can be queried
FsdWithVisualPositions = 1 << 6 //!< visual position updates
}; };
Q_DECLARE_FLAGS(Capabilities, Capability) Q_DECLARE_FLAGS(Capabilities, Capability)

View File

@@ -47,6 +47,7 @@ namespace BlackMisc::Network
return ds.arg(boolToYesNo(details.testFlag(SendAircraftParts)), return ds.arg(boolToYesNo(details.testFlag(SendAircraftParts)),
boolToYesNo(details.testFlag(SendGndFlag)), boolToYesNo(details.testFlag(SendGndFlag)),
boolToYesNo(details.testFlag(SendInterimPositions)), boolToYesNo(details.testFlag(SendInterimPositions)),
boolToYesNo(details.testFlag(SendVisualPositions)),
boolToYesNo(details.testFlag(ReceiveAircraftParts)), boolToYesNo(details.testFlag(ReceiveAircraftParts)),
boolToYesNo(details.testFlag(ReceiveGndFlag)), boolToYesNo(details.testFlag(ReceiveGndFlag)),
boolToYesNo(details.testFlag(ReceiveInterimPositions)), boolToYesNo(details.testFlag(ReceiveInterimPositions)),
@@ -54,7 +55,7 @@ namespace BlackMisc::Network
); );
} }
void CFsdSetup::setSendReceiveDetails(bool partsSend, bool partsReceive, bool gndSend, bool gndReceive, bool interimSend, bool interimReceive, bool euroscopeSimDataReceive) void CFsdSetup::setSendReceiveDetails(bool partsSend, bool partsReceive, bool gndSend, bool gndReceive, bool interimSend, bool interimReceive, bool visualSend, bool euroscopeSimDataReceive)
{ {
SendReceiveDetails s = Nothing; SendReceiveDetails s = Nothing;
if (partsSend) { s |= SendAircraftParts; } if (partsSend) { s |= SendAircraftParts; }
@@ -63,6 +64,7 @@ namespace BlackMisc::Network
if (gndReceive) { s |= ReceiveGndFlag; } if (gndReceive) { s |= ReceiveGndFlag; }
if (interimSend) { s |= SendInterimPositions; } if (interimSend) { s |= SendInterimPositions; }
if (interimReceive) { s |= ReceiveInterimPositions; } if (interimReceive) { s |= ReceiveInterimPositions; }
if (visualSend) { s |= SendVisualPositions; }
if (euroscopeSimDataReceive) { s |= ReceiveEuroscopeSimData; } if (euroscopeSimDataReceive) { s |= ReceiveEuroscopeSimData; }
this->setSendReceiveDetails(s); this->setSendReceiveDetails(s);
} }

View File

@@ -46,9 +46,9 @@ namespace BlackMisc::Network
ReceiveInterimPositions = 1 << 4, //!< fast position updates in ReceiveInterimPositions = 1 << 4, //!< fast position updates in
ReceiveGndFlag = 1 << 5, //!< gnd.flag in (position) ReceiveGndFlag = 1 << 5, //!< gnd.flag in (position)
Force3LetterAirlineICAO = 1 << 6, //!< force 3 letter airline ICAO code Force3LetterAirlineICAO = 1 << 6, //!< force 3 letter airline ICAO code
// bit 7 reserved for VISUPDATE SendVisualPositions = 1 << 7, //!< visual positions out
ReceiveEuroscopeSimData = 1 << 8, //!< euroscope SIMDATA in ReceiveEuroscopeSimData = 1 << 8, //!< euroscope SIMDATA in
AllSending = SendAircraftParts | SendInterimPositions | SendGndFlag, //!< all out AllSending = SendAircraftParts | SendInterimPositions | SendVisualPositions | SendGndFlag, //!< all out
AllReceive = ReceiveAircraftParts | ReceiveInterimPositions | ReceiveGndFlag, //!< all in AllReceive = ReceiveAircraftParts | ReceiveInterimPositions | ReceiveGndFlag, //!< all in
All = AllReceive | AllSending, //!< all All = AllReceive | AllSending, //!< all
AllParts = SendAircraftParts | ReceiveAircraftParts, //!< send/receive parts AllParts = SendAircraftParts | ReceiveAircraftParts, //!< send/receive parts
@@ -56,7 +56,7 @@ namespace BlackMisc::Network
AllReceiveWithoutGnd = AllReceive - ReceiveGndFlag, //!< all in, but no gnd.flag AllReceiveWithoutGnd = AllReceive - ReceiveGndFlag, //!< all in, but no gnd.flag
AllInterimPositions = SendInterimPositions | ReceiveInterimPositions, //!< all interim positions AllInterimPositions = SendInterimPositions | ReceiveInterimPositions, //!< all interim positions
AllWithoutGnd = AllReceiveWithoutGnd | AllSendingWithoutGnd, //!< all, but no gnd.flag AllWithoutGnd = AllReceiveWithoutGnd | AllSendingWithoutGnd, //!< all, but no gnd.flag
VATSIMDefault = AllParts | Force3LetterAirlineICAO VATSIMDefault = AllParts | Force3LetterAirlineICAO | SendVisualPositions
}; };
Q_DECLARE_FLAGS(SendReceiveDetails, SendReceiveDetailsFlag) Q_DECLARE_FLAGS(SendReceiveDetails, SendReceiveDetailsFlag)
@@ -95,13 +95,14 @@ namespace BlackMisc::Network
void removeSendReceiveDetails(SendReceiveDetails sendReceive) { m_sendReceive &= ~sendReceive; } void removeSendReceiveDetails(SendReceiveDetails sendReceive) { m_sendReceive &= ~sendReceive; }
//! Set send / receive details //! Set send / receive details
void setSendReceiveDetails(bool partsSend, bool partsReceive, bool gndSend, bool gndReceive, bool interimSend, bool interimReceive, bool euroscopeSimDataReceive); void setSendReceiveDetails(bool partsSend, bool partsReceive, bool gndSend, bool gndReceive, bool interimSend, bool interimReceive, bool visualSend, bool euroscopeSimDataReceive);
//! FSD setup flags //! FSD setup flags
//! @{ //! @{
bool sendAircraftParts() const { return this->getSendReceiveDetails().testFlag(SendAircraftParts); } bool sendAircraftParts() const { return this->getSendReceiveDetails().testFlag(SendAircraftParts); }
bool sendGndFlag() const { return this->getSendReceiveDetails().testFlag(SendGndFlag); } bool sendGndFlag() const { return this->getSendReceiveDetails().testFlag(SendGndFlag); }
bool sendInterimPositions() const { return this->getSendReceiveDetails().testFlag(SendInterimPositions); } bool sendInterimPositions() const { return this->getSendReceiveDetails().testFlag(SendInterimPositions); }
bool sendVisualPositions() const { return this->getSendReceiveDetails().testFlag(SendVisualPositions); }
bool receiveAircraftParts() const { return this->getSendReceiveDetails().testFlag(ReceiveAircraftParts); } bool receiveAircraftParts() const { return this->getSendReceiveDetails().testFlag(ReceiveAircraftParts); }
bool receiveGndFlag() const { return this->getSendReceiveDetails().testFlag(ReceiveGndFlag); } bool receiveGndFlag() const { return this->getSendReceiveDetails().testFlag(ReceiveGndFlag); }