Bladeren bron

refactor(更新)
- 蓝牙连接优化:
- 调整最大连接数判断逻辑。
- 登录页延时60秒后检查钥匙信息,若仍在登录页则断开连接。
- 优化清除不繁忙连接设备的逻辑。

周文健 2 maanden geleden
bovenliggende
commit
f768284209

+ 43 - 12
ui-base/src/main/java/com/grkj/ui_base/service/CheckKeyInfoTask.kt

@@ -1,6 +1,6 @@
 package com.grkj.ui_base.service
 
-import com.grkj.ui_base.business.DataBusiness
+import android.annotation.SuppressLint
 import com.grkj.ui_base.business.ModbusBusinessManager
 import com.grkj.ui_base.utils.ble.BleSendDispatcher
 import com.sik.cronjob.annotations.CronJob
@@ -15,22 +15,53 @@ import org.slf4j.LoggerFactory
 class CheckKeyInfoTask {
     private val logger: Logger = LoggerFactory.getLogger(this::class.java)
 
+    /**
+     * 是否在登录界面
+     */
+    private var isInLogin: Boolean = false
+        set(value) {
+            field = value
+            if (value) {
+                startCheckKeyInfo()
+            } else {
+                ThreadUtils.cancel(startCheckKeyInfoJob)
+            }
+        }
+
+    /**
+     * 开始检查钥匙信息任务
+     */
+    private var startCheckKeyInfoJob: String = ""
+
+    /**
+     * 开始检查钥匙信息延迟60s
+     */
+    private fun startCheckKeyInfo() {
+        startCheckKeyInfoJob = ThreadUtils.runOnIODelayed(60 * 1000L) {
+            checkKeyInfo()
+        }
+    }
+
     /**
      * 检查钥匙信息
      */
+    @SuppressLint("MissingPermission")
     @CronJob(intervalMillis = 30 * 60_000L, initialDelay = 0, runOnMainThread = false)
     fun checkKeyInfo() {
         logger.info("开始检查钥匙信息")
-//        val existsKey = ModbusBusinessManager.getExistsKey()
-//        ThreadUtils.runOnIO {
-//            for (bean in existsKey) {
-//                bean.mac?.let { mac ->
-//                    BleSendDispatcher.submit(mac) {
-//                        logger.info("信息获取完成,检查是否立即断开")
-//                        DataBusiness.checkMyTodoForHandleKey(mac, 0)
-//                    }
-//                }
-//            }
-//        }
+        val existsKey = ModbusBusinessManager.getExistsKey()
+        ThreadUtils.runOnIO {
+            for (bean in existsKey) {
+                bean.mac?.let { mac ->
+                    if (BleSendDispatcher.canConnect() && isInLogin) {
+                        BleSendDispatcher.submit(mac) {
+                            if (isInLogin) {
+                                BleSendDispatcher.scheduleDisconnect(mac)
+                            }
+                        }
+                    }
+                }
+            }
+        }
     }
 }

+ 1 - 1
ui-base/src/main/java/com/grkj/ui_base/utils/ble/BleConnectionManager.kt

@@ -478,7 +478,7 @@ object BleConnectionManager {
                             )
                         }
                     } else {
-                        BleReturnDispatcher.clearNoBusyConnectedDevice()
+                        BleReturnDispatcher.clearNotInBusyConnectedDevice()
                         BleReturnDispatcher.scheduleDisconnect(bleDevice.mac)
                         BleReturnDispatcher.submit(bleDevice.mac) {
                             getCurrentStatus(

+ 2 - 2
ui-base/src/main/java/com/grkj/ui_base/utils/ble/BleQueueDispatcher.kt

@@ -195,7 +195,7 @@ abstract class BleQueueDispatcher {
     /**
      * 是否可以连接
      */
-    fun canConnect(): Boolean = (activeMacs.size + connectedMacs.size) <= maxConnections
+    fun canConnect(): Boolean = (activeMacs.size + connectedMacs.size) < maxConnections
 
     /**
      * 是否可以断连
@@ -220,7 +220,7 @@ abstract class BleQueueDispatcher {
     /**
      * 清除不繁忙的连接设备
      */
-    fun clearNoBusyConnectedDevice() {
+    fun clearNotInBusyConnectedDevice() {
         connectedMacs.filter { it in busyMacs }.forEach {
             scheduleDisconnect(it)
         }