rework ms list callback logic (#927)

fixes crash when joining server before getting ms list back
This commit is contained in:
lambdcalculus 2023-11-30 09:17:42 -03:00 committed by GitHub
parent e6e5e86f68
commit e9469a5ca4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 11 deletions

View File

@ -55,7 +55,7 @@ signals:
void server_connected(bool state); void server_connected(bool state);
public slots: public slots:
void get_server_list(const std::function<void()> &cb); void get_server_list();
void ship_server_packet(QString p_packet); void ship_server_packet(QString p_packet);
void join_to_server(); void join_to_server();
void handle_server_packet(const QString& p_data); void handle_server_packet(const QString& p_data);
@ -64,8 +64,7 @@ public slots:
const std::function<void(QString)> &cb); const std::function<void(QString)> &cb);
void send_heartbeat(); void send_heartbeat();
private slots: private slots:
void ms_request_finished(QNetworkReply *reply, void ms_request_finished(QNetworkReply *reply);
const std::function<void()> &cb);
private: private:
QString get_user_agent() const { QString get_user_agent() const {

View File

@ -229,7 +229,7 @@ void Lobby::loadUI()
void Lobby::on_refresh_released() void Lobby::on_refresh_released()
{ {
net_manager->get_server_list(std::bind(&Lobby::list_servers, this)); net_manager->get_server_list();
get_motd(); get_motd();
list_favorites(); list_favorites();
} }

View File

@ -56,7 +56,7 @@ int main(int argc, char *argv[])
main_app.installTranslator(&appTranslator); main_app.installTranslator(&appTranslator);
main_app.construct_lobby(); 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.net_manager->send_heartbeat();
main_app.w_lobby->show(); main_app.w_lobby->show();
return main_app.exec(); return main_app.exec();

View File

@ -29,18 +29,17 @@ NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent)
heartbeat_timer->start(heartbeat_interval); 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")); QNetworkRequest req(QUrl(ms_baseurl + "/servers"));
req.setRawHeader("User-Agent", get_user_agent().toUtf8()); req.setRawHeader("User-Agent", get_user_agent().toUtf8());
QNetworkReply *reply = http->get(req); QNetworkReply *reply = http->get(req);
connect(reply, &QNetworkReply::finished, 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, void NetworkManager::ms_request_finished(QNetworkReply *reply)
const std::function<void()> &cb)
{ {
QJsonDocument json = QJsonDocument::fromJson(reply->readAll()); QJsonDocument json = QJsonDocument::fromJson(reply->readAll());
if (json.isNull()) { if (json.isNull()) {
@ -72,8 +71,9 @@ void NetworkManager::ms_request_finished(QNetworkReply *reply,
} }
ao_app->set_server_list(server_list); ao_app->set_server_list(server_list);
cb(); if (ao_app->lobby_constructed) {
ao_app->w_lobby->list_servers();
}
reply->deleteLater(); reply->deleteLater();
} }