PhilipsHue / flutter_reactive_ble

Flutter library that handles BLE operations for multiple devices.
https://developers.meethue.com/
Other
661 stars 321 forks source link

Disconnected state called multiple times on stream #869

Open riccardocescon opened 3 months ago

riccardocescon commented 3 months ago

Describe the bug I have the connectionStream listened, if i disconnect there are no issues. If i manually remove the ble peripherical while it is connected to the phone, then the disconnected state got called multiple times

To Reproduce Steps to reproduce the behavior:

  1. on the main start a Listener on FlutterReactiveBle.connectionStream that simply logs the event
  2. Connect to one device using connectTo()
  3. Manually remove the ble device or power it off
  4. Observe the log called multiple dimes with the disconnected state

Expected behavior I expect to receive 1 state for the disconnected value

Smartphone / tablet

Peripheral device

Additional context Here is the log i am getting

[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.connecting, failure: null)
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.connected, failure: null)
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.disconnected, failure: GenericFailure<ConnectionError>(code: ConnectionError.failedToConnect, message: "Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 8 (GATT_INSUF_AUTHORIZATION or GATT_CONN_TIMEOUT)"))
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.disconnected, failure: GenericFailure<ConnectionError>(code: ConnectionError.failedToConnect, message: "Disconnected from MAC='XX:XX:XX:XX:XX:XX' with status 8 (GATT_INSUF_AUTHORIZATION or GATT_CONN_TIMEOUT)"))
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.disconnecting, failure: null)
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.disconnected, failure: null)
[event.connectedDeviceStream] Connected device: ConnectionStateUpdate(deviceId: D8:17:35:2A:C1:70, connectionState: DeviceConnectionState.disconnected, failure: null)