methodCallHandler method
Implementation
Future<dynamic> methodCallHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'stateUpdate':
_stateStreamController.add(BBState.values.firstWhere((v) => (v.name == methodCall.arguments['value'])));
return;
case 'authorizationStatusUpdate':
_authorizationStatusStreamController.add(BBAuthorization.values.firstWhere((v) => (v.name == methodCall.arguments['value'])));
return;
case 'scanEnabledUpdate':
_scanEnabledStreamController.add(methodCall.arguments['value']);
return;
case 'scanResultUpdate':
final data = methodCall.arguments['value'];
if (data == null) {
return;
}
final device = devices[data['id']];
if (device == null) {
return;
}
final scanResult = BBScanResult(
device: device,
name: data['name'],
rssi: data['rssi'],
connectable: data['connectable'],
advertisedServices: List<String>.from(data['advertisedServices']),
manufacturerId: data['manufacturerId'],
manufacturerName: data['manufacturerName'],
manufacturerData: data['manufacturerData'],
);
_scanResultsStreamController.add(scanResult);
return;
case 'devicesUpdate':
final devices = _devicesStreamController.value;
methodCall.arguments['value'].forEach((data) {
devices[data['id']] = BBDevice(id: data['id'], name: data['name']);
});
_devicesStreamController.add(devices);
return;
case 'deviceConnectionStatusUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = BBDeviceConnectionStatus.values.firstWhere((v) => (v.name == methodCall.arguments['value']));
_deviceConnectionStatusStreamController(deviceId).add(value);
return;
case 'deviceServicesUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = List<BBService>.from(
methodCall.arguments['value'].map(
(serviceData) => BBService(
id: serviceData['id'],
name: serviceData['name'],
characteristics: List<BBCharacteristic>.from(
serviceData['characteristics'].map(
(characteristicData) => BBCharacteristic(
deviceId: deviceId,
serviceId: serviceData['id'],
id: characteristicData['id'],
name: characteristicData['name'],
properties: Set<BBCharacteristicProperty>.from(
characteristicData['properties'].map((property) => BBCharacteristicProperty.values.firstWhere((v) => (v.name == property))),
),
),
),
),
),
),
);
_deviceServicesStreamController(deviceId).add(value);
return;
case 'deviceMTUUpdate':
final deviceId = methodCall.arguments['deviceId'];
final value = methodCall.arguments['value'];
_deviceMTUStatusStreamController(deviceId).add(value);
return;
case 'deviceCharacteristicIsNotifyingUpdate':
final deviceId = methodCall.arguments['deviceId'];
final serviceId = methodCall.arguments['serviceId'];
final characteristicId = methodCall.arguments['characteristicId'];
final value = methodCall.arguments['value'];
_deviceCharacteristicNotifyEnabledStreamController(deviceId, serviceId, characteristicId).add(value);
return;
case 'deviceCharacteristicDataUpdate':
final deviceId = methodCall.arguments['deviceId'];
final serviceId = methodCall.arguments['serviceId'];
final characteristicId = methodCall.arguments['characteristicId'];
final value = methodCall.arguments['value'];
_deviceCharacteristicDataStreamController(deviceId, serviceId, characteristicId).add(value);
return;
default:
if (kDebugMode) {
print('Unprocessed event ${methodCall.method} with payload ${methodCall.arguments}');
}
}
}