From fdcf461fbfa3bcd650685743e891ad3357898f0c Mon Sep 17 00:00:00 2001 From: 562935844@qq.com Date: 星期四, 31 八月 2023 17:36:50 +0800 Subject: [PATCH] 更新sdk --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java | 149 ++++++++++++++++++++++++++++--------------------- 1 files changed, 86 insertions(+), 63 deletions(-) diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java index 20df34d..4e2cbb0 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java @@ -2,18 +2,37 @@ import android.os.Build; +import android.text.TextUtils; +import android.util.Log; +import androidx.annotation.RequiresApi; + +import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; +import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.ByteUtils; import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.common.utils.SPUtils; +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.AuthenticateRequest; +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; import com.hdl.sdk.socket.codec.ByteToMessageDecoder; import java.util.ArrayList; -import java.util.Base64; import java.util.List; + +import android.util.Base64; + +import kotlin.ParameterName; /** * Created by Tong on 2021/9/22. @@ -112,6 +131,7 @@ } + @RequiresApi(api = Build.VERSION_CODES.O) @Override protected synchronized LinkResponse decoder(Object msg, String ipaddress) throws Exception { if (msg instanceof byte[]) { @@ -163,7 +183,7 @@ //涔嬪墠鐨勭増鏈繖鍧楁槸鏄庢枃鐨� if (!topic.contains("heartbeat_reply")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.getEncoder().encodeToString(body)); + LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.encodeToString(body, Base64.NO_WRAP)); else { LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + new String(body, "utf-8")); } @@ -176,6 +196,70 @@ String bodyString = new String(body, "utf-8"); response.setData(bodyString); LogUtils.i("鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData()); + + String updateLocalSecret = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getGatewayId()); + String deleteNetwork = ""; + if (HDLLinkConfig.getInstance().getDeviceInfoBean() != null) { + deleteNetwork = String.format(TopicConstant.DELETE_NOTIFY, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); + } + + if (response.getTopic().equals("/user/all/custom/gateway/search")) { + HDLAuthSocket.getInstance().UploadGatewayInfo(new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + LogUtils.i("UploadGatewayInfo onSucceed"); + } + + @Override + public void onError(HDLLinkException e) { + LogUtils.i("UploadGatewayInfo onError"); + } + }); + } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) { + try { + DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() { + }.getType()); + + 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()); + } + } else if (response.getTopic().equals(deleteNetwork)) { + try { + DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceDeleteResponse>() { + }.getType()); + HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + LogUtils.i("deleteNetwork onSucceed"); + if (HDLLink.getInstance().listener != null) { + HDLLink.getInstance().listener.onSuccess(msg); + } + } + + @Override + public void onError(HDLLinkException e) { + LogUtils.i("deleteNetwork onError"); + if (HDLLink.getInstance().listener != null) { + HDLLink.getInstance().listener.onFailure(); + } + } + }); + } catch (Exception e) { + LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage()); + } + } + //闈炴甯告暟鎹紝杩斿洖 if (!((bodyString.startsWith("{") && bodyString.endsWith("}")) || (bodyString.startsWith("[") && bodyString.endsWith("]")))) { @@ -185,67 +269,6 @@ EventDispatcher.getInstance().post(response.getTopic(), response); } return null; - -// //瑙f瀽娴� -// byte[] data = (byte[]) msg; -// bytes.addAll(ByteUtils.toByteList(data)); -// -// byte[] byteArray = ByteUtils.toByteArray(bytes); -// int headIndex = ByteUtils.getByteIndexOf(byteArray, head); -// if (headIndex > 0) { -// //绉诲姩鍒癶ead 寮�濮嬩綅缃� -// bytes.subList(0, headIndex).clear(); -// byteArray = ByteUtils.toByteArray(bytes); -// } -// -// int bodyIndex = ByteUtils.getByteIndexOf(byteArray, body); -// if (bodyIndex < 0) { -// //澶撮儴鏈幏鍙栧畬鎴� -// return null; -// } -// int bodyStartIndex = bodyIndex + body.length; -// -// //瑙f瀽澶撮儴 -// ProtocolParse parse = new ProtocolParse(byteArray); -// response.setTopic(parse.getTopic()); -// -// int bodyLength = parse.getLength(); -// if (bodyLength > 0) { -// if (byteArray.length >= bodyLength + bodyStartIndex) { -// byte[] body = ByteUtils.getRangeBytes(bytes, bodyStartIndex, bodyStartIndex + bodyLength); -// -// if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) { -// //闇�瑕佽В瀵� -// byte[] bodyBytes = AesUtil.aesDecrypt(body, HDLLinkConfig.getInstance().getLocalSecret()); -//// byte[] bodyBytes = AESUtils.decryptAES(body,AuthenticateConfig.getInstance().getLocalSecret()); -// if (bodyBytes != null) { -// response.setData(new String(bodyBytes, "utf-8")); -//// LogUtils.i("TAG", "瑙e瘑 涓婚锛�"+response.getTopic()+ " body: "+response.getData()); -// } else { -// //瑙e瘑澶辫触锛岃繑鍥炲師鏁版嵁 -// response.setData(new String(body, "utf-8")); -// } -// -// } else { -// response.setData(new String(body, "utf-8")); -// } -// -// if (byteArray.length >= bodyLength + bodyStartIndex) { -// //淇濆瓨浣欑暀 -// byte[] remaining = ByteUtils.getRangeBytes(bytes, bodyStartIndex + bodyLength, byteArray.length); -// bytes.clear(); -// for (byte b : remaining) { -// bytes.add(b); -// } -// } -// //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆� -// EventDispatcher.getInstance().post(response.getTopic(), response); -// return response; -// } -// } else if (bodyLength == 0) { -// //body涓虹┖ -// return response; -// } } return null; -- Gitblit v1.8.0