Browse Source

add: 注册指令处理handler

master
HSZ_HeSongZhen 3 months ago
parent
commit
75812584f4
  1. 12
      src/main/java/com/iflytop/gd/hardware/HardwareService.java
  2. 4
      src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java

12
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 jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.security.InvalidParameterException; import java.security.InvalidParameterException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
@ -28,6 +30,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@RequiredArgsConstructor @RequiredArgsConstructor
public class HardwareService { public class HardwareService {
private final ApplicationEventPublisher eventPublisher; private final ApplicationEventPublisher eventPublisher;
private final ApplicationContext applicationContext;
private final Map<CmdDevice, CommandHandler> cmdHandlers = new HashMap<>(); private final Map<CmdDevice, CommandHandler> cmdHandlers = new HashMap<>();
ThreadPoolExecutor executor = ThreadUtil.newFixedExecutor(50, "hardware-service", true); ThreadPoolExecutor executor = ThreadUtil.newFixedExecutor(50, "hardware-service", true);
@ -35,6 +38,15 @@ public class HardwareService {
@PostConstruct @PostConstruct
public void postInit() { public void postInit() {
Map<String, CommandHandler> handlers = applicationContext.getBeansOfType(CommandHandler.class);
handlers.values().forEach(this::registerCommandHandler);
}
void registerCommandHandler(CommandHandler handler) {
Set<CmdDevice> devices = handler.getSupportedDevices();
for (CmdDevice device : devices) {
cmdHandlers.put(device, handler);
}
} }

4
src/main/java/com/iflytop/gd/hardware/command/CommandHandler.java

@ -38,13 +38,11 @@ public abstract class CommandHandler {
/** /**
* 获取支持的设备 * 获取支持的设备
*/ */
protected Set<CmdDevice> getSupportedDevices() {
public Set<CmdDevice> getSupportedDevices() {
Map<CmdDevice, MId> cmdDeviceMIdMap = getSupportCmdDeviceMIdMap(); Map<CmdDevice, MId> cmdDeviceMIdMap = getSupportCmdDeviceMIdMap();
return cmdDeviceMIdMap.keySet(); return cmdDeviceMIdMap.keySet();
} }
/** /**
* 检查Action 是否合法 * 检查Action 是否合法
* @param action * @param action

Loading…
Cancel
Save