瀏覽代碼

BLE: Delay reconnect 2s after disconnect

Jonas Björkert 9 月之前
父節點
當前提交
46e86b80b7
共有 1 個文件被更改,包括 15 次插入3 次删除
  1. 15 3
      LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift

+ 15 - 3
LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift

@@ -223,11 +223,23 @@ class BluetoothDevice: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
 
     func centralManager(_: CBCentralManager, didDisconnectPeripheral _: CBPeripheral, error _: Error?) {
         timeStampLastStatusUpdate = Date()
-
         bluetoothDeviceDelegate?.didDisconnectFrom(bluetoothDevice: self)
+        cancelConnectionTimer()
+
+        guard let ownPeripheral = peripheral else { return }
 
-        if let ownPeripheral = peripheral {
-            centralManager?.connect(ownPeripheral, options: nil)
+        DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
+            guard let self = self,
+                  let manager = self.centralManager,
+                  manager.state == .poweredOn else { return }
+
+            switch ownPeripheral.state {
+            case .connected, .connecting:
+                // Already (re)connecting; do nothing
+                break
+            default:
+                manager.connect(ownPeripheral, options: nil)
+            }
         }
     }