|
|
@@ -4,7 +4,6 @@
|
|
|
*/
|
|
|
package org.jetlinks.community.bridge.core;
|
|
|
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
@@ -13,14 +12,10 @@ import java.util.concurrent.TimeoutException;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
|
import com.aliyun.iot.as.bridge.core.BridgeBootstrapApi;
|
|
|
-import com.aliyun.iot.as.bridge.core.client.DeviceServiceClient;
|
|
|
-import com.aliyun.iot.as.bridge.core.client.Http2MessageClientFactory;
|
|
|
-import com.aliyun.iot.as.bridge.core.client.PopClientFactory;
|
|
|
import com.aliyun.iot.as.bridge.core.client.callback.DownlinkMessageCallback;
|
|
|
import com.aliyun.iot.as.bridge.core.client.callback.IoTServiceCallback;
|
|
|
import com.aliyun.iot.as.bridge.core.config.BridgeConfigConsts;
|
|
|
import com.aliyun.iot.as.bridge.core.config.BridgeConfigManager;
|
|
|
-import com.aliyun.iot.as.bridge.core.config.ConfigFactory;
|
|
|
import com.aliyun.iot.as.bridge.core.exception.BootException;
|
|
|
import com.aliyun.iot.as.bridge.core.exception.BridgeHttpException;
|
|
|
import com.aliyun.iot.as.bridge.core.handler.DownlinkChannelHandler;
|
|
|
@@ -32,13 +27,8 @@ import com.aliyun.iot.as.bridge.core.model.device.DeviceAuthRequest;
|
|
|
import com.aliyun.iot.as.bridge.core.model.device.DeviceAuthResponse;
|
|
|
import com.aliyun.iot.as.bridge.core.session.SessionManagerFactory;
|
|
|
import com.aliyun.iot.as.bridge.core.util.AssertUtil;
|
|
|
-import com.aliyun.openservices.iot.api.Profile;
|
|
|
import com.aliyun.openservices.iot.api.exception.IotClientException;
|
|
|
-import com.aliyun.openservices.iot.api.message.MessageClientFactory;
|
|
|
import com.aliyun.openservices.iot.api.message.api.MessageClient;
|
|
|
-import com.aliyun.openservices.iot.api.message.callback.MessageCallback;
|
|
|
-import com.aliyun.openservices.iot.api.message.entity.Message;
|
|
|
-import com.aliyun.openservices.iot.api.message.entity.MessageToken;
|
|
|
import com.aliyun.openservices.iot.api.util.StringUtil;
|
|
|
import com.aliyuncs.DefaultAcsClient;
|
|
|
import com.aliyuncs.exceptions.ClientException;
|
|
|
@@ -47,6 +37,8 @@ import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
|
|
|
import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse.Data;
|
|
|
import com.aliyuncs.iot.model.v20180120.RegisterDeviceRequest;
|
|
|
import com.aliyuncs.iot.model.v20180120.RegisterDeviceResponse;
|
|
|
+import lombok.EqualsAndHashCode;
|
|
|
+import lombok.Getter;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
@@ -56,6 +48,7 @@ import org.slf4j.LoggerFactory;
|
|
|
* socket server.
|
|
|
*
|
|
|
*/
|
|
|
+@EqualsAndHashCode(callSuper = false)
|
|
|
public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(DefaultBridgeBootstrap.class);
|
|
|
@@ -63,9 +56,11 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
|
|
|
private BridgeConfigManager bridgeConfigManager;
|
|
|
|
|
|
-
|
|
|
- public DefaultBridgeBootstrap( BridgeConfigManager bridgeConfigManager) {
|
|
|
+ @Getter
|
|
|
+ private String id;
|
|
|
+ public DefaultBridgeBootstrap(String id, BridgeConfigManager bridgeConfigManager) {
|
|
|
this.bridgeConfigManager = bridgeConfigManager;
|
|
|
+ this.id=id;
|
|
|
SessionManagerFactory.init(new DefaultSessionManager(DefaultDeviceConfigManager.getInstance()));
|
|
|
}
|
|
|
|
|
|
@@ -81,7 +76,7 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
|
|
|
@Override
|
|
|
public void disconnectBridge() {
|
|
|
- Http2MessageClientFactory.disconnect();
|
|
|
+ DefaultHttp2MessageClientFactory.disconnect(this);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -92,7 +87,7 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
|
|
|
@Override
|
|
|
public boolean isBridgeConnected() {
|
|
|
- return Http2MessageClientFactory.isConnected();
|
|
|
+ return DefaultHttp2MessageClientFactory.isConnected(this);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -148,8 +143,8 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
deviceName = bridgeConfigManager.getMacAddress();
|
|
|
PopClientConfiguration popConfigs = bridgeConfigManager.getPopConfiguration();
|
|
|
AssertUtil.isTrue(popConfigs.isComplete(), "bridge deviceName empty && popConfig is not complete!");
|
|
|
- DefaultAcsClient popClient = PopClientFactory.initClient(popConfigs.getAccessKey(),
|
|
|
- popConfigs.getAccessSecret(), popConfigs.getName(), popConfigs.getRegion(), popConfigs.getProduct(),
|
|
|
+ DefaultAcsClient popClient = DefaultPopClientFactory.initClient(popConfigs.getAccessKey(),
|
|
|
+ popConfigs.getAccessSecret(), popConfigs.getRegion(), popConfigs.getProduct(),
|
|
|
popConfigs.getEndpoint());
|
|
|
QueryDeviceDetailRequest queryRequest = new QueryDeviceDetailRequest();
|
|
|
if(StringUtil.isNotEmpty(instanceId)){
|
|
|
@@ -185,7 +180,8 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
} else {
|
|
|
logger.error(String.format("Failed to register bridge[request:%s, response:%s]",
|
|
|
JSON.toJSONString(registerRequest), JSON.toJSONString(registerResponse)));
|
|
|
- throw new BootException("Failed to register bridge " + registerResponse.getRequestId());
|
|
|
+// throw new BootException("Failed to register bridge " + registerResponse.getRequestId());
|
|
|
+ throw new BootException(registerResponse.getErrorMessage());
|
|
|
}
|
|
|
}
|
|
|
} catch (ClientException e) {
|
|
|
@@ -216,7 +212,7 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
}
|
|
|
|
|
|
private void initServiceCall() {
|
|
|
- MessageClient client = Http2MessageClientFactory.getClient();
|
|
|
+ MessageClient client = DefaultHttp2MessageClientFactory.getClient(this);
|
|
|
AssertUtil.notNull(client, "client must be connected before initServiceCall");
|
|
|
String responseTopic = String.format(BridgeConfigConsts.OFFLINE_REPLY_TOPIC_TEMPLATE,
|
|
|
bridgeConfigManager.getBridgeProductKey(), bridgeConfigManager.getBridgeDeviceName());
|
|
|
@@ -239,7 +235,7 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
if(handler == null) {
|
|
|
return;
|
|
|
}
|
|
|
- MessageClient client = Http2MessageClientFactory.getClient();
|
|
|
+ MessageClient client = DefaultHttp2MessageClientFactory.getClient(this);
|
|
|
String responseTopic = String.format(BridgeConfigConsts.SUB_TOPIC_TEMPLATE,
|
|
|
bridgeConfigManager.getBridgeProductKey(), bridgeConfigManager.getBridgeDeviceName());
|
|
|
AssertUtil.notNull(callback, "DefaultDownlinkMessageCallback is null");
|
|
|
@@ -270,7 +266,7 @@ public class DefaultBridgeBootstrap implements BridgeBootstrapApi {
|
|
|
AssertUtil.notBlank(http2EndPoint, "http2 EndPoint is empty");
|
|
|
logger.info("Initialize the bridge with {} & {}, {}", productKey, deviceName, http2EndPoint);
|
|
|
try {
|
|
|
- Http2MessageClientFactory.initClient(productKey, deviceName, deviceSecret, http2EndPoint, isReconnect);
|
|
|
+ DefaultHttp2MessageClientFactory.initClient(this,productKey, deviceName, deviceSecret, http2EndPoint, isReconnect);
|
|
|
} catch (IotClientException e) {
|
|
|
String msg = "Failed to initialize HTTP2 client!" + e.getMessage();
|
|
|
logger.error(msg, e);
|