always delete McResolver object, even when it fails

This commit is contained in:
iTrooz 2024-11-25 00:16:25 +01:00
parent 0c6f78dee2
commit 7c8d2c9b55
No known key found for this signature in database
GPG Key ID: 8B83F77667B1BC6A
3 changed files with 12 additions and 2 deletions

View File

@ -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();
}

View File

@ -24,4 +24,5 @@ private:
signals:
void succeed(QString ip, int port);
void fail();
void finish();
};

View File

@ -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();
}