diff --git a/Assets/Scripts/Devices/Ble/BleDevice.cs b/Assets/Scripts/Devices/Ble/BleDevice.cs index 009e16eb..96df9257 100644 --- a/Assets/Scripts/Devices/Ble/BleDevice.cs +++ b/Assets/Scripts/Devices/Ble/BleDevice.cs @@ -53,11 +53,12 @@ namespace Assets.Scripts.Devices.Ble private void HwInterface_PeripheralDisconnectedEvent(IBleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect) { + Debug.Log("disconnected event" + this.peripheralInfo.Address + "==" + peripheral.Address); + if (!peripheral.MatchAddress(this.peripheralInfo.Address)) { return; } - Debug.Log("disconnected event"); if (this.State != DeviceState.Disconnected) { this.State = DeviceState.Disconnected; diff --git a/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs index 34e562bb..de8782a9 100644 --- a/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs +++ b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs @@ -31,6 +31,7 @@ namespace Assets.Scripts.Ble private Action _discoveredCallback; private Dictionary> callbacks = new Dictionary>(); + private Dictionary diconnectedCallbacks = new Dictionary(); private Dictionary>>> servicesCallbacks = new Dictionary>>>(); //private Dictionary>>> characteristicsCallbacks = new Dictionary>>>(); private Dictionary> characteristicNotificationCallbacks = new Dictionary>(); @@ -246,6 +247,7 @@ namespace Assets.Scripts.Ble }, (address, error) => { + Debug.Log("error device:" + address+ error); BleResponse s = new BleResponse { IsSuccess = false, @@ -261,6 +263,7 @@ namespace Assets.Scripts.Ble } else { + Debug.Log("265 error device:" + address + error); peripheralDisconnectedEvent(this, ble, null, false); } @@ -320,6 +323,12 @@ namespace Assets.Scripts.Ble this.callbacks.Remove(currentCallback.First().Key); } + var currentDisconnectCallback = this.disconnectedCallback.Where(c => c.Key.MatchAddress(address)); + if (currentDisconnectCallback.Any()) + { + this.disconnectedCallback.Remove(currentDisconnectCallback.First().Key); + } + var characteristicCallback = characteristicNotificationCallbacks.Where(c => c.Key.MatchAddress(address)); if (characteristicCallback.Any()) { @@ -343,12 +352,16 @@ namespace Assets.Scripts.Ble //设备断开连接 public void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback) { + diconnectedCallbacks.Add(peripheral.Address,callback); BluetoothLEHardwareInterface.DisconnectPeripheral(peripheral.Address, (address) => { - Debug.Log("断开回调"+ address); - PeripheralDisconnected(address,peripheral); - peripheralDisconnectedEvent(this, peripheral, null, true); - callback?.Invoke(); + Debug.Log("断开回调" + address); + var ble = new WinBlePeripheralInfo(address, string.Empty); + PeripheralDisconnected(address, ble); + peripheralDisconnectedEvent(this, ble, null, true); + + var currentCallback = diconnectedCallbacks.Where(c => c.Key.Equals(address)).Select(c=>c.Value).FirstOrDefault(); + currentCallback?.Invoke(); }); }