Bladeren bron

优化协议加载

zhouhao 5 jaren geleden
bovenliggende
commit
035d690bf0

+ 22 - 4
jetlinks-standalone/src/main/java/org/jetlinks/community/standalone/configuration/SpringProtocolSupportLoader.java

@@ -1,20 +1,38 @@
 package org.jetlinks.community.standalone.configuration;
 
-import org.jetlinks.supports.protocol.management.MuiltiProtocolSupportLoader;
+import org.jetlinks.core.ProtocolSupport;
+import org.jetlinks.supports.protocol.management.ProtocolSupportDefinition;
+import org.jetlinks.supports.protocol.management.ProtocolSupportLoader;
 import org.jetlinks.supports.protocol.management.ProtocolSupportLoaderProvider;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.stereotype.Component;
+import reactor.core.publisher.Mono;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 
 @Component
-public class SpringProtocolSupportLoader extends MuiltiProtocolSupportLoader implements BeanPostProcessor {
+public class SpringProtocolSupportLoader implements ProtocolSupportLoader,BeanPostProcessor {
+
+    private final Map<String, ProtocolSupportLoaderProvider> providers = new ConcurrentHashMap<>();
 
+    public void register(ProtocolSupportLoaderProvider provider) {
+        this.providers.put(provider.getProvider(), provider);
+    }
+    @Override
+    public Mono<? extends ProtocolSupport> load(ProtocolSupportDefinition definition) {
+        return Mono.justOrEmpty(this.providers.get(definition.getProvider()))
+            .switchIfEmpty(Mono.error(() -> new UnsupportedOperationException("unsupported provider:" + definition.getProvider())))
+            .flatMap((provider) -> provider.load(definition));
+    }
 
     @Override
     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
-        if(bean instanceof ProtocolSupportLoaderProvider){
+        if (bean instanceof ProtocolSupportLoaderProvider) {
             register(((ProtocolSupportLoaderProvider) bean));
         }
         return bean;
     }
-}
+}