package com.hdl.sdk.common.utils;
|
|
import android.text.TextUtils;
|
import android.util.Base64;
|
import android.util.Log;
|
|
import com.google.gson.reflect.TypeToken;
|
import com.hdl.sdk.common.config.TopicConstant;
|
import com.hdl.sdk.common.exception.HDLLinkException;
|
import com.hdl.sdk.common.utils.gson.GsonConvert;
|
import com.hdl.sdk.connect.HDLLink;
|
import com.hdl.sdk.connect.bean.LinkResponse;
|
import com.hdl.sdk.connect.bean.request.GatewayRemoteEditRequest;
|
import com.hdl.sdk.connect.bean.response.DeviceDeleteResponse;
|
import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
|
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
|
import com.hdl.sdk.connect.config.HDLLinkConfig;
|
import com.hdl.sdk.connect.socket.HDLAuthSocket;
|
import com.hdl.sdk.connect.socket.HDLSocket;
|
import com.hdl.sdk.connect.utils.AesUtil;
|
|
/**
|
* Created by hxb on 2023/9/14.
|
*/
|
public class AllTopicManagerUtils {
|
|
/**
|
* 全局主题处理方法,可以处理所有接收到的数据
|
*
|
* @param linkResponse
|
*/
|
public static void manager(LinkResponse linkResponse) {
|
try {
|
if (linkResponse == null) {
|
return;
|
}
|
String topic = linkResponse.getTopic();
|
if (TextUtils.isEmpty(topic)) {
|
return;
|
}
|
String[] topics = topic.split("/");
|
//非当前住宅网关的数据返回
|
if (topics.length < 3) {
|
return;
|
}
|
|
String mac_Oid_GatewayId = topics[2];
|
Log.d("panlili", "AllTopicManagerUtils.java:manager----->topic= " + topic);
|
|
if (!isLocalDevice(mac_Oid_GatewayId)) {
|
LogUtils.i("不是当前设备的网关Id,Id是" + mac_Oid_GatewayId);
|
//非当前设备的数据
|
return;
|
}
|
|
if (isSameTopic(TopicConstant.GATEWAY_EDIT_REMOTE, topic)) {
|
gatewayRemoteEditRequest(mac_Oid_GatewayId, linkResponse.getData());
|
} else if (isSameTopic(TopicConstant.GATEWAY_SEARCH, topic)) {
|
HDLAuthSocket.getInstance().UploadGatewayInfo(null);
|
} else if (isSameTopic(TopicConstant.LINK_BROADCAST, topic)) {
|
managerLinkBroadcast(linkResponse.getData());
|
} else if (isSameTopic(TopicConstant.DELETE_NOTIFY, topic)) {
|
managerDeleteNofity(linkResponse.getData());
|
}
|
|
} catch (Exception e) {
|
LogUtils.e("全局处理模块异常:" + e.getMessage());
|
}
|
}
|
|
/**
|
* 是否当前的设备
|
*
|
* @param mac_Oid_GatewayId
|
* @return
|
*/
|
private static boolean isLocalDevice(String mac_Oid_GatewayId) {
|
if (TextUtils.isEmpty(mac_Oid_GatewayId)) {
|
return false;
|
}
|
String mac = HDLLinkConfig.getInstance().getDeviceInfoBean().getDeviceMAC();
|
String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
|
String gatewayId = HDLLinkConfig.getInstance().getGatewayId();
|
String all = "all";
|
|
return mac_Oid_GatewayId.equals(mac) || mac_Oid_GatewayId.equals(oid) || mac_Oid_GatewayId.equals(gatewayId) || mac_Oid_GatewayId.toLowerCase().equals(all);
|
}
|
|
/**
|
* 是否相同主题
|
*
|
* @param targetTopic 目标的主题
|
* @param sourceTopic 接收的主题
|
* @return
|
*/
|
private static boolean isSameTopic(String targetTopic, String sourceTopic) {
|
if (TextUtils.isEmpty(targetTopic) || TextUtils.isEmpty(sourceTopic)) {
|
return false;
|
}
|
String[] targetTopics = targetTopic.split("/");
|
String[] sourceTopics = sourceTopic.split("/");
|
|
if (targetTopics.length != sourceTopics.length) {
|
return false;
|
}
|
for (int i = 0; i < targetTopics.length; i++) {
|
if (i == 2) {
|
//这个位置不匹配,是网关id
|
continue;
|
}
|
if (!targetTopics[i].equals(sourceTopics[i])) {
|
return false;
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 网关信息配置
|
*
|
* @param body
|
*/
|
private static void gatewayRemoteEditRequest(String mac_Oid_GatewayId, String body) {
|
if (TextUtils.isEmpty(body)) {
|
return;
|
}
|
GatewayRemoteEditRequest gatewayRemoteEditRequest = GsonConvert.getGson().fromJson(body, new TypeToken<GatewayRemoteEditRequest>() {
|
}.getType());
|
|
if (gatewayRemoteEditRequest == null || gatewayRemoteEditRequest.getObjects() == null) {
|
return;
|
}
|
|
String homeId = gatewayRemoteEditRequest.getObjects().getHomeId();
|
HDLLinkConfig.getInstance().setHomeId(homeId);
|
|
HDLSocket.getInstance().gatewayRemoteEditReply(mac_Oid_GatewayId, gatewayRemoteEditRequest.getId(), null);
|
}
|
|
/**
|
* 更新密钥
|
*
|
* @param body
|
*/
|
private static void managerLinkBroadcast(String body) {
|
try {
|
DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceInfoResponse>() {
|
}.getType());
|
|
if (deviceInfoResponse == null || deviceInfoResponse.getObjects() == null) {
|
return;
|
}
|
if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) {
|
byte[] baseBytes = Base64.decode(deviceInfoResponse.getObjects().getLocalSecret(), Base64.NO_WRAP);
|
String mackey = "";
|
if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) {
|
mackey = SPUtils.getString("auth_mackey_key", "");
|
byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16));
|
String localSecret = new String(bodyBytes, "utf-8");
|
Log.d("panlili", "更新密钥----->localSecret= " + localSecret);
|
HDLLinkConfig.getInstance().setLocalSecret(localSecret);
|
}
|
}
|
} catch (Exception e) {
|
LogUtils.i("LinkMessageDecoder.java:getLocalSecret----->e= " + e.getMessage());
|
}
|
}
|
|
/**
|
* 退网
|
*
|
* @param body
|
*/
|
private static void managerDeleteNofity(String body) {
|
try {
|
DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceDeleteResponse>() {
|
}.getType());
|
|
if (deviceDeleteResponse == null || deviceDeleteResponse.getObjects() == null) {
|
return;
|
}
|
HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() {
|
@Override
|
public void onSuccess(String msg) {
|
|
}
|
|
@Override
|
public void onError(HDLLinkException e) {
|
|
}
|
});
|
} catch (Exception e) {
|
LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage());
|
}
|
}
|
}
|