Эх сурвалжийг харах

refactor(更新)
- 蓝牙队列调度器新增日志输出和获取已连接设备接口
- ModBusController中部分字符串获取方式调整
- 优化钥匙检查逻辑,优先处理已连接和连接中的设备

周文健 2 сар өмнө
parent
commit
08365e4b53

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

@@ -15,6 +15,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import org.slf4j.Logger
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import org.slf4j.LoggerFactory
+import kotlin.math.log
 
 
 /**
 /**
  * 蓝牙队列调度器
  * 蓝牙队列调度器
@@ -133,6 +134,7 @@ abstract class BleQueueDispatcher {
         if (!connectedMacs.contains(mac)) return
         if (!connectedMacs.contains(mac)) return
         pendingDisconnectJobs[mac]?.cancel()
         pendingDisconnectJobs[mac]?.cancel()
         val job = dispatcherScope.launch {
         val job = dispatcherScope.launch {
+            logger.info("计划移除硬件:${mac}")
             delay(delayMillis)
             delay(delayMillis)
             synchronized(this@BleQueueDispatcher) {
             synchronized(this@BleQueueDispatcher) {
                 if (connectedMacs.remove(mac)) {
                 if (connectedMacs.remove(mac)) {
@@ -183,6 +185,11 @@ abstract class BleQueueDispatcher {
      */
      */
     fun isConnecting(mac: String): Boolean = activeMacs.containsKey(mac)
     fun isConnecting(mac: String): Boolean = activeMacs.containsKey(mac)
 
 
+    /**
+     * 获取已连接的设备
+     */
+    fun getConnectedAndConnecting(): List<String> = activeMacs.map { it.key } + connectedMacs
+
     /**
     /**
      * 是否队列中
      * 是否队列中
      */
      */

+ 9 - 4
ui-base/src/main/java/com/grkj/ui_base/utils/modbus/ModBusController.kt

@@ -246,7 +246,7 @@ object ModBusController {
                                 } else {
                                 } else {
                                     if (ISCSConfig.isInit) {
                                     if (ISCSConfig.isInit) {
                                         PopTip.build()
                                         PopTip.build()
-                                            .tip(CommonUtils.getStr(R.string.get_key_info_fail))
+                                            .tip(CommonUtils.getStr("get_key_info_fail"))
                                     }
                                     }
                                     controlKeyBuckle(true, key.idx, dockBean.addr)
                                     controlKeyBuckle(true, key.idx, dockBean.addr)
                                 }
                                 }
@@ -337,7 +337,7 @@ object ModBusController {
     private fun lockBuckleExtraStatus(res: Any) {
     private fun lockBuckleExtraStatus(res: Any) {
         logger.debug("硬件状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
         logger.debug("硬件状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
         if (res.isEmpty() || res.any { it.isEmpty() }) {
         if (res.isEmpty() || res.any { it.isEmpty() }) {
-            var tipStr = CommonUtils.getStr(R.string.no_response_board_exists) + " : "
+            var tipStr = CommonUtils.getStr("no_response_board_exists") + " : "
             val addressList = mutableListOf<String>()
             val addressList = mutableListOf<String>()
 
 
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
@@ -371,7 +371,7 @@ object ModBusController {
     private fun switchStatus(res: Any, done: () -> Unit) {
     private fun switchStatus(res: Any, done: () -> Unit) {
         logger.info("开关板:${(res as ByteArray).toHexStrings()}")
         logger.info("开关板:${(res as ByteArray).toHexStrings()}")
         if (res.isEmpty()) {
         if (res.isEmpty()) {
-            var tipStr = CommonUtils.getStr(R.string.no_response_board_exists) + " : "
+            var tipStr = CommonUtils.getStr("no_response_board_exists") + " : "
             val addressList = mutableListOf<String>()
             val addressList = mutableListOf<String>()
 
 
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
@@ -391,7 +391,7 @@ object ModBusController {
     private fun lockBuckleStatus(res: Any) {
     private fun lockBuckleStatus(res: Any) {
         logger.info("debug:${(res as List<ByteArray>).map { it.toHexStrings() }}")
         logger.info("debug:${(res as List<ByteArray>).map { it.toHexStrings() }}")
         if (res.isEmpty() || res.any { it.isEmpty() }) {
         if (res.isEmpty() || res.any { it.isEmpty() }) {
-            var tipStr = CommonUtils.getStr(R.string.no_response_board_exists) + " : "
+            var tipStr = CommonUtils.getStr("no_response_board_exists") + " : "
             val addressList = mutableListOf<String>()
             val addressList = mutableListOf<String>()
 
 
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
             modBusManager?.mSlaveAddressList?.forEach { itDock ->
@@ -1013,6 +1013,11 @@ object ModBusController {
         if (keyList.isEmpty()) {
         if (keyList.isEmpty()) {
             return null
             return null
         }
         }
+        val sendConnectingAndConnected = BleSendDispatcher.getConnectedAndConnecting()
+        //如果已连接和连接中的设备不在钥匙列表中,直接断开连接让路
+        sendConnectingAndConnected.filter { it !in keyList.map { it.mac } }.forEach {
+            BleSendDispatcher.scheduleDisconnect(it)
+        }
         keyList = keyList.sortedWith(
         keyList = keyList.sortedWith(
             compareByDescending<DockBean.KeyBean> {
             compareByDescending<DockBean.KeyBean> {
                 BleSendDispatcher.isConnected(it.mac ?: "") || BleSendDispatcher.isConnecting(
                 BleSendDispatcher.isConnected(it.mac ?: "") || BleSendDispatcher.isConnecting(