diff --git a/apps/ios/Shared/Model/NetworkObserver.swift b/apps/ios/Shared/Model/NetworkObserver.swift index 84c35afa07..a661157398 100644 --- a/apps/ios/Shared/Model/NetworkObserver.swift +++ b/apps/ios/Shared/Model/NetworkObserver.swift @@ -35,8 +35,12 @@ class NetworkObserver { online: path.status == .satisfied ) if (prevInfo != info) { + // iOS does not report the sockets of the previous network as broken, so the servers have to + // be reconnected. There is nothing to reconnect before the first network info is set. + let shouldReconnect = prevInfo != nil && info.online prevInfo = info setNetworkInfo(info) + if shouldReconnect { reconnectServers() } } } @@ -70,4 +74,15 @@ class NetworkObserver { } } } + + private func reconnectServers() { + Task { + if !hasChatCtrl() { return } + do { + try await reconnectAllServers() + } catch let err { + logger.error("reconnectAllServers error: \(responseError(err))") + } + } + } }