我在项目中使用RxAndroidBle,并且具有以下用例:
第三方组件还使用RxAndroidBle来建立连接并与一组定义的Ble GATT服务进行交互。但是它隐藏了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;
}