]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
websocket: remove explicit disconnect
authortobtoht <tob@featherwallet.org>
Wed, 1 Mar 2023 12:28:01 +0000 (13:28 +0100)
committertobtoht <tob@featherwallet.org>
Wed, 1 Mar 2023 12:28:01 +0000 (13:28 +0100)
src/SettingsDialog.cpp
src/WindowManager.cpp
src/dialog/DebugInfoDialog.cpp
src/libwalletqt/Wallet.cpp
src/utils/AppData.cpp
src/utils/TorManager.cpp
src/utils/WebsocketClient.cpp
src/utils/WebsocketClient.h
src/utils/WebsocketNotifier.cpp
src/utils/WebsocketNotifier.h
src/utils/nodes.cpp

index d97635cef35fbddcfbbefcaaf11e3945e264e93e..227ad3b5e9fc6b4b817dad77c7b36baa84bc5bb5 100644 (file)
@@ -381,9 +381,9 @@ void Settings::setSelection(int index) {
 
 void Settings::enableWebsocket(bool enabled) {
     if (enabled && !config()->get(Config::offlineMode).toBool() && !config()->get(Config::disableWebsocket).toBool()) {
-        websocketNotifier()->websocketClient.restart();
+        websocketNotifier()->websocketClient->restart();
     } else {
-        websocketNotifier()->websocketClient.stop();
+        websocketNotifier()->websocketClient->stop();
     }
     ui->nodeWidget->onWebsocketStatusChanged();
     emit websocketStatusChanged(enabled);
index 131f55d2e933ff550a08655d4d51b41b9b93a027..610e9ae812ae63ee8da73c17fcd9a62694b761d8 100644 (file)
@@ -22,8 +22,8 @@ WindowManager::WindowManager(QObject *parent, EventFilter *eventFilter)
     , eventFilter(eventFilter)
 {
     m_walletManager = WalletManager::instance();
-    m_splashDialog = new SplashDialog;
-    m_cleanupThread = new QThread();
+    m_splashDialog = new SplashDialog();
+    m_cleanupThread = new QThread(this);
 
     connect(m_walletManager, &WalletManager::walletOpened,        this, &WindowManager::onWalletOpened);
     connect(m_walletManager, &WalletManager::walletCreated,       this, &WindowManager::onWalletCreated);
@@ -79,9 +79,10 @@ void WindowManager::close() {
     }
 
     m_wizard->deleteLater();
+    m_splashDialog->deleteLater();
+    m_tray->deleteLater();
 
     torManager()->stop();
-    m_tray->hide();
 
     QApplication::quit();
 }
@@ -612,10 +613,10 @@ void WindowManager::onProxySettingsChanged() {
     qWarning() << "Proxy: " << proxy.hostName() << " " << proxy.port();
 
     // Switch websocket to new proxy and update URL
-    websocketNotifier()->websocketClient.stop();
-    websocketNotifier()->websocketClient.webSocket.setProxy(proxy);
-    websocketNotifier()->websocketClient.nextWebsocketUrl();
-    websocketNotifier()->websocketClient.restart();
+    websocketNotifier()->websocketClient->stop();
+    websocketNotifier()->websocketClient->webSocket->setProxy(proxy);
+    websocketNotifier()->websocketClient->nextWebsocketUrl();
+    websocketNotifier()->websocketClient->restart();
 
     emit proxySettingsChanged();
 }
index 05e8382153c6ffe181891a576088a4241f380866..00c164bcb430b91dd86592415e69d571b4ca3e42 100644 (file)
@@ -60,7 +60,7 @@ void DebugInfoDialog::updateInfo() {
     auto node = m_nodes->connection();
     ui->label_remoteNode->setText(node.toAddress());
     ui->label_walletStatus->setText(this->statusToString(m_wallet->connectionStatus()));
-    QString websocketStatus = Utils::QtEnumToString(websocketNotifier()->websocketClient.webSocket.state()).remove("State");
+    QString websocketStatus = Utils::QtEnumToString(websocketNotifier()->websocketClient->webSocket->state()).remove("State");
     if (config()->get(Config::disableWebsocket).toBool()) {
         websocketStatus = "Disabled";
     }
index 2ed4e36b0a162770327ec1e41373e96b9b08fbb6..751d14edaad1016683124b1221c2f8409e992c99 100644 (file)
@@ -444,8 +444,6 @@ void Wallet::onUpdated() {
 }
 
 void Wallet::onRefreshed(bool success, const QString &message) {
-    qDebug() << "onRefreshed";
-
     if (!success) {
         setConnectionStatus(ConnectionStatus_Disconnected);
         // Something went wrong during refresh, in some cases we need to notify the user
index 8434e2f85df8d2fe000537dd3756a0d8ac60fe3f..44511e27dbc7d69cbe6939731618dbf315d8417f 100644 (file)
@@ -13,10 +13,10 @@ AppData::AppData(QObject *parent)
     auto genesis_timestamp = this->restoreHeights[NetworkType::Type::MAINNET]->data.firstKey();
     this->txFiatHistory = new TxFiatHistory(genesis_timestamp, Config::defaultConfigDir().path(), this);
 
-    connect(&websocketNotifier()->websocketClient, &WebsocketClient::connectionEstablished, this->txFiatHistory, &TxFiatHistory::onUpdateDatabase);
+    connect(websocketNotifier()->websocketClient, &WebsocketClient::connectionEstablished, this->txFiatHistory, &TxFiatHistory::onUpdateDatabase);
     connect(this->txFiatHistory, &TxFiatHistory::requestYear, [](int year){
         QByteArray data = QString(R"({"cmd": "txFiatHistory", "data": {"year": %1}})").arg(year).toUtf8();
-        websocketNotifier()->websocketClient.sendMsg(data);
+        websocketNotifier()->websocketClient->sendMsg(data);
     });
 
     connect(websocketNotifier(), &WebsocketNotifier::CryptoRatesReceived, &this->prices, &Prices::cryptoPricesReceived);
index fe640099449554c87244d30c6c4c93d6bc8c3774..75de7ea39cfb3b320b7da9ff4fd00e8ce8327c9a 100644 (file)
@@ -316,6 +316,4 @@ TorManager* TorManager::instance()
     return m_instance;
 }
 
-TorManager::~TorManager() {
-    qDebug() << "~TorManager";
-}
+TorManager::~TorManager() = default;
index 39142ed76afbc1ad3d2d6a661c2af962360f94b5..d7348065355ef5d2b3271d966bd556a5cc9fbada 100644 (file)
 
 WebsocketClient::WebsocketClient(QObject *parent)
     : QObject(parent)
+    , webSocket(new QWebSocket(QString(), QWebSocketProtocol::VersionLatest, this))
 {
-    connect(&webSocket, &QWebSocket::stateChanged, this, &WebsocketClient::onStateChanged);
-    connect(&webSocket, &QWebSocket::connected, this, &WebsocketClient::onConnected);
-    connect(&webSocket, &QWebSocket::disconnected, this, &WebsocketClient::onDisconnected);
-    connect(&webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), this, &WebsocketClient::onError);
+    connect(webSocket, &QWebSocket::stateChanged, this, &WebsocketClient::onStateChanged);
+    connect(webSocket, &QWebSocket::connected, this, &WebsocketClient::onConnected);
+    connect(webSocket, &QWebSocket::disconnected, this, &WebsocketClient::onDisconnected);
+    connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), this, &WebsocketClient::onError);
 
-    connect(&webSocket, &QWebSocket::binaryMessageReceived, this, &WebsocketClient::onbinaryMessageReceived);
+    connect(webSocket, &QWebSocket::binaryMessageReceived, this, &WebsocketClient::onbinaryMessageReceived);
 
     // Keep websocket connection alive
     connect(&m_pingTimer, &QTimer::timeout, [this]{
-        if (webSocket.state() == QAbstractSocket::ConnectedState) {
-            webSocket.ping();
+        if (webSocket->state() == QAbstractSocket::ConnectedState) {
+            webSocket->ping();
         }
     });
     m_pingTimer.setInterval(30 * 1000);
@@ -34,8 +35,8 @@ WebsocketClient::WebsocketClient(QObject *parent)
 }
 
 void WebsocketClient::sendMsg(const QByteArray &data) {
-    if (webSocket.state() == QAbstractSocket::ConnectedState) {
-        webSocket.sendBinaryMessage(data);
+    if (webSocket->state() == QAbstractSocket::ConnectedState) {
+        webSocket->sendBinaryMessage(data);
     }
 }
 
@@ -53,10 +54,10 @@ void WebsocketClient::start() {
     }
 
     // connect & reconnect on errors/close
-    auto state = webSocket.state();
+    auto state = webSocket->state();
     if (state != QAbstractSocket::ConnectedState && state != QAbstractSocket::ConnectingState) {
         qDebug() << "WebSocket connect:" << m_url.url();
-        webSocket.open(m_url);
+        webSocket->open(m_url);
     }
 }
 
@@ -67,7 +68,7 @@ void WebsocketClient::restart() {
 
 void WebsocketClient::stop() {
     m_stopped = true;
-    webSocket.close();
+    webSocket->close();
     m_connectionTimeout.stop();
 }
 
@@ -93,9 +94,9 @@ void WebsocketClient::onStateChanged(QAbstractSocket::SocketState state) {
 
 void WebsocketClient::onError(QAbstractSocket::SocketError error) {
     qCritical() << "WebSocket error: " << error;
-    auto state = webSocket.state();
+    auto state = webSocket->state();
     if (state == QAbstractSocket::ConnectedState || state == QAbstractSocket::ConnectingState) {
-        webSocket.abort();
+        webSocket->abort();
     }
 }
 
@@ -143,8 +144,4 @@ void WebsocketClient::onbinaryMessageReceived(const QByteArray &message) {
     emit WSMessage(object);
 }
 
-WebsocketClient::~WebsocketClient() {
-    // webSocket may fire QWebSocket::disconnected after WebsocketClient is destroyed
-    // explicitly disconnect to prevent crash
-    webSocket.disconnect();
-}
\ No newline at end of file
+WebsocketClient::~WebsocketClient() = default;
\ No newline at end of file
index 2368253c4daa1f9a9aa2f6903c69028119e7a96e..0f0833e0bb184ee760e9edad73450a1604b460f7 100644 (file)
@@ -23,7 +23,7 @@ public:
     void sendMsg(const QByteArray &data);
     void nextWebsocketUrl();
 
-    QWebSocket webSocket;
+    QWebSocket *webSocket;
 
 signals:
     void connectionEstablished();
index 750fc76b4dc26e13fbf45cc28ec07ad4cf6d05ed..4cf4c0d16c1746b1168ca2a516aaa5e98c3fcd26 100644 (file)
@@ -12,7 +12,7 @@ WebsocketNotifier::WebsocketNotifier(QObject *parent)
     : QObject(parent)
     , websocketClient(new WebsocketClient(this))
 {
-    connect(&websocketClient, &WebsocketClient::WSMessage, this, &WebsocketNotifier::onWSMessage);
+    connect(websocketClient, &WebsocketClient::WSMessage, this, &WebsocketNotifier::onWSMessage);
 }
 
 QPointer<WebsocketNotifier> WebsocketNotifier::m_instance(nullptr);
index a1d69378fc6320e01603f9ef9c2454580d90dff3..228f3f2db1dfaa92a5cdee7e200a1bcb4b2471c1 100644 (file)
@@ -24,7 +24,7 @@ public:
     explicit WebsocketNotifier(QObject *parent);
 
     QMap<NetworkType::Type, int> heights;
-    WebsocketClient websocketClient;
+    WebsocketClient *websocketClient;
 
     static WebsocketNotifier* instance();
     void emitCache();
index 3f9d7af5eaa75acd9c6e60923abc78eb5a225800..2ca9ea235cce4f4fb85704482b2134b95f2ecc1c 100644 (file)
@@ -595,6 +595,4 @@ void Nodes::allowConnection() {
     m_allowConnection = true;
 }
 
-Nodes::~Nodes() {
-    qDebug() << "~Nodes";
-}
+Nodes::~Nodes() = default;