From 9b2eedb85d53ca32610c32c6e50b5230ab3b16cf Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 22 Jul 2022 20:16:03 +0800
Subject: [PATCH] V1.1.0 for dock
---
src/main/java/com/dji/sample/component/GlobalScheduleService.java | 53 +++++++++++++++++++++++++++--------------------------
1 files changed, 27 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..2813388 100644
--- a/src/main/java/com/dji/sample/component/GlobalScheduleService.java
+++ b/src/main/java/com/dji/sample/component/GlobalScheduleService.java
@@ -1,5 +1,9 @@
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 lombok.extern.slf4j.Slf4j;
@@ -7,12 +11,8 @@
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 +26,34 @@
@Autowired
private IDeviceService deviceService;
+ @Autowired
+ private RedisOpsUtils redisOps;
+
+ @Autowired
+ private IMqttTopicService topicService;
+
/**
* 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();
+
+ redisOps.getAllKeys(RedisConst.DEVICE_ONLINE_PREFIX + "*").forEach(key -> {
+ long expire = redisOps.getExpire(key);
+ if (expire <= 30) {
+ DeviceDTO device = (DeviceDTO) redisOps.get(key);
+ if (device.getDomain().equals(DeviceDomainEnum.SUB_DEVICE.getDesc())) {
+ deviceService.subDeviceOffline(key.substring(start));
+ } else {
+ deviceService.unsubscribeTopicOffline(key.substring(start));
+ deviceService.pushDeviceOfflineTopo(device.getWorkspaceId(), device.getDeviceSn());
+ }
+ redisOps.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