|
|
@@ -20,7 +20,6 @@ import org.jetlinks.community.bridge.core.DefaultUplinkChannelHandler;
|
|
|
import org.jetlinks.community.bridge.entity.AliIotBridgeEntity;
|
|
|
import org.jetlinks.community.bridge.enums.BridgeStatus;
|
|
|
import org.jetlinks.community.bridge.message.AliBridgeMessage;
|
|
|
-import org.jetlinks.community.bridge.server.Channel;
|
|
|
import org.jetlinks.core.cluster.AbstractClusterUniqueTask;
|
|
|
import org.jetlinks.core.cluster.ClusterManager;
|
|
|
import org.jetlinks.core.device.DeviceOperator;
|
|
|
@@ -30,6 +29,7 @@ import org.redisson.api.RedissonClient;
|
|
|
import reactor.core.publisher.*;
|
|
|
import javax.validation.constraints.NotNull;
|
|
|
import java.io.Serializable;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
@@ -46,7 +46,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer> {
|
|
|
- private transient Map<String, Channel> channelMap=new ConcurrentHashMap<>();
|
|
|
+ private transient Map<String, DefaultAliBridgeChannel> channelMap=new ConcurrentHashMap<>();
|
|
|
|
|
|
private transient final EventBus eventBus;
|
|
|
|
|
|
@@ -81,7 +81,7 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
this.bridgeGateway= SpringUtil.getBean(AliBridgeGateway.class);
|
|
|
}
|
|
|
|
|
|
- public Mono<Void> initBridge(AliIotBridgeEntity params,boolean broadcast){
|
|
|
+ public Mono<AliBridgeServer> initBridge(AliIotBridgeEntity params,boolean broadcast){
|
|
|
this.params=params;
|
|
|
this.status=params.getState();
|
|
|
verify(params);
|
|
|
@@ -116,7 +116,7 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
});
|
|
|
}
|
|
|
params.setDeviceName(bridgeConfigManager.getDeviceName());
|
|
|
- return Mono.empty();
|
|
|
+ return Mono.just(this);
|
|
|
}
|
|
|
|
|
|
public Mono<AliBridgeServer> refreshBootStrap(AliIotBridgeEntity params,boolean broadcast){
|
|
|
@@ -150,6 +150,14 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
bridgeConfigManager = DefaultBridgeConfigManager.of(params.getId(),productKey, null, null, http2Endpoint, authEndpoint, MapUtil.of(Pair.of(BridgeConfigConsts.BRIDGE_INSTANCEID_KEY,params.getAccessConfig().getIotInstanceId())), getPopClientProfile(accessKey, accessSecret, regionId));
|
|
|
}
|
|
|
|
|
|
+ public Mono<Void> refreshAllChannel(){
|
|
|
+ Collection<DefaultAliBridgeChannel> channels = channelMap.values();
|
|
|
+ return Flux.fromStream(channels.stream())
|
|
|
+ .flatMap(channel->
|
|
|
+ register(this.getId(),channel.getOriginalIdentity(),channel.getProductKey(),channel.getDeviceName(),channel.getDeviceSecret(),false))
|
|
|
+ .then();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private PopClientConfiguration getPopClientProfile(@NotNull String accessKey,@NotNull String accessSecret,@NotNull String endpoint){
|
|
|
PopClientConfiguration popClientConfiguration = new PopClientConfiguration();
|
|
|
@@ -163,13 +171,14 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
}
|
|
|
|
|
|
|
|
|
- public Mono<Channel> register(@NotNull String bridgeId,@NotNull String originalIdentity,@NotNull String productKey,@NotNull String deviceName,@NotNull String deviceSecret,
|
|
|
- boolean broadcast) {
|
|
|
+ public Mono<DefaultAliBridgeChannel> register(@NotNull String bridgeId,@NotNull String originalIdentity,@NotNull String productKey,@NotNull String deviceName,@NotNull String deviceSecret,
|
|
|
+ boolean broadcast) {
|
|
|
//注册设备信息
|
|
|
DefaultDeviceConfigManager.register(bridgeId,originalIdentity,productKey,deviceName,deviceSecret);
|
|
|
DefaultUplinkChannelHandler uplinkChannelHandler = new DefaultUplinkChannelHandler(bridgeConfigManager, DefaultDeviceConfigManager.getInstance());
|
|
|
channelMap
|
|
|
- .putIfAbsent(originalIdentity, new DefaultAliBridgeChannel(originalIdentity, productKey, deviceName, uplinkChannelHandler, deviceRegistry, eventBus));
|
|
|
+ .putIfAbsent(originalIdentity, new DefaultAliBridgeChannel(originalIdentity, productKey, deviceName,deviceSecret, uplinkChannelHandler, deviceRegistry, eventBus));
|
|
|
+
|
|
|
if(broadcast){
|
|
|
getClusterOperationTopic()
|
|
|
.publish(Mono.just(OperationMessage.builder()
|
|
|
@@ -184,7 +193,7 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
return Mono.empty();
|
|
|
}
|
|
|
return Mono.just(channelMap.get(originalIdentity))
|
|
|
- .doOnNext(Channel::init)
|
|
|
+ .doOnNext(DefaultAliBridgeChannel::init)
|
|
|
.flatMap(channel ->
|
|
|
deviceRegistry.getDevice(channel.getOriginalIdentity())
|
|
|
.flatMap(DeviceOperator::isOnline)
|
|
|
@@ -209,7 +218,7 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
|
|
|
public Mono<Void> unRegister(String originalIdentity,boolean broadcast) {
|
|
|
return Mono.fromRunnable(()->{
|
|
|
- Channel channel = channelMap.remove(originalIdentity);
|
|
|
+ DefaultAliBridgeChannel channel = channelMap.remove(originalIdentity);
|
|
|
if(broadcast){
|
|
|
getClusterOperationTopic()
|
|
|
.publish(Mono.just(OperationMessage.builder()
|
|
|
@@ -251,7 +260,7 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
if(bootstrap!=null){
|
|
|
if(!isReplica()){
|
|
|
bootstrap.reconnectBridge();
|
|
|
- channelMap.values().forEach(Channel::online);
|
|
|
+ channelMap.values().forEach(DefaultAliBridgeChannel::online);
|
|
|
}
|
|
|
}
|
|
|
changeStatus(BridgeStatus.running,broadcast);
|