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);
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 {

View File

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

View File

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

View File

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