فهرست منبع

优化状态监听,避免重复解析浪费性能;轮询频率改成800ms

Frankensteinly 1 سال پیش
والد
کامیت
6b5b759526

+ 3 - 1
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs
 
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.toHexStrings
+import com.grkj.iscs.modbus.DockBean
 import com.grkj.iscs.modbus.ModBusController
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
@@ -36,7 +37,7 @@ object BusinessManager {
     /**
      * @param key 可null,null时用applicationContext做全局监听
      */
-    fun registerStatusListener(key: Any?) {
+    fun registerStatusListener(key: Any?, callBack: (DockBean) -> Unit) {
         ModBusController.registerStatusListener(key ?: MyApplication.instance!!.applicationContext) { res ->
             LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
             res.forEach { bytes ->
@@ -105,6 +106,7 @@ object BusinessManager {
                         }
                     }
                 }
+                callBack.invoke(dockBean)
             }
         }
     }

+ 3 - 1
app/src/main/java/com/grkj/iscs/activity/ModbusActivity.kt

@@ -28,7 +28,9 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
     override fun initView() {
         BusinessManager.connectDock(1)
 
-        BusinessManager.registerStatusListener(this)
+        BusinessManager.registerStatusListener(this) {
+
+        }
 
         mBinding?.init?.setOnClickListener {
             ModBusController.initDevicesStatus()

+ 15 - 18
app/src/main/java/com/grkj/iscs/activity/PresentationLoginActivity.kt

@@ -49,25 +49,22 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
             handleLoading(false)
         }
 
-        ModBusController.registerStatusListener(this) { res ->
-            (res as List<ByteArray>).forEach { bytes ->
-                val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
-                when (dockBean.type) {
-                    DOCK_TYPE_PORTABLE -> {
-                        dockBean.deviceList.forEach { deviceBean ->
-                            if (deviceBean.isExist) {
-                                when (deviceBean.type) {
-                                    DEVICE_TYPE_CARD -> {
-                                        ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
-                                            val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
-                                            println("卡片RFID : $rfid")
-                                            if (cardList.any { it.rfid == rfid }) {
-                                                ToastUtils.tip("登录成功,欢迎 $rfid")
-                                                startActivity(Intent(this, PresentationActivity::class.java))
-                                                return@readPortalCaseCardRfid
-                                            }
-                                            ToastUtils.tip("登录失败,$rfid 没有权限")
+        BusinessManager.registerStatusListener(this) { dockBean ->
+            when (dockBean.type) {
+                DOCK_TYPE_PORTABLE -> {
+                    dockBean.deviceList.forEach { deviceBean ->
+                        if (deviceBean.isExist) {
+                            when (deviceBean.type) {
+                                DEVICE_TYPE_CARD -> {
+                                    ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
+                                        val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
+                                        println("卡片RFID : $rfid")
+                                        if (cardList.any { it.rfid == rfid }) {
+                                            ToastUtils.tip("登录成功,欢迎 $rfid")
+                                            startActivity(Intent(this, PresentationActivity::class.java))
+                                            return@readPortalCaseCardRfid
                                         }
+                                        ToastUtils.tip("登录失败,$rfid 没有权限")
                                     }
                                 }
                             }

+ 1 - 1
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -39,7 +39,7 @@ object ModBusController {
     var shouldStopUpgrade = false
 
     // TODO 临时改成5s
-    const val REPEAT_FREQUENCY = 5000L
+    const val REPEAT_FREQUENCY = 800L
 
     fun setSlaveCount(count: Int) {
         modBusManager?.slaveCount = count

+ 12 - 24
app/src/main/java/com/grkj/iscs/presentation/PresentationPresenter.kt

@@ -1,37 +1,25 @@
 package com.grkj.iscs.presentation
 
+import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.base.BasePresenter
-import com.grkj.iscs.extentions.removeLeadingZeros
-import com.grkj.iscs.extentions.toHexStrings
-import com.grkj.iscs.modbus.ModBusController
-import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
-import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_FINGERPRINT
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_LOCK
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
-import com.grkj.iscs.util.ToastUtils
-import com.grkj.iscs.util.log.LogUtil
 
 class PresentationPresenter : BasePresenter<IPresentationView>() {
     fun registerStatusListener() {
-        ModBusController.registerStatusListener(this) { res ->
-            LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
-            res.forEach { bytes ->
-                val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
-                when (dockBean.type) {
-                    DOCK_TYPE_PORTABLE -> {
-                        // TODO 便携式待完善
-                        dockBean.deviceList.forEach { deviceBean ->
-                            if (deviceBean.isExist) {
-                                when (deviceBean.type) {
-                                    DEVICE_TYPE_KEY -> {
-                                        // TODO 读工作票
-                                    }
-                                    DEVICE_TYPE_LOCK -> {
+        BusinessManager.registerStatusListener(this) { dockBean ->
+            when (dockBean.type) {
+                DOCK_TYPE_PORTABLE -> {
+                    // TODO 便携式待完善
+                    dockBean.deviceList.forEach { deviceBean ->
+                        if (deviceBean.isExist) {
+                            when (deviceBean.type) {
+                                DEVICE_TYPE_KEY -> {
+                                    // TODO 读工作票
+                                }
+                                DEVICE_TYPE_LOCK -> {
 
-                                    }
                                 }
                             }
                         }