Add an inactivity timer to the gateway.
This commit is contained in:
parent
76428bb0cb
commit
4ae82cfd8d
4 changed files with 41 additions and 4 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -67,6 +67,7 @@ m_networkReloadTime(0U),
|
|||
m_networkParrotAddress("127.0.0.1"),
|
||||
m_networkParrotPort(0U),
|
||||
m_networkStartup(),
|
||||
m_networkInactivityTimeout(0U),
|
||||
m_networkDebug(false)
|
||||
{
|
||||
}
|
||||
|
@ -183,6 +184,8 @@ bool CConf::read()
|
|||
m_networkParrotPort = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Startup") == 0)
|
||||
m_networkStartup = value;
|
||||
else if (::strcmp(key, "InactivityTimeout") == 0)
|
||||
m_networkInactivityTimeout = (unsigned int)::atoi(value);
|
||||
else if (::strcmp(key, "Debug") == 0)
|
||||
m_networkDebug = ::atoi(value) == 1;
|
||||
}
|
||||
|
@ -343,6 +346,11 @@ std::string CConf::getNetworkStartup() const
|
|||
return m_networkStartup;
|
||||
}
|
||||
|
||||
unsigned int CConf::getNetworkInactivityTimeout() const
|
||||
{
|
||||
return m_networkInactivityTimeout;
|
||||
}
|
||||
|
||||
bool CConf::getNetworkDebug() const
|
||||
{
|
||||
return m_networkDebug;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -69,6 +69,7 @@ public:
|
|||
std::string getNetworkParrotAddress() const;
|
||||
unsigned int getNetworkParrotPort() const;
|
||||
std::string getNetworkStartup() const;
|
||||
unsigned int getNetworkInactivityTimeout() const;
|
||||
bool getNetworkDebug() const;
|
||||
|
||||
private:
|
||||
|
@ -107,6 +108,7 @@ private:
|
|||
std::string m_networkParrotAddress;
|
||||
unsigned int m_networkParrotPort;
|
||||
std::string m_networkStartup;
|
||||
unsigned int m_networkInactivityTimeout;
|
||||
bool m_networkDebug;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2016,2017 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -192,6 +192,7 @@ int CYSFGateway::run()
|
|||
return 1;
|
||||
}
|
||||
|
||||
CTimer inactivityTimer(1000U, m_conf.getNetworkInactivityTimeout() * 60U);
|
||||
CTimer lostTimer(1000U, 120U);
|
||||
CTimer pollTimer(1000U, 5U);
|
||||
|
||||
|
@ -227,6 +228,7 @@ int CYSFGateway::run()
|
|||
m_netNetwork->writePoll();
|
||||
m_netNetwork->writePoll();
|
||||
|
||||
inactivityTimer.start();
|
||||
lostTimer.start();
|
||||
pollTimer.start();
|
||||
|
||||
|
@ -273,6 +275,7 @@ int CYSFGateway::run()
|
|||
m_netNetwork->writePoll();
|
||||
m_netNetwork->writePoll();
|
||||
|
||||
inactivityTimer.start();
|
||||
lostTimer.start();
|
||||
pollTimer.start();
|
||||
|
||||
|
@ -287,6 +290,7 @@ int CYSFGateway::run()
|
|||
m_netNetwork->writeUnlink();
|
||||
m_netNetwork->setDestination();
|
||||
|
||||
inactivityTimer.stop();
|
||||
lostTimer.stop();
|
||||
pollTimer.stop();
|
||||
|
||||
|
@ -301,8 +305,10 @@ int CYSFGateway::run()
|
|||
m_gps->data(buffer + 14U, buffer + 35U, fi, dt, fn, ft);
|
||||
}
|
||||
|
||||
if (networkEnabled && m_linked && !m_exclude)
|
||||
if (networkEnabled && m_linked && !m_exclude) {
|
||||
m_netNetwork->write(buffer);
|
||||
inactivityTimer.start();
|
||||
}
|
||||
|
||||
if ((buffer[34U] & 0x01U) == 0x01U) {
|
||||
if (m_gps != NULL)
|
||||
|
@ -331,10 +337,30 @@ int CYSFGateway::run()
|
|||
if (m_wiresX != NULL)
|
||||
m_wiresX->clock(ms);
|
||||
|
||||
inactivityTimer.clock(ms);
|
||||
if (inactivityTimer.isRunning() && inactivityTimer.hasExpired()) {
|
||||
if (m_linked) {
|
||||
LogMessage("Disconnecting due to inactivity");
|
||||
|
||||
m_netNetwork->writeUnlink();
|
||||
m_netNetwork->writeUnlink();
|
||||
m_netNetwork->writeUnlink();
|
||||
m_netNetwork->setDestination();
|
||||
|
||||
lostTimer.stop();
|
||||
pollTimer.stop();
|
||||
|
||||
m_linked = false;
|
||||
}
|
||||
|
||||
inactivityTimer.stop();
|
||||
}
|
||||
|
||||
lostTimer.clock(ms);
|
||||
if (lostTimer.isRunning() && lostTimer.hasExpired()) {
|
||||
LogWarning("Link has failed, polls lost");
|
||||
m_netNetwork->setDestination();
|
||||
inactivityTimer.stop();
|
||||
lostTimer.stop();
|
||||
pollTimer.stop();
|
||||
m_linked = false;
|
||||
|
|
|
@ -40,4 +40,5 @@ ReloadTime=60
|
|||
ParrotAddress=127.0.0.1
|
||||
ParrotPort=42000
|
||||
# Startup=
|
||||
InactivityTimeout=10
|
||||
Debug=0
|
||||
|
|
Loading…
Reference in a new issue