gpt4 book ai didi

ios - 仅当使用RxBluetoothKit成功连接时才延长蓝牙连接超时

转载 作者:行者123 更新时间:2023-12-01 16:07:46 24 4
gpt4 key购买 nike

我想做的是:

  • 将值写入特征
  • 如果连接在一定时间内失败,则将其作为超时错误处理
  • 如果连接成功,请延长或忽略超时并保持连接

  • 我认识到1和2,但是我怎么认识3?
    非常感谢您的帮助。

    我的来源:
    manager = CentralManager(queue: .main, options: options)
    manager!.observeState()
    .startWith(self.manager!.state)
    .filter { $0 == .poweredOn }
    .timeout(3.0, scheduler: MainScheduler.instance)
    .take(1)
    .flatMap { _ in self.manager!.retrievePeripherals(withIdentifiers: [peripheralUUID])[0].establishConnection() }
    .timeout(5.0, scheduler: MainScheduler.instance) // (A) Set connection timeout here
    .flatMap{ $0.writeValue(data, for: BLECharacteristic.char, type: .withResponse)}
    .subscribe(onNext: { char in
    // (B) I want to extend timeout here
    // Handle success
    }, onError: { (error) in
    // Handle error
    }, onCompleted: nil, onDisposed: nil)

    最佳答案

    您希望观察到的超时连接,而不是对整个链施加超时

    // ...
    .take(1)
    .flatMap { _ in
    self.manager!.retrievePeripherals(withIdentifiers: [peripheralUUID])[0]
    .establishConnection()
    .timeout(5.0, scheduler: MainScheduler.instance)
    .take(1)
    }
    .flatMap{ $0.writeValue(data, for: BLECharacteristic.char, type: .withResponse) }
    // ...

    添加 .take(1)可确保建立连接后可观察到的内容是完整的(尽管在理想情况下, establishConnection()应该是导致此行为的原因)。

    关于ios - 仅当使用RxBluetoothKit成功连接时才延长蓝牙连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54302371/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com