|
|
@@ -6,7 +6,6 @@ import org.hswebframework.web.logger.ReactiveLogger;
|
|
|
import org.jetlinks.community.bridge.core.AliBridgeCodec;
|
|
|
import org.jetlinks.community.bridge.entity.AliIotBridgeEntity;
|
|
|
import org.jetlinks.community.bridge.message.AliBridgeMessage;
|
|
|
-import org.jetlinks.community.bridge.service.AliBridgeService;
|
|
|
import org.jetlinks.core.cluster.ClusterManager;
|
|
|
import org.jetlinks.core.cluster.ClusterService;
|
|
|
import org.jetlinks.core.device.DeviceRegistry;
|
|
|
@@ -20,8 +19,11 @@ import org.jetlinks.core.message.property.WritePropertyMessage;
|
|
|
import org.jetlinks.supports.server.DecodedClientMessageHandler;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
-import reactor.core.publisher.*;
|
|
|
+import reactor.core.publisher.EmitterProcessor;
|
|
|
+import reactor.core.publisher.FluxSink;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
import reactor.core.scheduler.Schedulers;
|
|
|
+
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
@@ -63,13 +65,16 @@ public class AliBridgeGateway extends ClusterService<AliIotBridgeEntity> {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ public boolean contains(String serverId){
|
|
|
+ return this.bridgeMap.containsKey(serverId);
|
|
|
+ }
|
|
|
|
|
|
public Mono<AliBridgeServer> lookUpServer(String serverId){
|
|
|
return Mono.justOrEmpty(this.bridgeMap.get(serverId));
|
|
|
}
|
|
|
|
|
|
- public Mono<AliBridgeServer> refreshServer(String serverId,AliBridgeServer server){
|
|
|
- return Mono.justOrEmpty(this.bridgeMap.put(serverId,server));
|
|
|
+ public void refreshServer(String serverId,AliBridgeServer server){
|
|
|
+ this.bridgeMap.put(serverId,server);
|
|
|
}
|
|
|
/**
|
|
|
* 重启网桥
|
|
|
@@ -87,27 +92,26 @@ public class AliBridgeGateway extends ClusterService<AliIotBridgeEntity> {
|
|
|
* @return
|
|
|
*/
|
|
|
public Mono<Void> initBridge(AliIotBridgeEntity resource,boolean broadcast){
|
|
|
- return lookUpServer(resource.getId())
|
|
|
+ Mono<AliBridgeServer> mono=null;
|
|
|
+ mono=contains(resource.getId())?
|
|
|
+ lookUpServer(resource.getId()):
|
|
|
+ Mono.just(new AliBridgeServer(eventBus,registry,resource))
|
|
|
+ .doOnNext(server->{
|
|
|
+ server.handleReceive()
|
|
|
+ .parallel()
|
|
|
+ .runOn(Schedulers.parallel())
|
|
|
+ .flatMap(this::decodeAndHandleMessage)
|
|
|
+ .subscribe();
|
|
|
+ })
|
|
|
+ .doOnNext(server -> refreshServer(resource.getId(),server))
|
|
|
+ .onErrorResume(error->
|
|
|
+ Mono.error(()->{
|
|
|
+ this.delBridgeServer(
|
|
|
+ resource.getId(),broadcast);
|
|
|
+ return new BusinessException(error.getMessage());
|
|
|
+ }));
|
|
|
+ return mono
|
|
|
.flatMap(server -> server.refreshBootStrap(resource,broadcast))
|
|
|
- .switchIfEmpty(
|
|
|
- Mono.just(new AliBridgeServer(eventBus,registry,resource))
|
|
|
- .doOnNext(server -> refreshServer(resource.getId(),server))
|
|
|
- .flatMap(server -> server.initBridge(resource,broadcast))
|
|
|
- .doOnNext(server->{
|
|
|
- server.handleReceive()
|
|
|
- .parallel()
|
|
|
- .runOn(Schedulers.parallel())
|
|
|
- .flatMap(this::decodeAndHandleMessage)
|
|
|
- .subscribe();
|
|
|
- })
|
|
|
- .onErrorResume(error->
|
|
|
- Mono.error(()->{
|
|
|
- this.delBridgeServer(
|
|
|
- resource.getId(),broadcast);
|
|
|
- return new BusinessException(error.getMessage());
|
|
|
- }))
|
|
|
- )
|
|
|
-
|
|
|
.flatMap(AliBridgeServer::refreshAllChannel);
|
|
|
}
|
|
|
|