From 1a333f7968c0382b3dbcee6042cc3928a2778c71 Mon Sep 17 00:00:00 2001 From: Alex Kh Date: Wed, 8 Dec 2021 17:10:15 +0400 Subject: [PATCH] [WIP] move connection state call to main thread --- client/protocols/ios_vpnprotocol.mm | 54 ++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/client/protocols/ios_vpnprotocol.mm b/client/protocols/ios_vpnprotocol.mm index 38a75b23..866e6500 100644 --- a/client/protocols/ios_vpnprotocol.mm +++ b/client/protocols/ios_vpnprotocol.mm @@ -88,7 +88,11 @@ void IOSVpnProtocol::stop() { if (!m_controller) { qDebug() << "Not correctly initialized"; - emit connectionStateChanged(Disconnected); + + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Disconnected); + }); + return; } @@ -243,29 +247,39 @@ void IOSVpnProtocol::setupWireguardProtocol(const QtJson::JsonObject &result) case ConnectionStateError: { [m_controller dealloc]; m_controller = nullptr; - emit connectionStateChanged(VpnConnectionState::Error); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Error); + }); return; } case ConnectionStateConnected: { Q_ASSERT(date); QDateTime qtDate(QDateTime::fromNSDate(date)); - emit connectionStateChanged(VpnConnectionState::Connected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Connected); + }); return; } case ConnectionStateDisconnected: // Just in case we are connecting, let's call disconnect. [m_controller disconnect]; - emit connectionStateChanged(VpnConnectionState::Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Disconnected); + }); return; } } callback:^(BOOL a_connected) { qDebug() << "State changed: " << a_connected; if (a_connected) { - emit connectionStateChanged(Connected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Connected); + }); return; } - emit connectionStateChanged(Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Disconnected); + }); }]; } @@ -290,29 +304,39 @@ void IOSVpnProtocol::setupOpenVPNProtocol(const QtJson::JsonObject &result) case ConnectionStateError: { [m_controller dealloc]; m_controller = nullptr; - emit connectionStateChanged(VpnConnectionState::Error); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Error); + }); return; } case ConnectionStateConnected: { Q_ASSERT(date); QDateTime qtDate(QDateTime::fromNSDate(date)); - emit connectionStateChanged(VpnConnectionState::Connected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Connected); + }); return; } case ConnectionStateDisconnected: // Just in case we are connecting, let's call disconnect. [m_controller disconnect]; - emit connectionStateChanged(VpnConnectionState::Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(VpnConnectionState::Disconnected); + }); return; } } callback:^(BOOL a_connected) { qDebug() << "OVPN State changed: " << a_connected; if (a_connected) { - emit connectionStateChanged(Connected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Connected); + }); return; } - emit connectionStateChanged(Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Disconnected); + }); }]; } @@ -367,7 +391,9 @@ void IOSVpnProtocol::launchWireguardTunnel(const QtJson::JsonObject &result) reason:0 failureCallback:^() { qDebug() << "Wireguard Protocol - connection failed"; - emit connectionStateChanged(Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Disconnected); + }); }]; } @@ -379,7 +405,9 @@ void IOSVpnProtocol::launchOpenVPNTunnel(const QtJson::JsonObject &result) [m_controller connectWithOvpnConfig:ovpnConfig.toNSString() failureCallback:^{ qDebug() << "IOSVPNProtocol - connection failed"; - emit connectionStateChanged(Disconnected); + dispatch_async(dispatch_get_main_queue(), ^{ + emit connectionStateChanged(Disconnected); + }); }]; }