|
@@ -8,6 +8,7 @@ import com.aliyun.iot.as.bridge.core.config.BridgeConfigConsts;
|
|
|
import com.aliyun.iot.as.bridge.core.handler.DownlinkChannelHandler;
|
|
import com.aliyun.iot.as.bridge.core.handler.DownlinkChannelHandler;
|
|
|
import com.aliyun.iot.as.bridge.core.model.PopClientConfiguration;
|
|
import com.aliyun.iot.as.bridge.core.model.PopClientConfiguration;
|
|
|
import com.aliyun.iot.as.bridge.core.model.Session;
|
|
import com.aliyun.iot.as.bridge.core.model.Session;
|
|
|
|
|
+import com.aliyun.openservices.iot.api.exception.IotClientException;
|
|
|
import lombok.*;
|
|
import lombok.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.hswebframework.web.exception.BusinessException;
|
|
import org.hswebframework.web.exception.BusinessException;
|
|
@@ -15,9 +16,13 @@ import org.jetlinks.community.bridge.core.DefaultBridgeBootstrap;
|
|
|
import org.jetlinks.community.bridge.core.DefaultBridgeConfigManager;
|
|
import org.jetlinks.community.bridge.core.DefaultBridgeConfigManager;
|
|
|
import org.jetlinks.community.bridge.core.DefaultDeviceConfigManager;
|
|
import org.jetlinks.community.bridge.core.DefaultDeviceConfigManager;
|
|
|
import org.jetlinks.community.bridge.core.DefaultUplinkChannelHandler;
|
|
import org.jetlinks.community.bridge.core.DefaultUplinkChannelHandler;
|
|
|
|
|
+import org.jetlinks.community.bridge.entity.AliIotBridgeDeviceConfig;
|
|
|
import org.jetlinks.community.bridge.entity.AliIotBridgeEntity;
|
|
import org.jetlinks.community.bridge.entity.AliIotBridgeEntity;
|
|
|
|
|
+import org.jetlinks.community.bridge.enums.BridgeDeviceStatus;
|
|
|
import org.jetlinks.community.bridge.enums.BridgeStatus;
|
|
import org.jetlinks.community.bridge.enums.BridgeStatus;
|
|
|
import org.jetlinks.community.bridge.message.AliBridgeMessage;
|
|
import org.jetlinks.community.bridge.message.AliBridgeMessage;
|
|
|
|
|
+import org.jetlinks.community.bridge.service.AliBridgeDeviceService;
|
|
|
|
|
+import org.jetlinks.community.bridge.service.AliBridgeService;
|
|
|
import org.jetlinks.core.cluster.AbstractClusterUniqueTask;
|
|
import org.jetlinks.core.cluster.AbstractClusterUniqueTask;
|
|
|
import org.jetlinks.core.cluster.ClusterManager;
|
|
import org.jetlinks.core.cluster.ClusterManager;
|
|
|
import org.jetlinks.core.device.DeviceOperator;
|
|
import org.jetlinks.core.device.DeviceOperator;
|
|
@@ -63,6 +68,9 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
|
|
|
|
|
private transient AliBridgeGateway bridgeGateway;
|
|
private transient AliBridgeGateway bridgeGateway;
|
|
|
|
|
|
|
|
|
|
+ private transient final AliBridgeService bridgeService;
|
|
|
|
|
+
|
|
|
|
|
+ private transient final AliBridgeDeviceService bridgeDeviceService;
|
|
|
private AliIotBridgeEntity params;
|
|
private AliIotBridgeEntity params;
|
|
|
|
|
|
|
|
@Getter
|
|
@Getter
|
|
@@ -76,6 +84,8 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
this.id=bridge.getId();
|
|
this.id=bridge.getId();
|
|
|
this.params=bridge;
|
|
this.params=bridge;
|
|
|
this.bridgeGateway= SpringUtil.getBean(AliBridgeGateway.class);
|
|
this.bridgeGateway= SpringUtil.getBean(AliBridgeGateway.class);
|
|
|
|
|
+ this.bridgeService=SpringUtil.getBean(AliBridgeService.class);
|
|
|
|
|
+ this.bridgeDeviceService=SpringUtil.getBean(AliBridgeDeviceService.class);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public Mono<AliBridgeServer> initBridge(AliIotBridgeEntity params,boolean broadcast){
|
|
public Mono<AliBridgeServer> initBridge(AliIotBridgeEntity params,boolean broadcast){
|
|
@@ -114,7 +124,16 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
- });
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+ .onErrorResume(RuntimeException.class,
|
|
|
|
|
+ e->Mono.just(isReplica())
|
|
|
|
|
+ .filter(Boolean.FALSE::equals)
|
|
|
|
|
+ .flatMap(ignore->
|
|
|
|
|
+ bridgeService.createUpdate().set(AliIotBridgeEntity::getState,BridgeStatus.fail)
|
|
|
|
|
+ .set(AliIotBridgeEntity::getErrorReason,e.getMessage())
|
|
|
|
|
+ .where(AliIotBridgeEntity::getId,id)
|
|
|
|
|
+ .execute()))
|
|
|
|
|
+ .then(Mono.just(this));
|
|
|
}
|
|
}
|
|
|
return Mono.just(this);
|
|
return Mono.just(this);
|
|
|
}
|
|
}
|
|
@@ -219,11 +238,15 @@ public class AliBridgeServer extends AbstractClusterUniqueTask<AliBridgeServer>
|
|
|
})
|
|
})
|
|
|
.thenReturn(channel)
|
|
.thenReturn(channel)
|
|
|
)
|
|
)
|
|
|
- .onErrorResume(error->
|
|
|
|
|
- Mono.error(()->{
|
|
|
|
|
- this.unRegister(originalIdentity,broadcast);
|
|
|
|
|
- return new BusinessException("请检查deviceName和deviceSecret是否填写正确");
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ .onErrorResume(RuntimeException.class,
|
|
|
|
|
+ e->Mono.just(isReplica())
|
|
|
|
|
+ .filter(Boolean.FALSE::equals)
|
|
|
|
|
+ .flatMap(ignore->
|
|
|
|
|
+ bridgeDeviceService.createUpdate().set(AliIotBridgeDeviceConfig::getState, BridgeDeviceStatus.fail)
|
|
|
|
|
+ .set(AliIotBridgeDeviceConfig::getErrorReason,e.getMessage())
|
|
|
|
|
+ .where(AliIotBridgeDeviceConfig::getOriginalIdentity,originalIdentity)
|
|
|
|
|
+ .execute()
|
|
|
|
|
+ .then(Mono.empty())));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|