123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package com.szwl.manager;
- import com.szwl.handle.*;
- import org.springframework.stereotype.Component;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- /**
- * 策略管理器
- */
- @Component
- public class MqttHandlerManager {
- private final Map<String, MqttMessageHandler> handlerMap = new HashMap<>();
- public MqttHandlerManager(List<MqttMessageHandler> handlers) {
- // 手动映射主题到处理器
- handlerMap.put("connected", findHandler(handlers, ConnectedMessageHandler.class));
- handlerMap.put("disconnected", findHandler(handlers, DisconnectedMessageHandler.class));
- handlerMap.put("heart", findHandler(handlers, HeartMessageHandler.class));
- handlerMap.put("response", findHandler(handlers, ResponseMessageHandler.class));
- }
- public void dispatch(String topic, String payload) {
- Optional<Map.Entry<String, MqttMessageHandler>> handlerEntry = handlerMap.entrySet().stream()
- .filter(entry -> topic.matches(entry.getKey())) // 通过正则匹配主题
- .findFirst();
- if (handlerEntry.isPresent()) {
- handlerEntry.get().getValue().handle(topic, payload);
- } else {
- System.out.printf("No handler found for topic [%s]%n", topic);
- }
- }
- private MqttMessageHandler findHandler(List<MqttMessageHandler> handlers, Class<?> clazz) {
- return handlers.stream()
- .filter(handler -> clazz.isAssignableFrom(handler.getClass()))
- .findFirst()
- .orElseThrow(() -> new IllegalArgumentException("No handler found for: " + clazz.getName()));
- }
- }
|