subscribe method
Implementation
Future<void> subscribe(BleCharacteristic characteristic) async {
_ensureConnected('subscribe');
final deviceId = _connectedDevice!;
if (!characteristic.canNotify) {
throw StateError('Characteristic does not support notifications.');
}
final key = _characteristicKey(characteristic);
if (_notificationSubscriptions.containsKey(key)) {
return;
}
try {
final subscription = _transport
.subscribe(deviceId, characteristic)
.listen(
(bytes) {
final immutableBytes = Uint8List.fromList(
bytes,
).asUnmodifiableView();
_record(
ProbeEventKind.notification,
'${characteristic.characteristicUuid} '
'${_formatPayload(immutableBytes)}',
);
_protocolNotifications.add(immutableBytes);
},
onError: (Object error) {
_recordError('subscription failed', error);
},
onDone: () {
_notificationSubscriptions.remove(key);
},
);
_notificationSubscriptions[key] = subscription;
_record(ProbeEventKind.subscription, characteristic.characteristicUuid);
} catch (error) {
_recordError('subscription failed', error);
rethrow;
}
}