Skip to content

Commit 677483e

Browse files
authored
Enable automatic reconnect for TCP and UDP receivers (#7228)
1 parent 8f95e21 commit 677483e

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

src/core/positioning/tcpreceiver.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ TcpReceiver::TcpReceiver( const QString &address, const int port, QObject *paren
2626
{
2727
connect( mSocket, qOverload<QAbstractSocket::SocketError>( &QAbstractSocket::errorOccurred ), this, &TcpReceiver::handleError );
2828
connect( mSocket, &QTcpSocket::stateChanged, this, [this]( QAbstractSocket::SocketState state ) {
29-
setSocketState( state );
3029
if ( state == QAbstractSocket::SocketState::UnconnectedState && mReconnectOnDisconnect )
3130
{
3231
mReconnectTimer.start( 2000 );
3332
}
33+
else
34+
{
35+
setSocketState( state );
36+
}
3437
} );
3538

3639
connect( mSocket, &QAbstractSocket::connected, this, [this] {
@@ -61,6 +64,8 @@ void TcpReceiver::handleConnectDevice()
6164
return;
6265
}
6366
qInfo() << QStringLiteral( "TcpReceiver: Initiating connection to address %1 (port %2)" ).arg( mAddress, QString::number( mPort ) );
67+
mConnectionFailureCount = 0;
68+
mReconnectOnDisconnect = true;
6469
mSocket->connectToHost( mAddress, mPort, QTcpSocket::ReadWrite );
6570
}
6671

@@ -100,5 +105,15 @@ void TcpReceiver::handleError( QAbstractSocket::SocketError error )
100105
}
101106
qInfo() << QStringLiteral( "TcpReceiver: Error: %1" ).arg( mLastError );
102107

108+
if ( mReconnectOnDisconnect )
109+
{
110+
mConnectionFailureCount++;
111+
}
112+
113+
if ( mConnectionFailureCount > 10 )
114+
{
115+
mReconnectOnDisconnect = false;
116+
}
117+
103118
emit lastErrorChanged( mLastError );
104119
}

src/core/positioning/tcpreceiver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class TcpReceiver : public NmeaGnssReceiver
5050
QTcpSocket *mSocket = nullptr;
5151

5252
bool mReconnectOnDisconnect = false;
53+
int mConnectionFailureCount = 0;
5354
QTimer mReconnectTimer;
5455
};
5556

src/core/positioning/udpreceiver.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,14 @@ UdpReceiver::UdpReceiver( const QString &address, const int port, QObject *paren
3939

4040
connect( mSocket, qOverload<QAbstractSocket::SocketError>( &QAbstractSocket::errorOccurred ), this, &UdpReceiver::handleError );
4141
connect( mSocket, &QUdpSocket::stateChanged, this, [this]( QAbstractSocket::SocketState state ) {
42-
setSocketState( state );
4342
if ( state == QAbstractSocket::SocketState::UnconnectedState && mReconnectOnDisconnect )
4443
{
4544
mReconnectTimer.start( 2000 );
4645
}
46+
else
47+
{
48+
setSocketState( state );
49+
}
4750
} );
4851

4952
connect( mSocket, &QUdpSocket::readyRead, this, [this]() {
@@ -85,6 +88,8 @@ void UdpReceiver::handleConnectDevice()
8588
return;
8689
}
8790
qInfo() << QStringLiteral( "UdpReceiver: Initiating connection to address %1 (port %2)" ).arg( mAddress, QString::number( mPort ) );
91+
mConnectionFailureCount = 0;
92+
mReconnectOnDisconnect = true;
8893
mBuffer->open( QIODevice::ReadWrite );
8994
mSocket->bind( QHostAddress( mAddress ), mPort, QAbstractSocket::ShareAddress | QAbstractSocket::ReuseAddressHint );
9095
mSocket->joinMulticastGroup( QHostAddress( mAddress ) );
@@ -127,5 +132,15 @@ void UdpReceiver::handleError( QAbstractSocket::SocketError error )
127132
}
128133
qInfo() << QStringLiteral( "UdpReceiver: Error: %1" ).arg( mLastError );
129134

135+
if ( mReconnectOnDisconnect )
136+
{
137+
mConnectionFailureCount++;
138+
}
139+
140+
if ( mConnectionFailureCount > 10 )
141+
{
142+
mReconnectOnDisconnect = false;
143+
}
144+
130145
emit lastErrorChanged( mLastError );
131146
}

src/core/positioning/udpreceiver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class UdpReceiver : public NmeaGnssReceiver
5252
QBuffer *mBuffer = nullptr;
5353

5454
bool mReconnectOnDisconnect = false;
55+
int mConnectionFailureCount = 0;
5556
QTimer mReconnectTimer;
5657
};
5758

0 commit comments

Comments
 (0)