From 75812584f4fd127310d3bbaefd8d1ed00c754df5 Mon Sep 17 00:00:00 2001 From: HSZ_HeSongZhen <210202959@qq.com> Date: Wed, 7 May 2025 20:07:49 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=B3=A8=E5=86=8C=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E5=A4=84=E7=90=86handler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/iflytop/gd/hardware/HardwareService.java | 12 ++++++++++++ .../java/com/iflytop/gd/hardware/command/CommandHandler.java | 4 +--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iflytop/gd/hardware/HardwareService.java b/src/main/java/com/iflytop/gd/hardware/HardwareService.java index 86ccef6..7a14e98 100644 --- a/src/main/java/com/iflytop/gd/hardware/HardwareService.java +++ b/src/main/java/com/iflytop/gd/hardware/HardwareService.java @@ -14,12 +14,14 @@ import com.iflytop.gd.hardware.command.checker.SupportMethod; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; import java.security.InvalidParameterException; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.concurrent.ThreadPoolExecutor; @@ -28,6 +30,7 @@ import java.util.concurrent.ThreadPoolExecutor; @RequiredArgsConstructor public class HardwareService { private final ApplicationEventPublisher eventPublisher; + private final ApplicationContext applicationContext; private final Map cmdHandlers = new HashMap<>(); ThreadPoolExecutor executor = ThreadUtil.newFixedExecutor(50, "hardware-service", true); @@ -35,6 +38,15 @@ public class HardwareService { @PostConstruct public void postInit() { + Map handlers = applicationContext.getBeansOfType(CommandHandler.class); + handlers.values().forEach(this::registerCommandHandler); + } + + void registerCommandHandler(CommandHandler handler) { + Set devices = handler.getSupportedDevices(); + for (CmdDevice device : devices) { + cmdHandlers.put(device, handler); + } } diff --git a/src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java b/src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java index aa5ea34..0fec2f4 100644 --- a/src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java +++ b/src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java @@ -38,13 +38,11 @@ public abstract class CommandHandler { /** * 获取支持的设备 */ - protected Set getSupportedDevices() { + public Set getSupportedDevices() { Map cmdDeviceMIdMap = getSupportCmdDeviceMIdMap(); return cmdDeviceMIdMap.keySet(); } - - /** * 检查Action 是否合法 * @param action