aboutsummaryrefslogtreecommitdiff
path: root/src/UdpTasks/BeaconServer/Uplink
diff options
context:
space:
mode:
authorDark1-dev <shansarkar272@gmail.com>2023-03-01 21:30:57 +0600
committerGitHub <noreply@github.com>2023-03-01 21:30:57 +0600
commit60a301a93b6057bb2c54ac04a7c38c38389037b3 (patch)
treeb09c5f8bc0045828c660654d8ed6744663856202 /src/UdpTasks/BeaconServer/Uplink
parentc784240d1af68dbd8d0466822b34fd05d6ccdda1 (diff)
downloadMasterserver-Qt5-60a301a93b6057bb2c54ac04a7c38c38389037b3.tar.gz
Masterserver-Qt5-60a301a93b6057bb2c54ac04a7c38c38389037b3.zip
Add files via upload
Diffstat (limited to 'src/UdpTasks/BeaconServer/Uplink')
-rw-r--r--src/UdpTasks/BeaconServer/Uplink/onuplinktimer.cpp41
-rw-r--r--src/UdpTasks/BeaconServer/Uplink/uplink.cpp21
2 files changed, 62 insertions, 0 deletions
diff --git a/src/UdpTasks/BeaconServer/Uplink/onuplinktimer.cpp b/src/UdpTasks/BeaconServer/Uplink/onuplinktimer.cpp
new file mode 100644
index 0000000..7b62bc4
--- /dev/null
+++ b/src/UdpTasks/BeaconServer/Uplink/onuplinktimer.cpp
@@ -0,0 +1,41 @@
+#include "../beaconserver.h"
+
+void BeaconServer::onUplinkTimer()
+{
+ // get uplinks from settings
+ QListIterator<SyncServer> syncServers(_coreObject->Settings.SyncerSettings.syncServers);
+ while ( syncServers.hasNext() )
+ {
+ // get next item
+ SyncServer thisUplink = syncServers.next();
+ QString remoteHostname = thisUplink.remoteAddress;
+ unsigned short remotePort = thisUplink.beaconPort;
+
+ // resolve (async) uplink address and let callback perform the uplink
+ QHostInfo::lookupHost(remoteHostname, this, [this, remoteHostname, remotePort] (const QHostInfo &host)
+ {
+ // errors during lookup?
+ if ( host.error() == QHostInfo::NoError and ! host.addresses().empty() )
+ {
+ // create and send heartbeat
+ QNetworkDatagram udpDatagram( _uplinkData.toLatin1(), host.addresses().first(), remotePort );
+ _udpSocket.writeDatagram( udpDatagram );
+
+ // add to log
+ _coreObject->Log.logEvent("uplink", QStringLiteral("sending uplink to %1 (%2:%3)")
+ .arg(remoteHostname,
+ host.addresses().first().toString(),
+ QString::number(remotePort)));
+
+ // function this->onUdpRead() will handle any responses (secure/basic/status)
+ }
+ else
+ {
+ // log failure to resolve
+ _coreObject->Log.logEvent("uplink", QStringLiteral("cannot resolve %1: %2")
+ .arg( remoteHostname, host.errorString()));
+ }
+ }); // end QHostInfo
+
+ } // end while
+}
diff --git a/src/UdpTasks/BeaconServer/Uplink/uplink.cpp b/src/UdpTasks/BeaconServer/Uplink/uplink.cpp
new file mode 100644
index 0000000..7799dbd
--- /dev/null
+++ b/src/UdpTasks/BeaconServer/Uplink/uplink.cpp
@@ -0,0 +1,21 @@
+#include "../beaconserver.h"
+
+bool BeaconServer::uplink()
+{
+ // set uplink message (port and gamename)
+ _uplinkData = QStringLiteral("\\heartbeat\\%1\\gamename\\%2")
+ .arg( QString::number( _coreObject->Settings.BeaconServerSettings.beaconPort),
+ TYPE_GAMENAME );
+
+ // connect timer with events
+ connect(&_uplinkTimer, &QTimer::timeout, this, &BeaconServer::onUplinkTimer);
+
+ // start timer
+ _uplinkTimer.start( _broadcastInterval_s * 1000 );
+
+ // complete startup
+ _coreObject->Log.logEvent("info", QStringLiteral("broadcasting UDP uplinks every %1 seconds")
+ .arg( _broadcastInterval_s ));
+
+ return true;
+}