Fixed issue with APRS packet queue processing
This commit is contained in:
parent
f979e3c4a7
commit
ffbfb3b133
@ -255,17 +255,13 @@ void APRSISClient::processQueue(bool disconnect){
|
||||
return;
|
||||
}
|
||||
|
||||
QQueue<QPair<QString, QDateTime>> delayed;
|
||||
|
||||
while(!m_frameQueue.isEmpty()){
|
||||
auto pair = m_frameQueue.head();
|
||||
auto frame = pair.first;
|
||||
auto timestamp = pair.second;
|
||||
|
||||
// random delay 50% of the time for throttling (a skip will add 60 seconds to the processing time)
|
||||
if(qrand() % 100 <= 50){
|
||||
qDebug() << "APRSISClient Throttle: Skipping Frame";
|
||||
continue;
|
||||
}
|
||||
|
||||
// if the packet is older than the timeout, drop it.
|
||||
if(timestamp.secsTo(QDateTime::currentDateTimeUtc()) > PACKET_TIMEOUT_SECONDS){
|
||||
qDebug() << "APRSISClient Packet Timeout:" << frame;
|
||||
@ -273,19 +269,20 @@ void APRSISClient::processQueue(bool disconnect){
|
||||
continue;
|
||||
}
|
||||
|
||||
// random delay 25% of the time for throttling (a skip will add 60 seconds to the processing time)
|
||||
if(qrand() % 100 <= 25){
|
||||
qDebug() << "APRSISClient Throttle: Skipping Frame";
|
||||
delayed.enqueue(m_frameQueue.dequeue());
|
||||
continue;
|
||||
}
|
||||
|
||||
QByteArray data = frame.toLocal8Bit();
|
||||
if(write(data) == -1){
|
||||
qDebug() << "APRSISClient Write Error:" << errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!waitForBytesWritten(5000)){
|
||||
qDebug() << "APRSISClient Cannot Write Error: Write Timeout";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "APRSISClient Write:" << data;
|
||||
|
||||
if(waitForReadyRead(5000)){
|
||||
line = QString(readLine());
|
||||
|
||||
@ -300,6 +297,11 @@ void APRSISClient::processQueue(bool disconnect){
|
||||
m_frameQueue.dequeue();
|
||||
}
|
||||
|
||||
// enqueue the delayed frames for later processing
|
||||
while(!delayed.isEmpty()){
|
||||
m_frameQueue.enqueue(delayed.dequeue());
|
||||
}
|
||||
|
||||
if(disconnect){
|
||||
disconnectFromHost();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user