mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2025-09-10 12:31:06 -04:00
run the code in tasks
This commit is contained in:
parent
ea2a2349f8
commit
87c9066a2b
@ -54,6 +54,7 @@
|
|||||||
#include <QFileSystemWatcher>
|
#include <QFileSystemWatcher>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <tasks/ConcurrentTask.h>
|
||||||
|
|
||||||
static const int COLUMN_COUNT = 3; // 3 , TBD: latency and other nice things.
|
static const int COLUMN_COUNT = 3; // 3 , TBD: latency and other nice things.
|
||||||
|
|
||||||
@ -100,21 +101,6 @@ struct Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void queryStatus() {
|
|
||||||
qDebug() << "Querying status of " << m_address;
|
|
||||||
auto [domain, port] = splitAddress();
|
|
||||||
MCResolver resolver(nullptr, domain, port);
|
|
||||||
QObject::connect(&resolver, &MCResolver::succeed, [&](QString ip, int port) {
|
|
||||||
qDebug() << "Resolved Addresse for" << domain << ": " << ip << ":" << port;
|
|
||||||
McClient client(nullptr, domain, ip, port);
|
|
||||||
int online = client.getOnlinePlayers();
|
|
||||||
printf("Online players: %d\n", online);
|
|
||||||
|
|
||||||
client.close();
|
|
||||||
});
|
|
||||||
resolver.ping();
|
|
||||||
}
|
|
||||||
|
|
||||||
void serialize(nbt::tag_compound& server)
|
void serialize(nbt::tag_compound& server)
|
||||||
{
|
{
|
||||||
server.insert("name", m_name.trimmed().toUtf8().toStdString());
|
server.insert("name", m_name.trimmed().toUtf8().toStdString());
|
||||||
@ -143,6 +129,33 @@ struct Server {
|
|||||||
int m_maxPlayers = 0;
|
int m_maxPlayers = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ServerPingTask : public Task {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit ServerPingTask(QObject* parent, const Server &server) : Task(parent), m_server(server) {}
|
||||||
|
~ServerPingTask() override = default;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void executeTask() override {
|
||||||
|
qDebug() << "Querying status of " << m_server.m_address;
|
||||||
|
auto [domain, port] = m_server.splitAddress();
|
||||||
|
MCResolver resolver(nullptr, domain, port);
|
||||||
|
QObject::connect(&resolver, &MCResolver::succeed, [&](QString ip, int port) {
|
||||||
|
qDebug() << "Resolved Addresse for" << domain << ": " << ip << ":" << port;
|
||||||
|
McClient client(nullptr, domain, ip, port);
|
||||||
|
int online = client.getOnlinePlayers();
|
||||||
|
printf("Online players: %d\n", online);
|
||||||
|
|
||||||
|
client.close();
|
||||||
|
});
|
||||||
|
resolver.ping();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const Server &m_server;
|
||||||
|
};
|
||||||
|
|
||||||
static std::unique_ptr<nbt::tag_compound> parseServersDat(const QString& filename)
|
static std::unique_ptr<nbt::tag_compound> parseServersDat(const QString& filename)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@ -461,9 +474,12 @@ class ServersModel : public QAbstractListModel {
|
|||||||
|
|
||||||
void queryServersStatus()
|
void queryServersStatus()
|
||||||
{
|
{
|
||||||
|
ConcurrentTask::Ptr job(new ConcurrentTask(this, "Query servers status", APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt()));
|
||||||
for (auto& server : m_servers) {
|
for (auto& server : m_servers) {
|
||||||
server.queryStatus();
|
ServerPingTask *task = new ServerPingTask(this, server);
|
||||||
|
job->addTask(Task::Ptr(task));
|
||||||
}
|
}
|
||||||
|
job->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user