@@ -109,11 +109,36 @@ final class NetworkManager {
109
109
}
110
110
}
111
111
112
- class func connectSavedNetworks( ) {
112
+ class func scanSavedNetworks( ) {
113
+ DispatchQueue . global ( qos: . background) . async {
114
+ let scanTimer : Timer = Timer . scheduledTimer ( withTimeInterval: 5 , repeats: true ) { timer in
115
+ let dispatchSemaphore = DispatchSemaphore ( value: 0 )
116
+ var targetNetworks : [ NetworkInfo ] ?
117
+ NetworkManager . scanNetwork { networkList in
118
+ targetNetworks = CredentialsManager . instance. getSavedNetworks ( ) . filter { networkList. contains ( $0) }
119
+ dispatchSemaphore. signal ( )
120
+ }
121
+ dispatchSemaphore. wait ( )
122
+ if targetNetworks != nil , targetNetworks!. count > 0 {
123
+ // This will stop the timer completely
124
+ timer. invalidate ( )
125
+ Log . debug ( " Auto connect timer stopped " )
126
+ connectSavedNetworks ( networks: targetNetworks!)
127
+ }
128
+ }
129
+ // Start executing code inside the timer immediately
130
+ scanTimer. fire ( )
131
+ let currentRunLoop = RunLoop . current
132
+ currentRunLoop. add ( scanTimer, forMode: . common)
133
+ currentRunLoop. run ( )
134
+ }
135
+ }
136
+
137
+ private class func connectSavedNetworks( networks: [ NetworkInfo ] ) {
113
138
DispatchQueue . global ( qos: . background) . async {
114
139
let dispatchSemaphore = DispatchSemaphore ( value: 0 )
115
140
var connected = false
116
- for network in CredentialsManager . instance . getSavedNetworks ( ) where !connected {
141
+ for network in networks where !connected {
117
142
connect ( networkInfo: network) { ( result: Bool ) -> Void in
118
143
connected = result
119
144
dispatchSemaphore. signal ( )
0 commit comments