Я использую RxAndroidBle в проекте, и у меня есть следующий вариант использования:
Компонент третьей части также использует RxAndroidBle для установления соединения и взаимодействия с определенным набором BleУслуги ГАТТ.Но он скрывает поток RxBleConnection.Таким образом, другие части приложения не могут поделиться им ().
Другие части приложения хотят использовать некоторые службы Ble GATT (которые отличаются от прецедента).
Если я понимаю, вся библиотека RxAndroidBle не имеет состояния, поэтому мне нужно реализовать общий пул соединений, чтобы разделить поток соединения RxAndroidBle между этими двумя компонентами?Или это существует более простой способ?
Что я сделал:
Обернутый RxBle и некоторый объект в statefullWrapped:
Как пример метода RxBleDevice:
The establishConnection wrapped method is : @Override
public Observable<RxBleConnection> establishConnection(boolean autoConnect) {
return Observable.defer(()->
pool.getConnectionFromPool(wrappedDevice.getMacAddress(),
wrappedDevice.establishConnection(autoConnect)
.doFinally(()-> pool.removeConnectionFromPool(wrappedDevice.getMacAddress()))
.compose(ReplayingShare.instance()))
);
}
И у пула есть параллельная карта, где мы можем получить Connection как:
public Observable<RxBleConnection> getConnectionFromPool(String macAddress,Observable<RxBleConnection> persistentConnection){
Observable<RxBleConnection> previousConnection = connectionPoolMap.putIfAbsent(macAddress,persistentConnection);
if (previousConnection != null){ // The connection is already established
return previousConnection;
}
return persistentConnection;
}