CContextNetwork builds up an ATIS as it is received, line-by-line

refs #81
This commit is contained in:
Klaus Basan
2014-01-08 00:06:48 +00:00
committed by Mathew Sutcliffe
parent 37d1466a83
commit f3758e5609

View File

@@ -152,12 +152,75 @@ namespace BlackCore
/*
* ATIS received
*/
void CContextNetwork::psFsdAtisQueryReceived(const CCallsign &callsign, const QString &atisMessage)
void CContextNetwork::psFsdAtisQueryReceived(const CCallsign &callsign, Cvatlib_Network::atisLineType lineType, const QString &atisMessage)
{
this->log(Q_FUNC_INFO, callsign.toQString(), atisMessage);
CValueMap vm(CAtcStation::IndexAtisMessage, atisMessage);
// this->log(Q_FUNC_INFO, callsign.toQString(), atisMessage);
// The ATIS consists of several lines, so the complete
// message needs to be build up before it can be set
// :V -> voice room address.
// :T Controller atis message
// :E Zulu logoff time
// :Z atis line count including this one
QString currentAtisMessage = this->m_atisMessageBuilder.contains(callsign.asString()) ?
this->m_atisMessageBuilder[callsign.asString()] : "";
switch (lineType)
{
case Cvatlib_Network::atisLineType_LineCount:
{
// line count denotes end of ATIS
CValueMap vm(CAtcStation::IndexAtisMessage, currentAtisMessage);
this->m_atcStationsOnline.applyIf(&CAtcStation::getCallsign, callsign, vm);
this->m_atcStationsBooked.applyIf(&CAtcStation::getCallsign, callsign, vm);
this->m_atisMessageBuilder.remove(callsign.asString());
return; // ignore, nothing to do
}
case Cvatlib_Network::atisLineType_VoiceRoom:
{
QString voiceRoomUrl = atisMessage.trimmed();
CValueMap vm(CAtcStation::IndexVoiceRoomUrl, voiceRoomUrl);
this->m_atcStationsOnline.applyIf(&CAtcStation::getCallsign, callsign, vm);
this->m_atcStationsBooked.applyIf(&CAtcStation::getCallsign, callsign, vm);
break; // voice room set, but also add to message
}
case Cvatlib_Network::atisLineType_ZuluLogoff:
{
if (atisMessage.length() == 4)
{
// Logic to set logoff time
bool ok;
int h = atisMessage.left(2).toInt(&ok);
if (!ok) break;
int m = atisMessage.right(2).toInt(&ok);
if (!ok) break;
QDateTime zuluLogoff = QDateTime::currentDateTimeUtc();
zuluLogoff.setTime(QTime(h, m));
CValueMap vm(CAtcStation::IndexBookedUntil, zuluLogoff);
this->m_atcStationsOnline.applyIf(&CAtcStation::getCallsign, callsign, vm);
this->m_atcStationsBooked.applyIf(&CAtcStation::getCallsign, callsign, vm);
}
break; // ZULU time set, but also add to message
}
case Cvatlib_Network::atisLineType_TextMessage:
break;
default:
break;
}
const QString fixedAtisMessage = atisMessage.trimmed();
if (fixedAtisMessage.isEmpty()) return;
// detect the stupid z1, z2, z3 placeholders
// TODO: Anything better as this stupid code here?
const QString atisTest = fixedAtisMessage.toLower().remove(QRegExp("[\\n\\t\\r]"));
if (atisTest == "z") return;
if (atisTest.startsWith("z") && atisTest.length() == 2) return; // z1, z2, ..
if (atisTest.length() == 1) return; // sometimes just z
if (!currentAtisMessage.isEmpty()) currentAtisMessage.append("\n");
currentAtisMessage.append(fixedAtisMessage);
this->m_atisMessageBuilder[callsign.asString()] = currentAtisMessage;
}
/*