RxAndroidBle 等待客户端响应

N·史密斯

我正在将纯 Android BLE 库转换为使用 RxAndroidBle,但遇到了一些障碍。

该库当前打开连接,读取特征,并检查它是否已加密。如果是,则继续读取接下来的几个特征。但是,如果它没有加密,它会向客户端发出一个回调,告诉他们传入一个加密密钥(客户端负责生成这个密钥或从服务器获取它)。传入密钥后,库会将其写入设备,然后像加密设备一样继续操作。

目前在 RxAndroidBle 中,我正在建立连接,读取特征,然后关闭连接。然后,如果它是加密的,则再次建立连接并读取其他特征。如果没有,则触发回调,然后在客户端回复后建立连接。

public void connect() {
    connectionDisposable = bleDevice.establishConnection(false)
            .flatMapSingle(rxBleConnection -> rxBleConnection.readCharacteristic(ENCRYPT_CHARACTERISTIC_UUID))
            .subscribe(bytes -> {
                if(isEncrypted(bytes))
                    encryptedConnect();
                else
                    listener.onKeyNeeded();
            }, this::onError);
}

public void setKey(byte[] key) {
    unencryptedConnect();
}

private void encryptedConnect() {
    connectionDisposable = bleDevice.establishConnection(false)
            .flatMapSingle(rxBleConnection -> Single.zip(
                    rxBleConnection.readCharacteristic(A_CHARACTERISTIC_UUID),
                    rxBleConnection.readCharacteristic(B_CHARACTERISTIC_UUID),
                    rxBleConnection.readCharacteristic(C_CHARACTERISTIC_UUID),
                    DataModel::new))
            .subscribe(this::processData, this::onError);
}

private void unencryptedConnect() {
    connectionDisposable = bleDevice.establishConnection(false)
            .flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(ENCRYPT_CHARACTERISTIC_UUID)
                .flatMapSingle(bytes -> Single.zip(
                        rxBleConnection.readCharacteristic(A_CHARACTERISTIC_UUID),
                        rxBleConnection.readCharacteristic(B_CHARACTERISTIC_UUID),
                        rxBleConnection.readCharacteristic(C_CHARACTERISTIC_UUID),
                        DataModel::new))
            )
            .subscribe(this::processData, this::onError);
} 

我对 RxJava 完全陌生,但是这种连接和重新连接的方法似乎错过了反应式设计的全部要点。有没有人能够指出我如何正确利用 Rx 来处理这个用例的正确方向。即,如何在一个流中等待不同的 observable 发出(客户端对回调的回复),以及如何根据上游结果更改流的路由(根据加密状态更改下一个操作)。理想情况下,无需更改客户端代码,因为该库已部署在一些 3rd 方应用程序中。

谢谢。

罗伯特·刘易斯

首先,我没有看到您通过处理connectionDisposable. 连接将持续,直到您执行此操作或设备断开连接。

您想要的也许可以通过将您的第一个连接保存在类型为 的变量中来实现RxBleConnection在 之前.flatMapSingle(),插入.doOnNext( connection -> savedConnection = connection )然后savedConnection用于后续操作,而不是建立一个新的操作。

完成后不要忘记处理。也应该为 nullsavedConnection以避免尝试使用死连接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails PDFKit等待客户端

来自分类Dev

如何使用socket.io等待客户端响应?

来自分类Dev

Flask:对客户端的异步响应

来自分类Dev

TCP客户端套接字。连接并等待输入流

来自分类Dev

套接字服务器程序不等待客户端处于“接受”阶段,而是在无限循环中运行

来自分类Dev

我如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

等待客户端读取消息的套接字服务器

来自分类Dev

在客户端获取csv响应

来自分类Dev

命名管道服务器,如何中断或超时等待客户端连接和传入数据

来自分类Dev

响应清理后返回给客户端

来自分类Dev

TcpListener + TcpClient-等待客户端在关闭之前读取数据

来自分类Dev

客户端多个API响应处理

来自分类Dev

客户端如何等待服务器响应

来自分类Dev

XPC客户端等待服务负载

来自分类Dev

HttpresponseMessage risposta =等待客户端。PostAsync(new Uri(uri),queryString); 提前结束执行

来自分类Dev

如何使用socket.io等待客户端响应?

来自分类Dev

FTP客户端输出响应标准

来自分类Dev

如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

多线程服务器退出,而无需等待客户端的连接

来自分类Dev

等待客户端响应运行代码socket.io?

来自分类Dev

RxAndroidBle rxBleConnection.writeCharacteristic

来自分类Dev

响应实体和客户端中的响应不同

来自分类Dev

写入和通知特性上的 RxAndroidBle 错误

来自分类Dev

等待识别客户端超时 (ReadStreamEventsForwardAsync)

来自分类Dev

Web API - 对客户端的正确响应

来自分类Dev

Python套接字等待客户端连接

来自分类Dev

使用 rxandroidble 进行写入/通知处理

来自分类Dev

阻塞 RxAndroidBle 写操作

来自分类Dev

使用 RXAndroidBlE 观察连接状态

Related 相关文章

  1. 1

    Rails PDFKit等待客户端

  2. 2

    如何使用socket.io等待客户端响应?

  3. 3

    Flask:对客户端的异步响应

  4. 4

    TCP客户端套接字。连接并等待输入流

  5. 5

    套接字服务器程序不等待客户端处于“接受”阶段,而是在无限循环中运行

  6. 6

    我如何让我的asyncio客户端调用套接字服务器并等待响应

  7. 7

    等待客户端读取消息的套接字服务器

  8. 8

    在客户端获取csv响应

  9. 9

    命名管道服务器,如何中断或超时等待客户端连接和传入数据

  10. 10

    响应清理后返回给客户端

  11. 11

    TcpListener + TcpClient-等待客户端在关闭之前读取数据

  12. 12

    客户端多个API响应处理

  13. 13

    客户端如何等待服务器响应

  14. 14

    XPC客户端等待服务负载

  15. 15

    HttpresponseMessage risposta =等待客户端。PostAsync(new Uri(uri),queryString); 提前结束执行

  16. 16

    如何使用socket.io等待客户端响应?

  17. 17

    FTP客户端输出响应标准

  18. 18

    如何让我的asyncio客户端调用套接字服务器并等待响应

  19. 19

    多线程服务器退出,而无需等待客户端的连接

  20. 20

    等待客户端响应运行代码socket.io?

  21. 21

    RxAndroidBle rxBleConnection.writeCharacteristic

  22. 22

    响应实体和客户端中的响应不同

  23. 23

    写入和通知特性上的 RxAndroidBle 错误

  24. 24

    等待识别客户端超时 (ReadStreamEventsForwardAsync)

  25. 25

    Web API - 对客户端的正确响应

  26. 26

    Python套接字等待客户端连接

  27. 27

    使用 rxandroidble 进行写入/通知处理

  28. 28

    阻塞 RxAndroidBle 写操作

  29. 29

    使用 RXAndroidBlE 观察连接状态

热门标签

归档