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";
|
public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key";
|
|
public static final String GATEWAY_REMOTEINFO_KEY="gateway_remoteinfo_key";
|
private static final String GATEWAY_PARENTOID_KEY = "gateway_parentoiid_key";
|
|
private String localSecret;//本地加密密钥
|
private String gatewayId;
|
private String ipAddress;
|
private GatewaySearchBean currentGateway;//当前网关
|
private String networkName;
|
private String homeId;
|
private String parentOid;
|
|
private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//当前设备基本信息
|
private AuthenticateRequest.RequestBean requestBean;//当前设备基本信息
|
private AuthenticateRequest.AuthBean authBean;//当前设备认证信息
|
|
/**
|
* instance
|
*/
|
private static final HDLLinkConfig instance=new HDLLinkConfig();
|
private HDLLinkConfig()
|
{
|
loadConfig();
|
}
|
|
/**
|
* getInstance
|
*
|
* @return AuthenticateConfig
|
*/
|
public static 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.homeId="";
|
SPUtils.remove(AUTHENTICATE_LS_KEY);
|
SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY);
|
SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY);
|
SPUtils.remove(AUTHENTICATE_IS_LS_KEY);
|
SPUtils.remove(GATEWAY_REMOTEINFO_KEY);
|
SPUtils.remove(GATEWAY_PARENTOID_KEY);
|
}
|
|
/**
|
* 加载缓存
|
*/
|
void loadConfig() {
|
localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, "");
|
gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, "");
|
ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, "");
|
homeId = SPUtils.getString(GATEWAY_REMOTEINFO_KEY, "");
|
parentOid = SPUtils.getString(GATEWAY_PARENTOID_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;
|
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(gatewayId);
|
// 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() {
|
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 String getParentOid() {
|
return parentOid;
|
}
|
|
public void setParentOid(String parentOid) {
|
this.parentOid = parentOid;
|
SPUtils.put(GATEWAY_PARENTOID_KEY, parentOid);
|
}
|
|
public String getNetworkName() {
|
return networkName;
|
}
|
|
public void setNetworkName(String networkName) {
|
this.networkName = networkName;
|
}
|
|
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.contains(TopicConstant.BROADCAST)
|
&& !TextUtils.isEmpty(localSecret) //有密钥就是加密
|
);
|
}
|
|
/**
|
* 拼接网关ID获取完整的主题
|
*
|
* @param topicStr
|
* @return
|
*/
|
public String getFullTopic(String topicStr) {
|
return String.format(topicStr, gatewayId);
|
}
|
|
public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() {
|
AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY);
|
if(infoBean==null){
|
infoBean= new AuthenticateRequest.AuthenticateDeviceInfoBean();
|
}
|
return infoBean;
|
}
|
|
public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) {
|
this.deviceInfoBean = deviceInfoBean;
|
SPUtils.saveSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY, deviceInfoBean);
|
}
|
|
public AuthenticateRequest.RequestBean getRequestBean() {
|
return requestBean;
|
}
|
|
public void setRequestBean(AuthenticateRequest.RequestBean requestBean) {
|
this.requestBean = requestBean;
|
}
|
|
public AuthenticateRequest.AuthBean getAuthBean() {
|
return authBean;
|
}
|
|
public void setAuthBean(AuthenticateRequest.AuthBean authBean) {
|
this.authBean = authBean;
|
}
|
|
public String getHomeId() {
|
return homeId;
|
}
|
|
public void setHomeId(String homeId) {
|
this.homeId = homeId;
|
SPUtils.put(GATEWAY_REMOTEINFO_KEY, homeId);
|
}
|
}
|