package com.hdl.sdk.connect.config; import android.text.TextUtils; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.utils.SPUtils; 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;//当前网关 /** * 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); } /** * 检测是否已经认证过 * @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() { return localSecret; } public String getGatewayId() { return gatewayId; } public String getIpAddress() { return 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; } /** * 判断当前主题数据是否需要加密 * @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) //搜索网关主题 && isLocalEncrypt//启用加密标志 ); } /** * 拼接网关ID获取完整的主题 * @param topicStr * @return */ public String getFullTopic(String topicStr){ return String.format(topicStr, gatewayId); } }