Browse Source

feature: 处理反复连接的问题

Damon 7 months ago
parent
commit
43b85a233f
2 changed files with 60 additions and 49 deletions
  1. 34 33
      devices/bt_helper.js
  2. 26 16
      pages/index/index.js

+ 34 - 33
devices/bt_helper.js

@@ -137,18 +137,18 @@ class BtHelper {
         mDevice.volume = volume;
         mDevice.volume = volume;
         break;
         break;
 
 
-      ///电量
+        ///电量
       case EnumCmdEvent.battery:
       case EnumCmdEvent.battery:
         mDevice.kwh = event.kwh;
         mDevice.kwh = event.kwh;
         break;
         break;
 
 
-      ///低时延模式  低时延模式开启 1:音乐 , 2: 游戏 , 3: movie
+        ///低时延模式  低时延模式开启 1:音乐 , 2: 游戏 , 3: movie
       case EnumCmdEvent.lowDelayMode:
       case EnumCmdEvent.lowDelayMode:
         mDevice.lowDelayMode = event.lowDelayMode;
         mDevice.lowDelayMode = event.lowDelayMode;
         mDevice.lowDelayModeOpen = event.lowDelayModeOpen;
         mDevice.lowDelayModeOpen = event.lowDelayModeOpen;
         break;
         break;
 
 
-      ///电量 耳机电量
+        ///电量 耳机电量
       case EnumCmdEvent.batteryEarphone:
       case EnumCmdEvent.batteryEarphone:
         mDevice.kwh = event.kwh;
         mDevice.kwh = event.kwh;
         mDevice.kwhLeft = event.kwhLeft;
         mDevice.kwhLeft = event.kwhLeft;
@@ -156,12 +156,12 @@ class BtHelper {
         mDevice.kwhBox = event.kwhBox;
         mDevice.kwhBox = event.kwhBox;
         break;
         break;
 
 
-      ///是否支持TTS
+        ///是否支持TTS
       case EnumCmdEvent.enableTTS:
       case EnumCmdEvent.enableTTS:
         mDevice.enableTTS = event.enableTTS;
         mDevice.enableTTS = event.enableTTS;
         break;
         break;
 
 
-      ///切换设备连接模式 0:未知 1:低功耗蓝牙 2:wifi类型 3:经典蓝牙(不做任何操作) 4:4G类型
+        ///切换设备连接模式 0:未知 1:低功耗蓝牙 2:wifi类型 3:经典蓝牙(不做任何操作) 4:4G类型
       case EnumCmdEvent.switchDeviceMode:
       case EnumCmdEvent.switchDeviceMode:
         var deviceMode = event.deviceMode.index;
         var deviceMode = event.deviceMode.index;
         if (deviceMode != null) {
         if (deviceMode != null) {
@@ -170,14 +170,14 @@ class BtHelper {
         }
         }
         break;
         break;
 
 
-      ///4G外插卡  4G虚拟卡 当前使用的sim卡
+        ///4G外插卡  4G虚拟卡 当前使用的sim卡
       case EnumCmdEvent.sim:
       case EnumCmdEvent.sim:
         mDevice.sim = event.sim;
         mDevice.sim = event.sim;
         mDevice.eSim = event.eSim;
         mDevice.eSim = event.eSim;
         mDevice.simIndex = event.simIndex;
         mDevice.simIndex = event.simIndex;
         break;
         break;
 
 
-      ///闹钟是否开启  闹钟周期 闹钟唤醒时间
+        ///闹钟是否开启  闹钟周期 闹钟唤醒时间
       case EnumCmdEvent.wake:
       case EnumCmdEvent.wake:
         mDevice.wakeSwitch = event.wakeSwitch;
         mDevice.wakeSwitch = event.wakeSwitch;
         mDevice.wakeCycle = event.wakeCycle;
         mDevice.wakeCycle = event.wakeCycle;
@@ -185,14 +185,14 @@ class BtHelper {
         mDevice.wakeMinutes = event.wakeMinutes;
         mDevice.wakeMinutes = event.wakeMinutes;
         break;
         break;
 
 
-      ///休眠是否开启 休眠时间
+        ///休眠是否开启 休眠时间
       case EnumCmdEvent.sleep:
       case EnumCmdEvent.sleep:
         mDevice.sleepSwitch = event.sleepSwitch;
         mDevice.sleepSwitch = event.sleepSwitch;
         mDevice.sleepHour = event.sleepHour;
         mDevice.sleepHour = event.sleepHour;
         mDevice.sleepMinutes = event.sleepMinutes;
         mDevice.sleepMinutes = event.sleepMinutes;
         break;
         break;
 
 
-      ///版本和型号
+        ///版本和型号
       case EnumCmdEvent.version:
       case EnumCmdEvent.version:
         mDevice.version = event.version;
         mDevice.version = event.version;
         var clientType = mDevice.clientType ?? "";
         var clientType = mDevice.clientType ?? "";
@@ -225,7 +225,7 @@ class BtHelper {
         // }
         // }
         break;
         break;
 
 
-      ///云小微授权
+        ///云小微授权
       case EnumCmdEvent.auth:
       case EnumCmdEvent.auth:
         var authInfo = event.authInfo;
         var authInfo = event.authInfo;
         mDevice.authInfo = authInfo;
         mDevice.authInfo = authInfo;
@@ -241,17 +241,17 @@ class BtHelper {
         // });
         // });
         break;
         break;
 
 
-      ///EQ音效
+        ///EQ音效
       case EnumCmdEvent.eq:
       case EnumCmdEvent.eq:
         mDevice.eqs = event.eqs;
         mDevice.eqs = event.eqs;
         break;
         break;
 
 
-      ///payId 充流量使用
+        ///payId 充流量使用
       case EnumCmdEvent.payId:
       case EnumCmdEvent.payId:
         mDevice.payId = event.payId;
         mDevice.payId = event.payId;
         break;
         break;
 
 
-      ///QQ音乐使用dsn授权
+        ///QQ音乐使用dsn授权
       case EnumCmdEvent.dsn:
       case EnumCmdEvent.dsn:
         var dsn = event.dsn;
         var dsn = event.dsn;
         mDevice.dsn = dsn;
         mDevice.dsn = dsn;
@@ -260,13 +260,13 @@ class BtHelper {
         // ProviderUtil.twelvePublic.wifiDeviceConnected();
         // ProviderUtil.twelvePublic.wifiDeviceConnected();
         break;
         break;
 
 
-      ///自动切换 0,1不能
-      ///
+        ///自动切换 0,1不能
+        ///
       case EnumCmdEvent.netModeAuto:
       case EnumCmdEvent.netModeAuto:
         mDevice.netModeAuto = event.netModeAuto;
         mDevice.netModeAuto = event.netModeAuto;
         break;
         break;
 
 
-      ///解绑设备
+        ///解绑设备
       case EnumCmdEvent.unbind:
       case EnumCmdEvent.unbind:
         //   let unbindAddress = event.item.address ?? "";
         //   let unbindAddress = event.item.address ?? "";
         //     if (unbindAddress != mDevice.address) {
         //     if (unbindAddress != mDevice.address) {
@@ -282,7 +282,7 @@ class BtHelper {
 
 
         break;
         break;
 
 
-      ///解绑设备
+        ///解绑设备
       case EnumCmdEvent.ctrlStatus:
       case EnumCmdEvent.ctrlStatus:
         // List < int > ctrlList = event.ctrlStatus;
         // List < int > ctrlList = event.ctrlStatus;
         // if (ctrlList.length == 3) {
         // if (ctrlList.length == 3) {
@@ -304,7 +304,7 @@ class BtHelper {
         // notifyListeners();
         // notifyListeners();
         break;
         break;
 
 
-      ///设备信息
+        ///设备信息
       case EnumCmdEvent.getDeviceInfo:
       case EnumCmdEvent.getDeviceInfo:
         //   List list = [];
         //   List list = [];
         //   String userId = ProviderUtil.user.userModel.uid ?? "";
         //   String userId = ProviderUtil.user.userModel.uid ?? "";
@@ -366,35 +366,36 @@ class BtHelper {
   async connect(data, onChanged) {
   async connect(data, onChanged) {
     // await this._helper.connect({ data, onChanged, isClick });
     // await this._helper.connect({ data, onChanged, isClick });
     var that = this;
     var that = this;
-    clearTimeout(this.timer);
-    this.timer = null;
-    this.bleManager.stopSearch()
-    var res = await this.bleManager.connectToDevice(data);
+    await that.disconnect(data);
+    clearTimeout(that.timer);
+    that.timer = null;
+    that.bleManager.stopSearch()
+    var res = await that.bleManager.connectToDevice(data);
     console.log(res ? '连接成功' : '连接失败');
     console.log(res ? '连接成功' : '连接失败');
-    // this.setData({ connectedDeviceId: deviceId });
+    // that.setData({ connectedDeviceId: deviceId });
     if (res === false) {
     if (res === false) {
       console.log("连接失败")
       console.log("连接失败")
-      this.disconnect(data)
+      that.disconnect(data)
       if (onChanged) {
       if (onChanged) {
         onChanged(false)
         onChanged(false)
       }
       }
       return
       return
     }
     }
-    const serviceId = await this.bleManager.discoverServices(data.deviceId);
+    const serviceId = await that.bleManager.discoverServices(data.deviceId);
     if (serviceId == "") {
     if (serviceId == "") {
       console.log("连接失败")
       console.log("连接失败")
-      this.disconnect(data)
+      that.disconnect(data)
       if (onChanged) {
       if (onChanged) {
         onChanged(false)
         onChanged(false)
       }
       }
       return
       return
     }
     }
-    // this.setData({ services });
+    // that.setData({ services });
     console.log("服务ID:" + serviceId)
     console.log("服务ID:" + serviceId)
-    var characteristics = await this.bleManager.discoverCharacteristics(data.deviceId, serviceId)
+    var characteristics = await that.bleManager.discoverCharacteristics(data.deviceId, serviceId)
     if (characteristics == "") {
     if (characteristics == "") {
       console.log("连接失败")
       console.log("连接失败")
-      this.disconnect(data)
+      that.disconnect(data)
       if (onChanged) {
       if (onChanged) {
         onChanged(false)
         onChanged(false)
       }
       }
@@ -411,15 +412,15 @@ class BtHelper {
       if (charc.properties.notify) {
       if (charc.properties.notify) {
         console.log('订阅数据:', charc.uuid);
         console.log('订阅数据:', charc.uuid);
         // 订阅的
         // 订阅的
-        this.bleManager.notifyCharacteristicValueChange(charc.uuid, (res) => {
+        that.bleManager.notifyCharacteristicValueChange(charc.uuid, (res) => {
           BtParse.parseTLV(res);
           BtParse.parseTLV(res);
         })
         })
       }
       }
       if (charc.properties.write || charc.properties.writeWithoutResponse) {
       if (charc.properties.write || charc.properties.writeWithoutResponse) {
         // 写入的
         // 写入的
-        this.bleManager.setWrite(charc, charc.uuid)
+        that.bleManager.setWrite(charc, charc.uuid)
         setTimeout(() => {
         setTimeout(() => {
-          this._connectSuccess()
+          that._connectSuccess()
         }, 100);
         }, 100);
         if (onChanged) {
         if (onChanged) {
           onChanged(true)
           onChanged(true)
@@ -427,7 +428,7 @@ class BtHelper {
       }
       }
 
 
       // if (charc.properties.read) {
       // if (charc.properties.read) {
-      //     var chara = await this.bleManager.readCharacteristicValue(charc.uuid,)
+      //     var chara = await that.bleManager.readCharacteristicValue(charc.uuid,)
       // }
       // }
     }
     }
 
 

+ 26 - 16
pages/index/index.js

@@ -129,10 +129,11 @@ Page({
   onDeviceLoad() {
   onDeviceLoad() {
     var that = this;
     var that = this;
     // BtHelper.getInstance().initBluetoothAdapter();
     // BtHelper.getInstance().initBluetoothAdapter();
-    var deviceList = wx.getStorageSync("deviceList") || "";
-    if (!strings.isEmpty(deviceList)) {
+    var l = wx.getStorageSync("deviceList") || "";
+    console.log("gadsfasdfqwwreqewrq==33==" + JSON.parse(l).length);
+    if (!strings.isEmpty(l)) {
       try {
       try {
-        var list = JSON.parse(deviceList);
+        var list = JSON.parse(l);
         that.updateDeviceList(list, true);
         that.updateDeviceList(list, true);
       } catch (e) {}
       } catch (e) {}
       // that.tryConnectBle()
       // that.tryConnectBle()
@@ -758,9 +759,9 @@ Page({
       success: function (res) {
       success: function (res) {
         if (res.confirm) {
         if (res.confirm) {
           if (that.data.deviceList[index].connectType == 3) {
           if (that.data.deviceList[index].connectType == 3) {
-            that.cancelWifi(index);
+            that.cancelWifi(index, false);
           } else {
           } else {
-            that.cancelBlue(index);
+            that.cancelBlue(index, false);
           }
           }
         }
         }
       }
       }
@@ -802,27 +803,30 @@ Page({
     var deviceList = that.data.deviceList;
     var deviceList = that.data.deviceList;
     if (deviceList.length > deviceListIndex) {
     if (deviceList.length > deviceListIndex) {
       if (deviceList[deviceListIndex].connectType == 3) {
       if (deviceList[deviceListIndex].connectType == 3) {
-        await that.cancelWifi(deviceListIndex);
+        await that.cancelWifi(deviceListIndex, true);
       } else {
       } else {
-        await that.cancelBlue(deviceListIndex);
+        await that.cancelBlue(deviceListIndex, true);
       }
       }
     }
     }
   },
   },
 
 
   /// 断开蓝牙连接
   /// 断开蓝牙连接
-  async cancelBlue(index) {
+  async cancelBlue(index, onlyCancel) {
     var that = this;
     var that = this;
+    await BtHelper.getInstance().disconnect();
+    if (onlyCancel) {
+      return;
+    }
     const id = that.data.deviceList[index].deviceId;
     const id = that.data.deviceList[index].deviceId;
     const deviceList = that.data.deviceList.filter((item, i) => {
     const deviceList = that.data.deviceList.filter((item, i) => {
       return id !== item.deviceId
       return id !== item.deviceId
     });
     });
-
-    await BtHelper.getInstance().disconnect();
     wx.setStorageSync("deviceList", JSON.stringify(deviceList));
     wx.setStorageSync("deviceList", JSON.stringify(deviceList));
+    var l = wx.getStorageSync("deviceList") || "";
+    console.log("gadsfasdfqwwreqewrq==33==" + JSON.parse(l).length);
     that.setData({
     that.setData({
       deviceList,
       deviceList,
     });
     });
-
     // 当前没有设备
     // 当前没有设备
     // if (deviceList.length === 0) {
     // if (deviceList.length === 0) {
     that.setData({
     that.setData({
@@ -832,18 +836,22 @@ Page({
   },
   },
 
 
   /// 断开连接wifi
   /// 断开连接wifi
-  async cancelWifi(index) {
+  async cancelWifi(index, onlyCancel) {
     var that = this;
     var that = this;
+    // 取消订阅
+    app.unsubscribe(`/AIrSMArT_${that.data.deviceList[index].name.split("BLUFI_")[1]}/user/pub_response`);
+    if (onlyCancel) {
+      return;
+    }
+
     const id = that.data.deviceList[index].deviceId;
     const id = that.data.deviceList[index].deviceId;
     let name = that.data.deviceListIndex !== null ? that.data.deviceList[that.data.deviceListIndex].name : null;
     let name = that.data.deviceListIndex !== null ? that.data.deviceList[that.data.deviceListIndex].name : null;
-
     const deviceList = that.data.deviceList.filter((item, i) => {
     const deviceList = that.data.deviceList.filter((item, i) => {
       return id !== item.deviceId
       return id !== item.deviceId
     });
     });
-
-    // 取消订阅
-    app.unsubscribe(`/AIrSMArT_${that.data.deviceList[index].name.split("BLUFI_")[1]}/user/pub_response`);
     wx.setStorageSync("deviceList", JSON.stringify(deviceList));
     wx.setStorageSync("deviceList", JSON.stringify(deviceList));
+    var l = wx.getStorageSync("deviceList") || "";
+    console.log("gadsfasdfqwwreqewrq==33==" + JSON.parse(l).length);
     that.setData({
     that.setData({
       deviceList,
       deviceList,
       thisDeviceMac: null
       thisDeviceMac: null
@@ -1034,6 +1042,8 @@ Page({
     finalList = finalList.concat(onNoLineBlueList);
     finalList = finalList.concat(onNoLineBlueList);
     // 更新缓存
     // 更新缓存
     wx.setStorageSync("deviceList", JSON.stringify(finalList));
     wx.setStorageSync("deviceList", JSON.stringify(finalList));
+    var l = wx.getStorageSync("deviceList") || "";
+    console.log("gadsfasdfqwwreqewrq==33==" + JSON.parse(l).length);
     that.setData({
     that.setData({
       deviceList: finalList
       deviceList: finalList
     });
     });