From ec0007506632f502d974078a933e13ef8542ba13 Mon Sep 17 00:00:00 2001 From: WisoAltred Date: Tue, 27 May 2025 14:53:55 +0300 Subject: [PATCH 1/8] Add reconnect button to disconnection notice. Reads and begins the connection process to the last server the user disconnected from. Doesn't complete the connection process.. yet. --- src/aoapplication.cpp | 20 +++++++++++----- src/aoapplication.h | 2 ++ src/debug_functions.cpp | 53 +++++++++++++++++++++++++++++++++++++++++ src/debug_functions.h | 13 ++++++++++ src/networkmanager.cpp | 6 +++++ src/networkmanager.h | 3 +++ 6 files changed, 91 insertions(+), 6 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 774816bbf..3361c5388 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -20,6 +20,8 @@ AOApplication::AOApplication(QObject *parent) : QObject(parent) { net_manager = new NetworkManager(this); + debug_func = new debug_functions(this); + discord = new AttorneyOnline::Discord(); asset_lookup_cache.reserve(2048); @@ -142,10 +144,12 @@ void AOApplication::server_disconnected() { if (w_courtroom->isVisible()) { - call_notice(tr("Disconnected from server.")); + construct_lobby(); + destruct_courtroom(); + // call_notice(tr("Disconnected from server.")); + debug_func->call_notice_reconnect(tr("Disconnected from server, reconnect?")); } - construct_lobby(); - destruct_courtroom(); + } Options::getInstance().setServerSubTheme(QString()); } @@ -158,14 +162,18 @@ void AOApplication::loading_cancelled() void AOApplication::call_settings_menu() { AOOptionsDialog *l_dialog = new AOOptionsDialog(this); + + // force disconnect as a test + server_disconnected(); + if (is_courtroom_constructed()) { connect(l_dialog, &AOOptionsDialog::reloadThemeRequest, w_courtroom, &Courtroom::on_reload_theme_clicked); } - if (is_lobby_constructed()) - {} - l_dialog->exec(); + // if (is_lobby_constructed()) + // {} + // l_dialog->exec(); if (is_courtroom_constructed()) { diff --git a/src/aoapplication.h b/src/aoapplication.h index 5e67fc862..149c326ab 100644 --- a/src/aoapplication.h +++ b/src/aoapplication.h @@ -29,6 +29,7 @@ class NetworkManager; class Lobby; class Courtroom; class Options; +class debug_functions; class VPath : QString { @@ -57,6 +58,7 @@ class AOApplication : public QObject ~AOApplication(); NetworkManager *net_manager; + debug_functions *debug_func; Lobby *w_lobby = nullptr; Courtroom *w_courtroom = nullptr; AttorneyOnline::Discord *discord; diff --git a/src/debug_functions.cpp b/src/debug_functions.cpp index 79be51b32..2b28709a8 100644 --- a/src/debug_functions.cpp +++ b/src/debug_functions.cpp @@ -1,4 +1,6 @@ #include "debug_functions.h" +#include "aoapplication.h" +#include "networkmanager.h" #include #include @@ -9,6 +11,12 @@ #include +debug_functions::debug_functions(AOApplication *parent) + : QObject(parent) +{ + ao_app = parent; +} + void call_error(QString p_message) { QMessageBox *msgBox = new QMessageBox; @@ -58,3 +66,48 @@ void call_notice(QString p_message) msgBox->exec(); } + +void debug_functions::call_notice_reconnect(QString p_message) +{ + auto *msgBox = new QMessageBox; + + msgBox->setAttribute(Qt::WA_DeleteOnClose); + msgBox->setText(p_message); + msgBox->setWindowTitle(QCoreApplication::translate("debug_functions", "Notice")); + + msgBox->setStandardButtons(QMessageBox::Ok); + msgBox->setDefaultButton(QMessageBox::Ok); + msgBox->defaultButton()->setEnabled(false); + + QPushButton *reconnectButton = msgBox->addButton(QObject::tr("Reconnect"), QMessageBox::ActionRole); + + QTimer intervalTimer; + intervalTimer.setInterval(1000); + + int counter = 3; + const auto updateCounter = [msgBox, &counter] { + if (counter <= 0) + { + return; + } + msgBox->defaultButton()->setText(QString("%1 (%2)").arg(QDialogButtonBox::tr("OK")).arg(counter)); + counter--; + }; + + QObject::connect(&intervalTimer, &QTimer::timeout, msgBox, updateCounter); + intervalTimer.start(); + updateCounter(); + + QTimer::singleShot(3000, msgBox, [msgBox, &intervalTimer] { + msgBox->defaultButton()->setEnabled(true); + msgBox->defaultButton()->setText(QDialogButtonBox::tr("OK")); + intervalTimer.stop(); + }); + + msgBox->exec(); + + if (msgBox->clickedButton() == reconnectButton) + { + ao_app->net_manager->reconnect_to_last_server(); + } +} diff --git a/src/debug_functions.h b/src/debug_functions.h index 992ad37b5..0d2ff7e54 100644 --- a/src/debug_functions.h +++ b/src/debug_functions.h @@ -1,6 +1,19 @@ #pragma once +#include "aoapplication.h" + #include void call_error(QString message); void call_notice(QString message); + +class debug_functions : public QObject +{ + Q_OBJECT + +public: + explicit debug_functions(AOApplication *parent); + AOApplication *ao_app; + + void call_notice_reconnect(QString message); +}; diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index 500b2c832..e92c6c5fa 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -144,6 +144,7 @@ void NetworkManager::request_document(MSDocumentType document_type, const std::f void NetworkManager::connect_to_server(ServerInfo server) { + m_last_server = server; disconnect_from_server(); qInfo().noquote() << QObject::tr("Connecting to %1").arg(server.toString()); @@ -167,6 +168,11 @@ void NetworkManager::disconnect_from_server() } } +void NetworkManager::reconnect_to_last_server() +{ + connect_to_server(m_last_server); +} + void NetworkManager::ship_server_packet(AOPacket packet) { if (!m_connection) diff --git a/src/networkmanager.h b/src/networkmanager.h index 8f2d8d426..b9b8fd6eb 100644 --- a/src/networkmanager.h +++ b/src/networkmanager.h @@ -28,6 +28,7 @@ class NetworkManager : public QObject void connect_to_server(ServerInfo p_server); void disconnect_from_server(); + void reconnect_to_last_server(); QString get_user_agent() const; @@ -60,4 +61,6 @@ private Q_SLOTS: const int heartbeat_interval = 60 * 5 * 1000; unsigned int s_decryptor = 5; + + ServerInfo m_last_server; }; From 8d8512ecff3a27a29611c5219eddf43d78eec228 Mon Sep 17 00:00:00 2001 From: Wiso <61384316+WisoAltred@users.noreply.github.com> Date: Tue, 27 May 2025 19:05:45 +0300 Subject: [PATCH 2/8] clang formatting --- src/aoapplication.cpp | 2 -- src/networkmanager.cpp | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 3361c5388..4de43491f 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -149,7 +149,6 @@ void AOApplication::server_disconnected() // call_notice(tr("Disconnected from server.")); debug_func->call_notice_reconnect(tr("Disconnected from server, reconnect?")); } - } Options::getInstance().setServerSubTheme(QString()); } @@ -162,7 +161,6 @@ void AOApplication::loading_cancelled() void AOApplication::call_settings_menu() { AOOptionsDialog *l_dialog = new AOOptionsDialog(this); - // force disconnect as a test server_disconnected(); diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index e92c6c5fa..f21cf2884 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -170,7 +170,7 @@ void NetworkManager::disconnect_from_server() void NetworkManager::reconnect_to_last_server() { - connect_to_server(m_last_server); + connect_to_server(m_last_server); } void NetworkManager::ship_server_packet(AOPacket packet) From 65f564a16b1158ab5996f2a8af03910ebb3580d2 Mon Sep 17 00:00:00 2001 From: Wiso <61384316+WisoAltred@users.noreply.github.com> Date: Fri, 30 May 2025 00:03:27 +0300 Subject: [PATCH 3/8] Remove class from debug_functions, add prompt into AoApplication instead. Co-Authored-By: Leifa <26681464+TrickyLeifa@users.noreply.github.com> --- src/aoapplication.cpp | 21 +++++++++------- src/debug_functions.cpp | 53 ----------------------------------------- src/debug_functions.h | 13 ---------- 3 files changed, 12 insertions(+), 75 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 4de43491f..d44aa0b51 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -1,7 +1,6 @@ #include "aoapplication.h" #include "courtroom.h" -#include "debug_functions.h" #include "lobby.h" #include "networkmanager.h" #include "options.h" @@ -20,7 +19,6 @@ AOApplication::AOApplication(QObject *parent) : QObject(parent) { net_manager = new NetworkManager(this); - debug_func = new debug_functions(this); discord = new AttorneyOnline::Discord(); @@ -140,17 +138,22 @@ QString AOApplication::find_image(QStringList p_list) void AOApplication::server_disconnected() { + bool try_reconnect = false; if (is_courtroom_constructed()) { - if (w_courtroom->isVisible()) - { - construct_lobby(); - destruct_courtroom(); - // call_notice(tr("Disconnected from server.")); - debug_func->call_notice_reconnect(tr("Disconnected from server, reconnect?")); - } + try_reconnect = w_courtroom->isVisible(); + construct_lobby(); + destruct_courtroom(); } Options::getInstance().setServerSubTheme(QString()); + + if (try_reconnect && QMessageBox::question(nullptr, tr("Server Disconnected"), + tr("Connection to the server has been lost. " + "Do you want to reconnect?"), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) + { + net_manager->reconnect_to_last_server(); + } } void AOApplication::loading_cancelled() diff --git a/src/debug_functions.cpp b/src/debug_functions.cpp index 2b28709a8..79be51b32 100644 --- a/src/debug_functions.cpp +++ b/src/debug_functions.cpp @@ -1,6 +1,4 @@ #include "debug_functions.h" -#include "aoapplication.h" -#include "networkmanager.h" #include #include @@ -11,12 +9,6 @@ #include -debug_functions::debug_functions(AOApplication *parent) - : QObject(parent) -{ - ao_app = parent; -} - void call_error(QString p_message) { QMessageBox *msgBox = new QMessageBox; @@ -66,48 +58,3 @@ void call_notice(QString p_message) msgBox->exec(); } - -void debug_functions::call_notice_reconnect(QString p_message) -{ - auto *msgBox = new QMessageBox; - - msgBox->setAttribute(Qt::WA_DeleteOnClose); - msgBox->setText(p_message); - msgBox->setWindowTitle(QCoreApplication::translate("debug_functions", "Notice")); - - msgBox->setStandardButtons(QMessageBox::Ok); - msgBox->setDefaultButton(QMessageBox::Ok); - msgBox->defaultButton()->setEnabled(false); - - QPushButton *reconnectButton = msgBox->addButton(QObject::tr("Reconnect"), QMessageBox::ActionRole); - - QTimer intervalTimer; - intervalTimer.setInterval(1000); - - int counter = 3; - const auto updateCounter = [msgBox, &counter] { - if (counter <= 0) - { - return; - } - msgBox->defaultButton()->setText(QString("%1 (%2)").arg(QDialogButtonBox::tr("OK")).arg(counter)); - counter--; - }; - - QObject::connect(&intervalTimer, &QTimer::timeout, msgBox, updateCounter); - intervalTimer.start(); - updateCounter(); - - QTimer::singleShot(3000, msgBox, [msgBox, &intervalTimer] { - msgBox->defaultButton()->setEnabled(true); - msgBox->defaultButton()->setText(QDialogButtonBox::tr("OK")); - intervalTimer.stop(); - }); - - msgBox->exec(); - - if (msgBox->clickedButton() == reconnectButton) - { - ao_app->net_manager->reconnect_to_last_server(); - } -} diff --git a/src/debug_functions.h b/src/debug_functions.h index 0d2ff7e54..992ad37b5 100644 --- a/src/debug_functions.h +++ b/src/debug_functions.h @@ -1,19 +1,6 @@ #pragma once -#include "aoapplication.h" - #include void call_error(QString message); void call_notice(QString message); - -class debug_functions : public QObject -{ - Q_OBJECT - -public: - explicit debug_functions(AOApplication *parent); - AOApplication *ao_app; - - void call_notice_reconnect(QString message); -}; From 51e41c353236e5d3fd3a1a0e00780299321cc6ef Mon Sep 17 00:00:00 2001 From: Wiso <61384316+WisoAltred@users.noreply.github.com> Date: Fri, 30 May 2025 00:10:44 +0300 Subject: [PATCH 4/8] clang formatting 2 --- src/aoapplication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index d44aa0b51..a9218da02 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -147,7 +147,7 @@ void AOApplication::server_disconnected() } Options::getInstance().setServerSubTheme(QString()); - if (try_reconnect && QMessageBox::question(nullptr, tr("Server Disconnected"), + if (try_reconnect && QMessageBox::question(nullptr,tr("Server Disconnected"), tr("Connection to the server has been lost. " "Do you want to reconnect?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) From d4438e283463a4f02b03d5e8dedebc87f72b4e2f Mon Sep 17 00:00:00 2001 From: Wiso <61384316+WisoAltred@users.noreply.github.com> Date: Fri, 30 May 2025 00:18:00 +0300 Subject: [PATCH 5/8] clang formatting 3 --- src/aoapplication.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index a9218da02..f6cfde6db 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -172,9 +172,9 @@ void AOApplication::call_settings_menu() connect(l_dialog, &AOOptionsDialog::reloadThemeRequest, w_courtroom, &Courtroom::on_reload_theme_clicked); } - // if (is_lobby_constructed()) - // {} - // l_dialog->exec(); + // if (is_lobby_constructed()) + // {} + // l_dialog->exec(); if (is_courtroom_constructed()) { From 81cae166cbaee9417ccc74b762f0dfa419506b72 Mon Sep 17 00:00:00 2001 From: Wiso <61384316+WisoAltred@users.noreply.github.com> Date: Fri, 30 May 2025 00:23:01 +0300 Subject: [PATCH 6/8] clang formatting 4 --- src/aoapplication.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index f6cfde6db..4f995a7f9 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -147,7 +147,8 @@ void AOApplication::server_disconnected() } Options::getInstance().setServerSubTheme(QString()); - if (try_reconnect && QMessageBox::question(nullptr,tr("Server Disconnected"), + if (try_reconnect && QMessageBox::question(nullptr, + tr("Server Disconnected"), tr("Connection to the server has been lost. " "Do you want to reconnect?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) @@ -172,9 +173,9 @@ void AOApplication::call_settings_menu() connect(l_dialog, &AOOptionsDialog::reloadThemeRequest, w_courtroom, &Courtroom::on_reload_theme_clicked); } - // if (is_lobby_constructed()) - // {} - // l_dialog->exec(); + // if (is_lobby_constructed()) + // {} + // l_dialog->exec(); if (is_courtroom_constructed()) { From 0198674fb4a153415e3ec5fbabf28b49f0aa926c Mon Sep 17 00:00:00 2001 From: WisoAltred Date: Wed, 4 Jun 2025 16:40:19 +0300 Subject: [PATCH 7/8] Complete connection process Reconnects to last server fully. Sends to character select screen. --- src/networkmanager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index f21cf2884..c54e3076b 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -144,9 +144,10 @@ void NetworkManager::request_document(MSDocumentType document_type, const std::f void NetworkManager::connect_to_server(ServerInfo server) { - m_last_server = server; disconnect_from_server(); + m_last_server = server; + qInfo().noquote() << QObject::tr("Connecting to %1").arg(server.toString()); m_connection = new WebSocketConnection(ao_app, this); @@ -170,6 +171,8 @@ void NetworkManager::disconnect_from_server() void NetworkManager::reconnect_to_last_server() { + connect(this, &NetworkManager::server_connected, this, &NetworkManager::join_to_server); + connect_to_server(m_last_server); } From fca3ac1ac701c4a589444d21673095cbcb3f11c3 Mon Sep 17 00:00:00 2001 From: WisoAltred Date: Tue, 24 Jun 2025 16:25:20 +0300 Subject: [PATCH 8/8] Add disconnection --- src/networkmanager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index c54e3076b..7904cb5f6 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -197,6 +197,7 @@ void NetworkManager::ship_server_packet(AOPacket packet) void NetworkManager::join_to_server() { + disconnect(this, &NetworkManager::server_connected, this, &NetworkManager::join_to_server); ship_server_packet(AOPacket("askchaa")); }