From a7aaeabc7873a0eafb4a7ecad7f65b018b7a9bc9 Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 24 Feb 2023 19:31:23 +0800
Subject: [PATCH] What's new? 1. Add license for dock. 2. Modify the logic corresponding to the firmware file and device type. 3. Add multiple mqtt clients options. 4. Modify the structure of the interface for obtaining the device list. 5. Fixed some issues.
---
src/main/java/com/dji/sample/component/GlobalScheduleService.java | 56 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 30 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/dji/sample/component/GlobalScheduleService.java b/src/main/java/com/dji/sample/component/GlobalScheduleService.java
index ea44a62..e092ad4 100644
--- a/src/main/java/com/dji/sample/component/GlobalScheduleService.java
+++ b/src/main/java/com/dji/sample/component/GlobalScheduleService.java
@@ -1,18 +1,19 @@
package com.dji.sample.component;
+import com.dji.sample.component.mqtt.service.IMqttTopicService;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.service.IDeviceService;
+import com.dji.sample.wayline.service.IWaylineJobService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import java.time.LocalDateTime;
-import java.util.Map;
+import java.util.Arrays;
import java.util.concurrent.TimeUnit;
-
-import static com.dji.sample.manage.model.DeviceStatusManager.DEFAULT_ALIVE_SECOND;
-import static com.dji.sample.manage.model.DeviceStatusManager.STATUS_MANAGER;
/**
* @author sean.zhou
@@ -26,33 +27,36 @@
@Autowired
private IDeviceService deviceService;
+ @Autowired
+ private IMqttTopicService topicService;
+
+ @Autowired
+ private IWaylineJobService waylineJobService;
+
/**
* Check the status of the devices every 30 seconds. It is recommended to use cache.
*/
- @Scheduled(fixedRate = 30, timeUnit = TimeUnit.SECONDS)
+ @Scheduled(initialDelay = 30, fixedRate = 30, timeUnit = TimeUnit.SECONDS)
private void deviceStatusListen() {
- for (Map.Entry<String, LocalDateTime> entry : STATUS_MANAGER.entrySet()) {
- if (entry.getValue().isAfter(
- LocalDateTime.now().minusSeconds(DEFAULT_ALIVE_SECOND))) {
- continue;
+ int start = RedisConst.DEVICE_ONLINE_PREFIX.length();
+
+ RedisOpsUtils.getAllKeys(RedisConst.DEVICE_ONLINE_PREFIX + "*").forEach(key -> {
+ long expire = RedisOpsUtils.getExpire(key);
+ if (expire <= 30) {
+ DeviceDTO device = (DeviceDTO) RedisOpsUtils.get(key);
+ if (DeviceDomainEnum.SUB_DEVICE.getVal() == device.getDomain()) {
+ deviceService.subDeviceOffline(key.substring(start));
+ } else {
+ deviceService.unsubscribeTopicOffline(key.substring(start));
+ deviceService.pushDeviceOfflineTopo(device.getWorkspaceId(), device.getDeviceSn());
+ RedisOpsUtils.hashDel(RedisConst.LIVE_CAPACITY, new String[]{key});
+ RedisOpsUtils.del(RedisConst.HMS_PREFIX + key);
+ }
+ RedisOpsUtils.del(key);
}
+ });
- String device = entry.getKey();
- int index = device.indexOf("/");
-
- STATUS_MANAGER.remove(device);
-
- int type = Integer.parseInt(device.substring(0, index));
- String sn = device.substring(index + 1);
- // Determine whether it is a gateway device.
- if (DeviceDomainEnum.GATEWAY.getVal() == type) {
- deviceService.deviceOffline(sn);
- deviceService.unsubscribeTopicOffline(sn);
- continue;
- }
-
- deviceService.subDeviceOffline(sn);
- }
+ log.info("Subscriptions: {}", Arrays.toString(topicService.getSubscribedTopic()));
}
}
\ No newline at end of file
--
Gitblit v1.9.3