From 3832b301ae28e8d729f61102748be196c94438f2 Mon Sep 17 00:00:00 2001 From: Kamil Grzegorzewicz Date: Sun, 26 Apr 2020 22:50:49 +0200 Subject: [PATCH 1/2] Fix already connected pheriperal after restoration --- Bluejay/Bluejay/Bluejay.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Bluejay/Bluejay/Bluejay.swift b/Bluejay/Bluejay/Bluejay.swift index b1c9d89..7c97b91 100644 --- a/Bluejay/Bluejay/Bluejay.swift +++ b/Bluejay/Bluejay/Bluejay.swift @@ -1305,7 +1305,7 @@ extension Bluejay: CBCentralManagerDelegate { connectingCallback = nil - connectedPeripheral = connectingPeripheral + connectedPeripheral = connectingPeripheral ?? connectedPeripheral connectingPeripheral = nil precondition(connectedPeripheral != nil, "Connected peripheral is assigned a nil value despite Bluejay has successfully finished a connection.") @@ -1313,7 +1313,9 @@ extension Bluejay: CBCentralManagerDelegate { shouldAutoReconnect = true debugLog("Should auto-reconnect: \(shouldAutoReconnect)") - queue.process(event: .didConnectPeripheral(connectedPeripheral!), error: nil) + if queue.first is Connection { + queue.process(event: .didConnectPeripheral(connectedPeripheral!), error: nil) + } for observer in connectionObservers { observer.weakReference?.connected(to: connectedPeripheral!.identifier) From fc88b77420507c1c3f59cce22daa7daa9710d407 Mon Sep 17 00:00:00 2001 From: Kamil Grzegorzewicz Date: Thu, 25 Jun 2020 14:01:38 +0200 Subject: [PATCH 2/2] Skip observers notifying about already connected pheriperal Note: It should be already notified by restoration logic/mechanism --- Bluejay/Bluejay/Bluejay.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Bluejay/Bluejay/Bluejay.swift b/Bluejay/Bluejay/Bluejay.swift index 7c97b91..942c742 100644 --- a/Bluejay/Bluejay/Bluejay.swift +++ b/Bluejay/Bluejay/Bluejay.swift @@ -1305,6 +1305,10 @@ extension Bluejay: CBCentralManagerDelegate { connectingCallback = nil + let wasConnected = isConnected + + debugLog("Central manager connected to perihperal already: \(wasConnected)") + connectedPeripheral = connectingPeripheral ?? connectedPeripheral connectingPeripheral = nil @@ -1317,6 +1321,10 @@ extension Bluejay: CBCentralManagerDelegate { queue.process(event: .didConnectPeripheral(connectedPeripheral!), error: nil) } + guard !wasConnected else { + return + } + for observer in connectionObservers { observer.weakReference?.connected(to: connectedPeripheral!.identifier) }