diff --git a/launcher/ui/pages/instance/McResolver.cpp b/launcher/ui/pages/instance/McResolver.cpp index 880e3d5ef..1159e5df2 100644 --- a/launcher/ui/pages/instance/McResolver.cpp +++ b/launcher/ui/pages/instance/McResolver.cpp @@ -65,8 +65,10 @@ void McResolver::pingWithDomainA(QString domain, int port) { void McResolver::emitFail(std::string error) { qDebug() << "Ping error:" << QString::fromStdString(error); emit fail(); + emit finish(); } void McResolver::emitSucceed(QString ip, int port) { emit succeed(ip, port); + emit finish(); } diff --git a/launcher/ui/pages/instance/McResolver.h b/launcher/ui/pages/instance/McResolver.h index 3f5b4e701..5de4e8de4 100644 --- a/launcher/ui/pages/instance/McResolver.h +++ b/launcher/ui/pages/instance/McResolver.h @@ -24,4 +24,5 @@ private: signals: void succeed(QString ip, int port); void fail(); + void finish(); }; diff --git a/launcher/ui/pages/instance/ServersPage.cpp b/launcher/ui/pages/instance/ServersPage.cpp index 86e13b7eb..2efaef187 100644 --- a/launcher/ui/pages/instance/ServersPage.cpp +++ b/launcher/ui/pages/instance/ServersPage.cpp @@ -139,13 +139,15 @@ class ServerPingTask : public Task { protected: virtual void executeTask() override { qDebug() << "Querying status of " << m_server.m_address; + + // Resolve the actual IP and port for the server auto [domain, port] = m_server.splitAddress(); McResolver *resolver = new McResolver(nullptr, domain, port); QObject::connect(resolver, &McResolver::succeed, [this, resolver, domain](QString ip, int port) { - resolver->deleteLater(); qDebug() << "Resolved Addresse for" << domain << ": " << ip << ":" << port; - McClient client(nullptr, domain, ip, port); + // Now that we have the IP and port, query the server + McClient client(nullptr, domain, ip, port); try { int online = client.getOnlinePlayers(); qDebug() << "Online players: " << online; @@ -156,6 +158,11 @@ class ServerPingTask : public Task { emitFailed(e.cause()); } }); + + // Delete McResolver object when done + QObject::connect(resolver, &McResolver::finish, [resolver]() { + resolver->deleteLater(); + }); resolver->ping(); }