aboutsummaryrefslogtreecommitdiff
path: root/src/UdpTasks/StatusChecker/statusticker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/UdpTasks/StatusChecker/statusticker.cpp')
-rw-r--r--src/UdpTasks/StatusChecker/statusticker.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/UdpTasks/StatusChecker/statusticker.cpp b/src/UdpTasks/StatusChecker/statusticker.cpp
new file mode 100644
index 0000000..351a7ee
--- /dev/null
+++ b/src/UdpTasks/StatusChecker/statusticker.cpp
@@ -0,0 +1,47 @@
+#include "statuschecker.h"
+
+bool StatusChecker::startTicker()
+{
+
+ /* UDP Query Checking
+ *
+ * Send a \info\ or \status\ query to the remote gameserver. The
+ * server will respond with its serverdata, which is processed
+ * and stored in the database. Required for display on the website.
+ */
+
+ // check type (extended or simple)
+ _udpRequest = _coreObject->Settings.CheckerSettings.getExtendedInfo ? "\\status\\" : "\\info\\";
+
+ // set udp datagram handler
+ connect(&_udpSocket, &QUdpSocket::readyRead, this, &StatusChecker::onUdpResponseRead);
+
+ // set UDP+1 port for outgoing status checking (avoid querying from random port)
+ _udpSocket.bind(QHostAddress::Any, _coreObject->Settings.BeaconServerSettings.beaconPort+1);
+
+ // attach timer function to tick through servers (from db)
+ connect(&_tickTicker, &QTimer::timeout, this, &StatusChecker::onTicker);
+
+ // set reset timer and event ("cycle time")
+ connect(&_resetTimer, &QTimer::timeout, [this]
+ {
+ // reset indices and clear udp cache
+ _dbIndex = -1;
+ _dataBuffer.clear();
+ _secureBuffer.clear();
+ });
+ _resetTimer.setInterval( _coreObject->Settings.CheckerSettings.timeCheckerReset_s * 1000);
+ _resetTimer.start();
+
+ // ticker enable (keeps running, also when there are no new servers to be queried-- keeps firing every 1/serversPerSecond)
+ _tickTicker.setInterval( _coreObject->Settings.CheckerSettings.timeServerInterval_ms );
+ _tickTicker.start();
+
+ // announce servers per second (calculate from interval)
+ double serversPerSecond = (1000.0 / _coreObject->Settings.CheckerSettings.timeServerInterval_ms);
+ _coreObject->Log.logEvent("info", QStringLiteral("server status every %1 seconds (%2 servers/s)")
+ .arg( QString::number(_coreObject->Settings.CheckerSettings.timeCheckerReset_s),
+ QString::number(serversPerSecond, 'f', 1) ) );
+
+ return true;
+}