hxb
2022-03-21 0188dee359636723190f0f67a6b674b7b08f7bef
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -1,6 +1,7 @@
package com.hdl.sdk.connect.protocol;
import android.annotation.TargetApi;
import android.os.Build;
import android.util.Log;
@@ -116,9 +117,9 @@
        }
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected synchronized LinkResponse decoder(Object msg) throws Exception {
    protected synchronized LinkResponse decoder(Object msg,String ipaddress) throws Exception {
        if (msg instanceof byte[]) {
            bytes.addAll(ByteUtils.toByteList((byte[]) msg));
            //如果多条命令打包在一条数据中,都需要处理完
@@ -156,6 +157,7 @@
                    bytes.add(recevieBytes[i]);
                }
                LinkResponse response = new LinkResponse();
                response.setSource_ipAddress(ipaddress);
                response.setTopic(topic);
                if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) {
                    //需要解密
@@ -164,19 +166,27 @@
                        body = bodyBytes;
                    } else {
                        try {
                            LogUtils.e("解密失败,数据内容是:\r\n" + Base64.getEncoder().encodeToString(body));
                            //之前的版本这块是明文的
                            if (!topic.contains("heartbeat_reply")) {
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                                    LogUtils.e("解密失败,数据内容是:\r\n" + Base64.getEncoder().encodeToString(body));
                                else {
                                    LogUtils.e("解密失败,数据内容是:\r\n" + new String(body, "utf-8"));
                                }
                            }
                        } catch (Exception e) {
                        }
                    }
                }
                String bodyString = new String(body, "utf-8");
                response.setData(bodyString);
                LogUtils.i( "接收到数据:" + response.getTopic() + "\r\n" + response.getData());
                //非正常数据,返回
                if (!(bodyString.startsWith("{") || bodyString.startsWith("["))) {
                if (!((bodyString.startsWith("{") &&bodyString.endsWith("}"))
                        || (bodyString.startsWith("[")&&bodyString.endsWith("]")))) {
                    continue;
                }
                response.setData(bodyString);
                LogUtils.i( "LinkMessageDecoder->decoder:" + response.getTopic() + "\r\n" + response.getData());
                //解析完成,topic发送一次
                EventDispatcher.getInstance().post(response.getTopic(), response);
            }