package com.hdl.sdk.connect.config;
|
|
import com.hdl.sdk.common.config.TopicConstant;
|
import com.hdl.sdk.common.utils.TextUtils;
|
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
|
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
|
|
|
/**
|
* Created by jlchen on 11/11/21.
|
* Modify by panlili on 5/7/22
|
*
|
* @Description : HDLLinkConfig
|
*/
|
public class HDLLinkConfig {
|
private static String AUTHENTICATE_LS_KEY = "";
|
private static String AUTHENTICATE_GATEWAYID_KEY = "";
|
private static String AUTHENTICATE_IPADDRESS_KEY = "";
|
|
private String localSecret;//本地加密密钥
|
private String gatewayId;
|
private String ipAddress;
|
private GatewaySearchBean currentGateway;//当前网关
|
|
private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//当前设备基本信息
|
|
/**
|
* instance
|
*/
|
private static final HDLLinkConfig instance = new HDLLinkConfig();
|
|
private HDLLinkConfig() {
|
loadConfig();
|
}
|
|
/**
|
* getInstance
|
*
|
* @return AuthenticateConfig
|
*/
|
public static HDLLinkConfig getInstance() {
|
return instance;
|
}
|
|
/**
|
* 清空缓存
|
*/
|
public void clearConfig() {
|
this.gatewayId = "";
|
this.ipAddress = "";
|
this.localSecret = "";
|
}
|
|
/**
|
* 加载缓存
|
*/
|
void loadConfig() {
|
localSecret = AUTHENTICATE_LS_KEY;
|
gatewayId = AUTHENTICATE_GATEWAYID_KEY;
|
ipAddress = AUTHENTICATE_IPADDRESS_KEY;
|
}
|
|
/**
|
* 保存配置
|
*
|
* @param localSecret
|
* @param gatewayId
|
* @param ipAddress
|
*/
|
public void saveConfig(String localSecret, String gatewayId, String ipAddress) {
|
this.localSecret = localSecret;
|
this.gatewayId = gatewayId;
|
this.ipAddress = ipAddress;
|
AUTHENTICATE_LS_KEY = localSecret;
|
AUTHENTICATE_GATEWAYID_KEY = gatewayId;
|
AUTHENTICATE_IPADDRESS_KEY = ipAddress;
|
}
|
|
/**
|
* 重新保存
|
*/
|
public void reSaveConfig() {
|
this.saveConfig(this.localSecret, this.gatewayId, this.ipAddress);
|
}
|
|
/**
|
* 检测是否已经认证过
|
*
|
* @return
|
*/
|
public boolean checkIfCertified() {
|
//localSecret不为空并且长度等于16 网关id不能为空
|
return !TextUtils.isEmpty(localSecret)
|
&& localSecret.length() == 16
|
&& !TextUtils.isEmpty(gatewayId);
|
}
|
|
public void setLocalSecret(String localSecret) {
|
this.localSecret = localSecret;
|
AUTHENTICATE_LS_KEY = localSecret;
|
}
|
|
public String getLocalSecret() {
|
return localSecret;
|
}
|
|
public String getGatewayId() {
|
return gatewayId;
|
}
|
|
public void setGatewayId(String gatewayId) {
|
this.gatewayId = gatewayId;
|
}
|
|
public String getIpAddress() {
|
return ipAddress;
|
}
|
|
public void setIpAddress(String ipAddress) {
|
this.ipAddress = ipAddress;
|
}
|
|
public GatewaySearchBean getCurrentGateway() {
|
return currentGateway;
|
}
|
|
public void setCurrentGateway(GatewaySearchBean currentGateway) {
|
this.currentGateway = currentGateway;
|
if (this.currentGateway != null && !TextUtils.isEmpty(this.currentGateway.getIp_address())) {
|
if (!this.ipAddress.equals(this.currentGateway.getIp_address())) {
|
//如果IP地址有变化则更新
|
this.ipAddress = this.currentGateway.getIp_address();
|
AUTHENTICATE_IPADDRESS_KEY = ipAddress;
|
}
|
}
|
}
|
|
/**
|
* 判断当前主题数据是否需要加密
|
*
|
* @param topicStr 当前主题
|
* @return
|
*/
|
public boolean ifNeedEncrypt(String topicStr) {
|
//过滤相关需要加密的主题
|
return (!topicStr.contains(TopicConstant.GATEWAY_AUTH_BROADCAST) //网关广播入网指令
|
&& !topicStr.contains(TopicConstant.DEIVCE_AUTH_REQUEST) //入网认证
|
&& !topicStr.contains(TopicConstant.GATEWAY_SEARCH) //搜索网关主题
|
&& !topicStr.contains(TopicConstant.BROADCAST)
|
&& !TextUtils.isEmpty(localSecret) //有密钥就是加密
|
);
|
}
|
|
/**
|
* 拼接网关ID获取完整的主题
|
*
|
* @param topicStr
|
* @return
|
*/
|
public String getFullTopic(String topicStr) {
|
return String.format(topicStr, gatewayId);
|
}
|
|
public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() {
|
return deviceInfoBean;
|
}
|
|
public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) {
|
this.deviceInfoBean = deviceInfoBean;
|
}
|
}
|