package com.hdl.sdk.connect.config;
|
|
import android.text.TextUtils;
|
|
import com.hdl.sdk.common.config.TopicConstant;
|
import com.hdl.sdk.common.utils.LogUtils;
|
import com.hdl.sdk.common.utils.SPUtils;
|
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
|
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
|
|
|
/**
|
* Created by jlchen on 11/11/21.
|
*
|
* @Description : HDLLinkConfig
|
*/
|
public class HDLLinkConfig {
|
private static final String AUTHENTICATE_LS_KEY = "auth_ls_key";
|
private static final String AUTHENTICATE_GATEWAYID_KEY = "auth_gatewayid_key";
|
private static final String AUTHENTICATE_IPADDRESS_KEY = "auth_ipaddress_key";
|
private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key";
|
|
private String localSecret;//本地加密密钥
|
private String gatewayId;
|
private String ipAddress;
|
private boolean isLocalEncrypt;//网关是否需要加密通讯
|
private GatewaySearchBean currentGateway;//当前网关
|
|
private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//当前设备基本信息
|
|
/**
|
* instance
|
*/
|
private volatile static HDLLinkConfig instance;
|
|
/**
|
* getInstance
|
*
|
* @return AuthenticateConfig
|
*/
|
public static synchronized HDLLinkConfig getInstance() {
|
if (instance == null) {
|
synchronized (HDLLinkConfig.class) {
|
if (instance == null) {
|
instance = new HDLLinkConfig();
|
instance.loadConfig();
|
}
|
}
|
}
|
return instance;
|
}
|
|
/**
|
* 清空缓存
|
*/
|
public void clearConfig() {
|
this.gatewayId = "";
|
this.ipAddress = "";
|
this.localSecret = "";
|
this.isLocalEncrypt = false;
|
SPUtils.remove(AUTHENTICATE_LS_KEY);
|
SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY);
|
SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY);
|
SPUtils.remove(AUTHENTICATE_IS_LS_KEY);
|
}
|
|
/**
|
* 加载缓存
|
*/
|
void loadConfig() {
|
localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, "");
|
gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, "");
|
ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, "");
|
isLocalEncrypt = SPUtils.getBoolean(AUTHENTICATE_IS_LS_KEY, false);
|
}
|
|
/**
|
* 保存配置
|
*
|
* @param localSecret
|
* @param gatewayId
|
* @param ipAddress
|
*/
|
public void saveConfig(String localSecret, String gatewayId, String ipAddress) {
|
this.localSecret = localSecret;
|
this.gatewayId = gatewayId;
|
this.ipAddress = ipAddress;
|
SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
|
SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId);
|
SPUtils.put(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;
|
SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
|
}
|
|
public String getLocalSecret() {
|
LogUtils.i("HDLLinkConfig","密钥是:"+localSecret);
|
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 boolean isLocalEncrypt() {
|
return isLocalEncrypt;
|
}
|
|
public void setLocalEncrypt(boolean localEncrypt) {
|
isLocalEncrypt = localEncrypt;
|
SPUtils.put(AUTHENTICATE_IS_LS_KEY, isLocalEncrypt);
|
}
|
|
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();
|
SPUtils.put(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.equals(TopicConstant.BROADCAST)
|
&& isLocalEncrypt//启用加密标志
|
);
|
}
|
|
/**
|
* 拼接网关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;
|
}
|
}
|