Skip to content

Commit c25bedf

Browse files
authored
Merge pull request #440 from PhilipsHue/fix-reconnection-problems
Revert "Merge pull request #406 from plyobits/queue_messages"
2 parents f352c14 + fe136d6 commit c25bedf

File tree

12 files changed

+62
-43
lines changed

12 files changed

+62
-43
lines changed

example/pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,14 +402,14 @@ packages:
402402
path: "../packages/reactive_ble_mobile"
403403
relative: true
404404
source: path
405-
version: "5.0.1"
405+
version: "5.0.2"
406406
reactive_ble_platform_interface:
407407
dependency: transitive
408408
description:
409409
name: reactive_ble_platform_interface
410410
url: "https://pub.dartlang.org"
411411
source: hosted
412-
version: "5.0.1"
412+
version: "5.0.2"
413413
shelf:
414414
dependency: transitive
415415
description:

example/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_reactive_ble_example
22
description: Demonstrates how to use the flutter_reactive_ble plugin.
3-
version: 3.1.1+1
3+
version: 5.0.2
44
publish_to: 'none'
55

66
environment:
@@ -11,7 +11,7 @@ dependencies:
1111
flutter:
1212
sdk: flutter
1313
flutter_lints: ^1.0.4
14-
flutter_reactive_ble: ^5.0.1
14+
flutter_reactive_ble: ^5.0.2
1515
functional_data: ^1.0.0
1616
intl: ^0.17.0
1717

packages/flutter_reactive_ble/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 5.0.2
2+
3+
* Revert Queue up messages on iOS until event channel is ready. Fix #439
4+
15
## 5.0.1
26

37
* Bump protobuf so it includes binaries for Mac M1 #396.

packages/flutter_reactive_ble/pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,14 +374,14 @@ packages:
374374
name: reactive_ble_mobile
375375
url: "https://pub.dartlang.org"
376376
source: hosted
377-
version: "5.0.1"
377+
version: "5.0.2"
378378
reactive_ble_platform_interface:
379379
dependency: "direct main"
380380
description:
381381
name: reactive_ble_platform_interface
382382
url: "https://pub.dartlang.org"
383383
source: hosted
384-
version: "5.0.1"
384+
version: "5.0.2"
385385
shelf:
386386
dependency: transitive
387387
description:

packages/flutter_reactive_ble/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_reactive_ble
22
description: Reactive Bluetooth Low Energy (BLE) plugin that can communicate with multiple devices
3-
version: 5.0.1
3+
version: 5.0.2
44
homepage: https://github.com/PhilipsHue/flutter_reactive_ble
55

66
environment:
@@ -21,8 +21,8 @@ dependencies:
2121
sdk: flutter
2222
functional_data: ^1.0.0
2323
meta: ^1.3.0
24-
reactive_ble_mobile: ^5.0.1
25-
reactive_ble_platform_interface: ^5.0.1
24+
reactive_ble_mobile: ^5.0.2
25+
reactive_ble_platform_interface: ^5.0.2
2626
dev_dependencies:
2727
build_runner: ^2.1.2
2828
flutter_lints: ^1.0.4

packages/reactive_ble_mobile/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 5.0.2
2+
3+
* Revert Queue up messages on iOS until event channel is ready. Fix #439
4+
15
## 5.0.1
26

37
* Bump protobuf so it includes binaries for Mac M1 #396.

packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,10 @@ final class PluginController {
2121
}
2222
}
2323
}
24-
var discoveryQueue: [PlatformMethodResult] = [];
24+
var messageQueue: [CharacteristicValueInfo] = [];
2525
var connectedDeviceSink: EventSink?
26-
27-
var valueQueue: [PlatformMethodResult] = [];
2826
var characteristicValueUpdateSink: EventSink?
2927

30-
func flushQueue(sink: EventSink, queue: inout [PlatformMethodResult]) {
31-
queue.forEach(sink.add)
32-
queue.removeAll()
33-
}
34-
35-
func sinkOrQueue(sink: EventSink?, queue: inout [PlatformMethodResult], value: PlatformMethodResult ) {
36-
if let sink = sink {
37-
flushQueue(sink: sink, queue: &queue)
38-
sink.add(value)
39-
} else {
40-
queue.append(value)
41-
}
42-
}
43-
4428
func initialize(name: String, completion: @escaping PlatformMethodCompletionHandler) {
4529
if let central = central {
4630
central.stopScan()
@@ -99,9 +83,12 @@ final class PluginController {
9983
}
10084
}
10185

102-
context.sinkOrQueue(sink: context.connectedDeviceSink, queue: &context.discoveryQueue, value: .success(message))
86+
context.connectedDeviceSink?.add(.success(message))
10387
},
10488
onServicesWithCharacteristicsInitialDiscovery: papply(weak: self) { context, central, peripheral, errors in
89+
guard let sink = context.connectedDeviceSink
90+
else { assert(false); return }
91+
10592
let message = DeviceInfo.with {
10693
$0.id = peripheral.identifier.uuidString
10794
$0.connectionState = encode(peripheral.state)
@@ -112,7 +99,8 @@ final class PluginController {
11299
}
113100
}
114101
}
115-
context.sinkOrQueue(sink: context.connectedDeviceSink, queue: &context.discoveryQueue, value: .success(message))
102+
103+
sink.add(.success(message))
116104
},
117105
onCharacteristicValueUpdate: papply(weak: self) { context, central, characteristic, value, error in
118106
let message = CharacteristicValueInfo.with {
@@ -131,7 +119,14 @@ final class PluginController {
131119
}
132120
}
133121
}
134-
context.sinkOrQueue(sink: context.characteristicValueUpdateSink, queue: &context.valueQueue, value: .success(message))
122+
let sink = context.characteristicValueUpdateSink
123+
if (sink != nil) {
124+
sink!.add(.success(message))
125+
} else {
126+
// In case message arrives before sink is created
127+
context.messageQueue.append(message);
128+
}
129+
135130
}
136131
)
137132

@@ -218,12 +213,16 @@ final class PluginController {
218213
let timeout = args.timeoutInMs > 0 ? TimeInterval(args.timeoutInMs) / 1000 : nil
219214

220215
completion(.success(nil))
221-
222-
let message = DeviceInfo.with {
223-
$0.id = args.deviceID
224-
$0.connectionState = encode(.connecting)
216+
217+
if let sink = connectedDeviceSink {
218+
let message = DeviceInfo.with {
219+
$0.id = args.deviceID
220+
$0.connectionState = encode(.connecting)
221+
}
222+
sink.add(.success(message))
223+
} else {
224+
print("Warning! No event channel set up to report a connection update")
225225
}
226-
sinkOrQueue(sink: connectedDeviceSink, queue: &discoveryQueue, value: .success(message))
227226

228227
do {
229228
try central.connect(
@@ -232,6 +231,12 @@ final class PluginController {
232231
timeout: timeout
233232
)
234233
} catch {
234+
guard let sink = connectedDeviceSink
235+
else {
236+
print("Warning! No event channel set up to report a connection failure: \(error)")
237+
return
238+
}
239+
235240
let message = DeviceInfo.with {
236241
$0.id = args.deviceID
237242
$0.connectionState = encode(.disconnected)
@@ -240,7 +245,8 @@ final class PluginController {
240245
$0.message = "\(error)"
241246
}
242247
}
243-
sinkOrQueue(sink: connectedDeviceSink, queue: &discoveryQueue, value: .success(message))
248+
249+
sink.add(.success(message))
244250
}
245251
}
246252

packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,10 @@ public class SwiftReactiveBlePlugin: NSObject, FlutterPlugin {
5252
context: context,
5353
onListen: { context, sink in
5454
context.connectedDeviceSink = sink
55-
context.flushQueue(sink: sink, queue: &context.discoveryQueue)
5655
return nil
5756
},
5857
onCancel: { context in
5958
context.connectedDeviceSink = nil
60-
context.discoveryQueue.removeAll()
6159
return nil
6260
}
6361
)
@@ -69,11 +67,14 @@ public class SwiftReactiveBlePlugin: NSObject, FlutterPlugin {
6967
context: context,
7068
onListen: { context, sink in
7169
context.characteristicValueUpdateSink = sink
72-
context.flushQueue(sink: sink, queue: &context.valueQueue)
70+
context.messageQueue.forEach { msg in
71+
sink.add(.success(msg))
72+
}
73+
context.messageQueue.removeAll()
7374
return nil
7475
},
7576
onCancel: { context in
76-
context.valueQueue.removeAll()
77+
context.messageQueue.removeAll()
7778
context.characteristicValueUpdateSink = nil
7879
return nil
7980
}

packages/reactive_ble_mobile/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ packages:
353353
name: reactive_ble_platform_interface
354354
url: "https://pub.dartlang.org"
355355
source: hosted
356-
version: "5.0.1"
356+
version: "5.0.2"
357357
shelf:
358358
dependency: transitive
359359
description:

packages/reactive_ble_mobile/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: reactive_ble_mobile
22
description: Official Android and iOS implementation for the flutter_reactive_ble plugin.
3-
version: 5.0.1
3+
version: 5.0.2
44
homepage: https://github.com/PhilipsHue/flutter_reactive_ble
55

66
environment:
@@ -11,7 +11,7 @@ dependencies:
1111
flutter:
1212
sdk: flutter
1313
protobuf: ^2.0.0
14-
reactive_ble_platform_interface: ^5.0.1
14+
reactive_ble_platform_interface: ^5.0.2
1515
dev_dependencies:
1616
build_runner: ^2.1.2
1717
flutter_test:

0 commit comments

Comments
 (0)