Change relinking logic.

This commit is contained in:
Jonathan Naylor 2018-04-09 19:31:24 +01:00
parent 7f1abc00dc
commit 7e0cd5a9d4

View File

@ -206,11 +206,11 @@ void CP25Gateway::run()
in_addr currentAddr; in_addr currentAddr;
unsigned int currentPort = 0U; unsigned int currentPort = 0U;
unsigned int id = m_conf.getNetworkStartup(); unsigned int startupId = m_conf.getNetworkStartup();
if (id != 9999U) { if (startupId != 9999U) {
CP25Reflector* reflector = reflectors.find(id); CP25Reflector* reflector = reflectors.find(startupId);
if (reflector != NULL) { if (reflector != NULL) {
currentId = id; currentId = startupId;
currentAddr = reflector->m_address; currentAddr = reflector->m_address;
currentPort = reflector->m_port; currentPort = reflector->m_port;
@ -343,42 +343,53 @@ void CP25Gateway::run()
inactivityTimer.clock(ms); inactivityTimer.clock(ms);
if (inactivityTimer.isRunning() && inactivityTimer.hasExpired()) { if (inactivityTimer.isRunning() && inactivityTimer.hasExpired()) {
unsigned int startId = m_conf.getNetworkStartup(); if (currentId != 9999U && startupId == 9999U) {
if (currentId != startId) { LogMessage("Unlinking from %u due to inactivity", currentId);
LogMessage("Unlinking from %u due to inactivity", currentId);
remoteNetwork.writeUnlink(currentAddr, currentPort);
remoteNetwork.writeUnlink(currentAddr, currentPort);
remoteNetwork.writeUnlink(currentAddr, currentPort);
if (speech != NULL)
speech->announce(currentId);
currentId = 9999U;
pollTimer.stop();
lostTimer.stop();
inactivityTimer.stop();
} else if (currentId != startupId) {
if (currentId != 9999U) {
remoteNetwork.writeUnlink(currentAddr, currentPort); remoteNetwork.writeUnlink(currentAddr, currentPort);
remoteNetwork.writeUnlink(currentAddr, currentPort); remoteNetwork.writeUnlink(currentAddr, currentPort);
remoteNetwork.writeUnlink(currentAddr, currentPort); remoteNetwork.writeUnlink(currentAddr, currentPort);
}
if (speech != NULL) CP25Reflector* reflector = reflectors.find(startupId);
speech->announce(currentId); if (reflector != NULL) {
currentId = 9999U; currentId = startupId;
pollTimer.stop();
lostTimer.stop();
inactivityTimer.stop();
//Connecting to default startup reflector
CP25Reflector* reflector = reflectors.find(startId);
currentAddr = reflector->m_address; currentAddr = reflector->m_address;
currentPort = reflector->m_port; currentPort = reflector->m_port;
remoteNetwork.writePoll(currentAddr, currentPort);
remoteNetwork.writePoll(currentAddr, currentPort);
remoteNetwork.writePoll(currentAddr, currentPort);
LogMessage("Linked to startup %u due to inactivity", startId);
inactivityTimer.start(); inactivityTimer.start();
pollTimer.start(); pollTimer.start();
lostTimer.start(); lostTimer.start();
currentId = startId;
}
inactivityTimer.stop(); LogMessage("Linked to reflector %u due to inactivity", currentId);
if (speech != NULL)
speech->announce(currentId);
remoteNetwork.writePoll(currentAddr, currentPort);
remoteNetwork.writePoll(currentAddr, currentPort);
remoteNetwork.writePoll(currentAddr, currentPort);
} else {
startupId = 9999U;
inactivityTimer.stop();
pollTimer.stop();
lostTimer.stop();
}
} }
}
pollTimer.clock(ms); pollTimer.clock(ms);
if (pollTimer.isRunning() && pollTimer.hasExpired()) { if (pollTimer.isRunning() && pollTimer.hasExpired()) {