diff options
| author | lambdcalculus <64238778+lambdcalculus@users.noreply.github.com> | 2023-11-30 09:17:42 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-30 13:17:42 +0100 |
| commit | e9469a5ca4c1e156430e02cc1d55c03c4a008613 (patch) | |
| tree | a96013570957852b5cde6d0fe70c03f5af28c452 | |
| parent | e6e5e86f68459d6e85b48dccf0627493ea521256 (diff) | |
rework ms list callback logic (#927)
fixes crash when joining server before getting ms list back
| -rw-r--r-- | include/networkmanager.h | 5 | ||||
| -rw-r--r-- | src/lobby.cpp | 2 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/networkmanager.cpp | 12 |
4 files changed, 10 insertions, 11 deletions
diff --git a/include/networkmanager.h b/include/networkmanager.h index 052bc9b..3e37222 100644 --- a/include/networkmanager.h +++ b/include/networkmanager.h @@ -55,7 +55,7 @@ signals: void server_connected(bool state); public slots: - void get_server_list(const std::function<void()> &cb); + void get_server_list(); void ship_server_packet(QString p_packet); void join_to_server(); void handle_server_packet(const QString& p_data); @@ -64,8 +64,7 @@ public slots: const std::function<void(QString)> &cb); void send_heartbeat(); private slots: - void ms_request_finished(QNetworkReply *reply, - const std::function<void()> &cb); + void ms_request_finished(QNetworkReply *reply); private: QString get_user_agent() const { diff --git a/src/lobby.cpp b/src/lobby.cpp index a705b26..85cc744 100644 --- a/src/lobby.cpp +++ b/src/lobby.cpp @@ -229,7 +229,7 @@ void Lobby::loadUI() void Lobby::on_refresh_released() { - net_manager->get_server_list(std::bind(&Lobby::list_servers, this)); + net_manager->get_server_list(); get_motd(); list_favorites(); } diff --git a/src/main.cpp b/src/main.cpp index 5b696fe..4528bc4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) main_app.installTranslator(&appTranslator); main_app.construct_lobby(); - main_app.net_manager->get_server_list(std::bind(&Lobby::list_servers, main_app.w_lobby)); + main_app.net_manager->get_server_list(); main_app.net_manager->send_heartbeat(); main_app.w_lobby->show(); return main_app.exec(); diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index 96e262a..b7e2810 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -29,18 +29,17 @@ NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent) heartbeat_timer->start(heartbeat_interval); } -void NetworkManager::get_server_list(const std::function<void()> &cb) +void NetworkManager::get_server_list() { QNetworkRequest req(QUrl(ms_baseurl + "/servers")); req.setRawHeader("User-Agent", get_user_agent().toUtf8()); QNetworkReply *reply = http->get(req); connect(reply, &QNetworkReply::finished, - this, std::bind(&NetworkManager::ms_request_finished, this, reply, cb)); + this, std::bind(&NetworkManager::ms_request_finished, this, reply)); } -void NetworkManager::ms_request_finished(QNetworkReply *reply, - const std::function<void()> &cb) +void NetworkManager::ms_request_finished(QNetworkReply *reply) { QJsonDocument json = QJsonDocument::fromJson(reply->readAll()); if (json.isNull()) { @@ -72,8 +71,9 @@ void NetworkManager::ms_request_finished(QNetworkReply *reply, } ao_app->set_server_list(server_list); - cb(); - + if (ao_app->lobby_constructed) { + ao_app->w_lobby->list_servers(); + } reply->deleteLater(); } |
