aboutsummaryrefslogtreecommitdiff
path: root/src/UdpTasks/StatusChecker/statuschecker.h
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/StatusChecker/statuschecker.h
parentc784240d1af68dbd8d0466822b34fd05d6ccdda1 (diff)
downloadMasterserver-Qt5-60a301a93b6057bb2c54ac04a7c38c38389037b3.tar.gz
Masterserver-Qt5-60a301a93b6057bb2c54ac04a7c38c38389037b3.zip
Add files via upload
Diffstat (limited to 'src/UdpTasks/StatusChecker/statuschecker.h')
-rw-r--r--src/UdpTasks/StatusChecker/statuschecker.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/UdpTasks/StatusChecker/statuschecker.h b/src/UdpTasks/StatusChecker/statuschecker.h
new file mode 100644
index 0000000..bf3c4c2
--- /dev/null
+++ b/src/UdpTasks/StatusChecker/statuschecker.h
@@ -0,0 +1,79 @@
+#ifndef STATUSCHECKER_H
+#define STATUSCHECKER_H
+
+#include <QTimer>
+#include <QUdpSocket>
+#include <QNetworkDatagram>
+
+#include "Core/CoreObject/coreobject.h"
+#include "Database/Common/commonactions.h"
+#include "Protocols/GameSpy0/gamespy0.h"
+#include "Protocols/GameSpy0/securevalidate.h"
+#include "UdpTasks/udpdatastructure.h"
+
+class StatusChecker: public QObject
+{
+ Q_OBJECT
+public:
+ StatusChecker(const QSharedPointer<CoreObject> &coreObject);
+
+ // activate server checker/ticker
+ bool startTicker();
+
+private:
+ QSharedPointer<CoreObject> _coreObject;
+
+ // udp socket
+ QUdpSocket _udpSocket;
+ QString _udpRequest = "\\info\\";
+
+ // ticker and reset timers
+ QTimer _tickTicker;
+ QTimer _resetTimer;
+
+ // ticker helpers
+ int _dbIndex = -1;
+
+ // data buffer for received data.
+ QHash<QString, QString> _dataBuffer;
+
+ // secure/validate challenge buffer
+ QHash<QString, UdpData> _secureBuffer;
+
+ // temporary fix for readyRead signal not being emitted
+ int _missedReadCalls = 0;
+
+ // (defined) database fields to be updated in updateServerInfo(...)
+ const QStringList _updateFields
+ {
+ "hostname", "gamever", "minnetver", "location", "listenserver",
+ "adminname", "adminemail", "password", "gametype", "gamestyle",
+ "changelevels", "maptitle", "mapname", "numplayers", "maxplayers",
+ "minplayers", "botskill", "balanceteams", "playersbalanceteams",
+ "friendlyfire", "maxteams", "timelimit", "goalteamscore", "fraglimit",
+ "misc", "hostport"
+ };
+
+private slots:
+ // udp- and timer events
+ void onUdpResponseRead();
+ void onTicker(); // udp query to remote gameserver
+
+private:
+ // get next server from database
+ QSqlQuery getNextServer (const int &currentServerId);
+
+ // server info to database
+ bool insertServerInfo(const QString &serverAddress,
+ const unsigned short &serverPort);
+
+ bool updateServerInfo(const QString &serverAddress,
+ const unsigned short &serverPort,
+ const QHash<QString, QString> &serverInfo);
+
+ bool insertPlayerInfo(const QString &serverAddress,
+ const unsigned short &serverPort,
+ const QHash<QString, QString> &serverInfo);
+};
+
+#endif // STATUSCHECKER_H