From dbb88ca7df6594f65cba5c5e5bd821a0c2605c00 Mon Sep 17 00:00:00 2001 From: iTrooz Date: Thu, 28 Nov 2024 17:46:42 +0100 Subject: [PATCH] move ServerPingTask in its own file --- launcher/CMakeLists.txt | 2 + launcher/ui/pages/instance/ServerPingTask.cpp | 44 +++++++++++++++ launcher/ui/pages/instance/ServerPingTask.h | 22 ++++++++ launcher/ui/pages/instance/ServersPage.cpp | 56 +------------------ 4 files changed, 69 insertions(+), 55 deletions(-) create mode 100644 launcher/ui/pages/instance/ServerPingTask.cpp create mode 100644 launcher/ui/pages/instance/ServerPingTask.h diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 2cfb63af3..e60c16913 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -922,6 +922,8 @@ SET(LAUNCHER_SOURCES ui/pages/instance/McClient.h ui/pages/instance/McResolver.cpp ui/pages/instance/McResolver.h + ui/pages/instance/ServerPingTask.cpp + ui/pages/instance/ServerPingTask.h # GUI - global settings pages ui/pages/global/AccountListPage.cpp diff --git a/launcher/ui/pages/instance/ServerPingTask.cpp b/launcher/ui/pages/instance/ServerPingTask.cpp new file mode 100644 index 000000000..42144f354 --- /dev/null +++ b/launcher/ui/pages/instance/ServerPingTask.cpp @@ -0,0 +1,44 @@ +#include + +#include "ServerPingTask.h" +#include "McResolver.h" +#include "McClient.h" + +void ServerPingTask::executeTask() { + qDebug() << "Querying status of " << QString("%1:%2").arg(m_domain).arg(m_port); + + // Resolve the actual IP and port for the server + McResolver *resolver = new McResolver(nullptr, m_domain, m_port); + QObject::connect(resolver, &McResolver::succeeded, [this, resolver](QString ip, int port) { + qDebug() << "Resolved Address for" << m_domain << ": " << ip << ":" << port; + + // Now that we have the IP and port, query the server + McClient *client = new McClient(nullptr, m_domain, ip, port); + auto onlineFuture = client->getOnlinePlayers(); + + // Wait for query to finish + QFutureWatcher *watcher = new QFutureWatcher(); + QObject::connect(watcher, &QFutureWatcher::finished, [this, client, onlineFuture, watcher]() { + client->deleteLater(); + watcher->deleteLater(); + + int online = onlineFuture.result(); + if (online == -1) { + qDebug() << "Failed to get online players"; + emitFailed(); + return; + } else { + qDebug() << "Online players: " << online; + m_outputOnlinePlayers = online; + emitSucceeded(); + } + }); + watcher->setFuture(onlineFuture); + }); + + // Delete McResolver object when done + QObject::connect(resolver, &McResolver::finished, [resolver]() { + resolver->deleteLater(); + }); + resolver->ping(); +} \ No newline at end of file diff --git a/launcher/ui/pages/instance/ServerPingTask.h b/launcher/ui/pages/instance/ServerPingTask.h new file mode 100644 index 000000000..0956a4f63 --- /dev/null +++ b/launcher/ui/pages/instance/ServerPingTask.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include + + +class ServerPingTask : public Task { + Q_OBJECT + public: + explicit ServerPingTask(QString domain, int port) : Task(), m_domain(domain), m_port(port) {} + ~ServerPingTask() override = default; + int m_outputOnlinePlayers = -1; + + private: + QString m_domain; + int m_port; + + protected: + virtual void executeTask() override; +}; diff --git a/launcher/ui/pages/instance/ServersPage.cpp b/launcher/ui/pages/instance/ServersPage.cpp index 954cdc046..98058ddad 100644 --- a/launcher/ui/pages/instance/ServersPage.cpp +++ b/launcher/ui/pages/instance/ServersPage.cpp @@ -38,9 +38,7 @@ #include "ServersPage.h" #include "ui/dialogs/CustomMessageBox.h" #include "ui_ServersPage.h" - -#include "McClient.h" -#include "McResolver.h" +#include "ServerPingTask.h" #include #include @@ -130,58 +128,6 @@ struct Server { int m_maxPlayers = 0; }; -class ServerPingTask : public Task { - Q_OBJECT - public: - explicit ServerPingTask(QString domain, int port) : Task(), m_domain(domain), m_port(port) {} - ~ServerPingTask() override = default; - int m_outputOnlinePlayers = -1; - - private: - QString m_domain; - int m_port; - - protected: - virtual void executeTask() override { - qDebug() << "Querying status of " << QString("%1:%2").arg(m_domain).arg(m_port); - - // Resolve the actual IP and port for the server - McResolver *resolver = new McResolver(nullptr, m_domain, m_port); - QObject::connect(resolver, &McResolver::succeeded, [this, resolver](QString ip, int port) { - qDebug() << "Resolved Address for" << m_domain << ": " << ip << ":" << port; - - // Now that we have the IP and port, query the server - McClient *client = new McClient(nullptr, m_domain, ip, port); - auto onlineFuture = client->getOnlinePlayers(); - - // Wait for query to finish - QFutureWatcher *watcher = new QFutureWatcher(); - QObject::connect(watcher, &QFutureWatcher::finished, [this, client, onlineFuture, watcher]() { - client->deleteLater(); - watcher->deleteLater(); - - int online = onlineFuture.result(); - if (online == -1) { - qDebug() << "Failed to get online players"; - emitFailed(); - return; - } else { - qDebug() << "Online players: " << online; - m_outputOnlinePlayers = online; - emitSucceeded(); - } - }); - watcher->setFuture(onlineFuture); - }); - - // Delete McResolver object when done - QObject::connect(resolver, &McResolver::finished, [resolver]() { - resolver->deleteLater(); - }); - resolver->ping(); - } -}; - static std::unique_ptr parseServersDat(const QString& filename) { try {