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); } }