562935844@qq.com
2022-05-13 a3f9e5ce8dce3d86a60a79b85ce44424a612c6fa
提交jar版本
10个文件已添加
15个文件已删除
38个文件已修改
1847 ■■■■ 已修改文件
HDLSDK/.idea/compiler.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/.idea/gradle.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/build.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/libs/gson-2.8.8.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/build.gradle 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/com.hdl.sdk/build.gradle 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/com.hdl.sdk/src/main/AndroidManifest.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/build.gradle 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/libs/gson-2.8.8.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/AndroidManifest.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/TextUtils.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/build.gradle 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/libs/commons-lang3-3.12.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/libs/gson-2.8.8.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/AndroidManifest.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/callback/HDLLinkCallBack.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ProtocolParse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/build.gradle 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/settings.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/.idea/compiler.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/.idea/gradle.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/.idea/misc.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/build.gradle 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.11.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/commons-lang3-3.12.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/gson-2.8.8.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-common.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-connect.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-socket.jar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/App.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/.idea/compiler.xml
File was deleted
HDLSDK/.idea/gradle.xml
File was deleted
HDLSDK/app/build.gradle
@@ -32,6 +32,7 @@
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
    implementation files('libs\\gson-2.8.8.jar')
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
HDLSDK/app/libs/gson-2.8.8.jar
Binary files differ
HDLSDK/app/src/main/AndroidManifest.xml
@@ -12,14 +12,12 @@
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HDLSDK">
        <activity android:name=".device.DevicesListActivity"></activity>
        <activity
            android:name=".MainActivity"
            android:exported="true">
HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java
File was deleted
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -10,7 +10,6 @@
import androidx.recyclerview.widget.RecyclerView;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
@@ -21,46 +20,30 @@
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlsdk.device.DevicesListActivity;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.IpUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkRequest;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.request.BroadcastRequest;
import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
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.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.codec.MessagePipeLine;
import java.util.Base64;
import com.hdl.sdk.socket.SocketBoot;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
import static java.util.Base64.*;
public class MainActivity extends AppCompatActivity {
@@ -71,18 +54,19 @@
    private TextView responseTv;
    boolean isOn;
    private EventListener allTopicsListener;
    private String testLightSid = "0001010D48C71B02020100010101";
    private String testLightSid = "1493092497588469761";
    @Override
    protected void onDestroy() {
        super.onDestroy();
        removeAllTopicsListener();
    }
void init() {
//    HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600");
//    HDLLinkConfig.getInstance().setGatewayId("1473119283609321473");
//    HDLLinkConfig.getInstance().setLocalEncrypt(true);
}
    void init() {
        HDLLinkConfig.getInstance().setLocalSecret("e186beeb7974998e");
        HDLLinkConfig.getInstance().setGatewayId("1519863101509361666");
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
@@ -94,7 +78,7 @@
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
         init();
//        init();
        checkIfCertified();
        initDeviceInfo();//初始化基本信息,非常重要,认证时要用
        registerAllTopicsListener();
@@ -170,7 +154,7 @@
                        break;
                    case 8:
                        //功能列表
                        startDevicesListActivity();
//                        startDevicesListActivity();
                        break;
                    case 9:
                        //UDP发送
@@ -206,6 +190,7 @@
        String mes = isCertified ? "已经认证过" : "未认证";
        showToast(mes);
        tv.setText(mes);
    }
    /**
@@ -265,22 +250,23 @@
        HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
    }
    void initDeviceInfo()
    {
    void initDeviceInfo() {
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
        infoBean.setDeviceMAC("AA000000000000AF");
        infoBean.setIPMAC("AA000000000000AF");
        infoBean.setDeviceMAC("AA00000000000100");
        infoBean.setIPMAC("AA00000000000100");
        infoBean.setDeviceName("音乐播放器");//设备名字
        infoBean.setDeviceModel("MCLog.431");//设备型号
        infoBean.setAccessMode("WIFI");
        infoBean.setIPGateway("192.168.1.1");
        infoBean.setIPAddress("192.168.1.102");
        infoBean.setIPAddress("192.168.1.116");
        infoBean.setGateway_type("music.standard");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
        infoBean.setOID("010105000000FE10");//每个设备oid都要不一样
        infoBean.setSid("110105000000FE08110100000000");//每个设备的sid都要不一样
        infoBean.setOID("010105000000FE11");//每个设备oid都要不一样
        infoBean.setSid("110105000000FE08110100000011");//每个设备的sid都要不一样
        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
    }
    /**
@@ -297,8 +283,8 @@
//        正式服务器
        String spkStr = "screen.mirror";//产品spk
        String macStr = "AA000000000000AC";//设备唯一MAC地址
        String secret = "ee62124c151b737c";//通过spk和mac提交云端认证后分配的secret
        String macStr = "AA00000000000100";//设备唯一MAC地址
        String secret = "e186beeb7974998e";//通过spk和mac提交云端认证后分配的secret
        String mac_key = stringToMD5(stringToMD5(macStr + secret));
        String versionString = "HDL_V1.0.1";//
@@ -320,15 +306,16 @@
        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("认证失败");
                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError: 认证失败");
//                tv.setText("认证失败");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError: 认证失败" + e.getMsg());
            }
            @Override
            public void onSuccess(String msg) {
                tv.setText("认证成功");
                responseTv.setText(msg.toString());
//                tv.setText("认证成功");
//                responseTv.setText(msg.toString());
                Log.i("TAG", "onSuccess: 认证成功" + msg.toString());
            }
        });
    }
@@ -364,15 +351,16 @@
        HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() {
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("网关不在线");
                responseTv.setText(e.getMsg());
//                tv.setText("网关不在线");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "网关不在线" + e.getMsg());
            }
            @Override
            public void onSuccess(GatewaySearchBean gatewaySearchBean) {
                tv.setText("网关在线");
                responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId());
//                                LogUtils.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
//                tv.setText("网关在线");
//                responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId());
                Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
            }
        });
    }
@@ -386,13 +374,15 @@
        HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException error) {
                tv.setText(error.getMsg());
//                tv.setText(error.getMsg());
                Log.i("TAG", "onError 获取功能列表失败" + error.getMsg());
            }
            @Override
            public void onSuccess(String data) {
                tv.setText("获取功能列表成功");
                responseTv.setText(data);
//                tv.setText("获取功能列表成功");
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 获取功能列表成功" + data.toString());
            }
        });
    }
@@ -408,12 +398,14 @@
        HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 功能属性读取成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 获取功能列表失败" + e.getMsg());
            }
        });
    }
@@ -429,20 +421,22 @@
        HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String data) {
                tv.setText("读取成功");
                responseTv.setText(data);
//                tv.setText("读取成功");
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 读取设备状态成功" + data.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("读取失败");
                responseTv.setText(e.getMsg());
//                tv.setText("读取失败");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 读取设备状态失败" + e.getMsg());
            }
        });
    }
    /**
     * 控制失败
     * 控制设备
     * 回复响应code为200 代表执行成功
     */
    void controlDecide() {
@@ -461,12 +455,14 @@
        HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String data) {
                responseTv.setText(data);
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 控制设备成功" + data.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 控制设备失败" + e.getMsg());
            }
        });
    }
@@ -479,12 +475,14 @@
        HDLLink.getInstance().getSceneList(new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 获取场景列表成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 获取场景列表失败" + e.getMsg());
            }
        });
    }
@@ -509,21 +507,23 @@
        HDLLink.getInstance().controlScene(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 场景控制成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 场景控制失败" + e.getMsg());
            }
        });
    }
    void startDevicesListActivity() {
/*    void startDevicesListActivity() {
        Intent intent = new Intent(this, DevicesListActivity.class);
        startActivity(intent);
    }
    }*/
    /**
     * TCP发送 只发一次,不监听回复,不重发
@@ -577,13 +577,14 @@
        HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() {
            @Override
            public void onSuccess(LinkResponse msg) {
                Log.i("udpSendWithCallback", "udpSendWithCallback");
                responseTv.setText(GsonConvert.getGson().toJson(msg));
                Log.i("TAG", "onSuccess UDP发送成功" + GsonConvert.getGson().toJson(msg));
//                responseTv.setText(GsonConvert.getGson().toJson(msg));
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError UDP发送失败" + e.getMsg());
            }
        });
    }
@@ -598,13 +599,14 @@
        HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                Log.i("tcpSendWithCallback", "tcpSendWithCallback");
                responseTv.setText(msg);
                Log.i("TAG", "onSuccess TCP发送成功" + msg);
//                responseTv.setText(msg);
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError TCP发送失败");
            }
        });
    }
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
File was deleted
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
File was deleted
HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java
File was deleted
HDLSDK/build.gradle
@@ -12,14 +12,15 @@
    }
}
allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        google()
        maven { url "https://jitpack.io" }
    }
}
HDLSDK/com.hdl.sdk/build.gradle
@@ -1,8 +1,11 @@
//打包的
apply plugin: 'com.android.library'
apply plugin:'com.kezong.fat-aar'
//apply plugin: 'com.android.library'
//apply plugin:'com.kezong.fat-aar'
plugins {
    id 'java-library'
}
android {
/*android {
    compileSdkVersion rootProject.compileSdkVersion
    defaultConfig {
@@ -21,23 +24,27 @@
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}
    //gradlew assembleRelease
    //gradlew makeJar
}*/
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
//    embed 'com.ezviz.sdk:ezviz-sdk:4.16.1'
//    embed(name: 'hdl-common-release',ext: 'aar')
//    embed(name: 'hdl-connect-release',ext: 'aar')
//    embed(name: 'hdl-socket-release',ext: 'aar')
//    embed project(path: ':hdl-common', configuration:'default')
//    embed project(path: ':hdl-connect', configuration:'default')
//    embed project(path: ':hdl-socket', configuration:'default')
    embed project(path: ':hdl-common', configuration:'default')
    embed project(path: ':hdl-connect', configuration:'default')
    embed project(path: ':hdl-socket', configuration:'default')
    implementation project(path: ':hdl-common')
    implementation project(path: ':hdl-connect')
    implementation project(path: ':hdl-socket')
}
//打包的
/*
buildscript {
    repositories {
@@ -50,105 +57,4 @@
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath 'com.kezong:fat-aar:1.2.16'
    }
}
//allprojects {
//    repositories {
//        flatDir{
//            dirs 'libs'
//        }
//        google()
//        jcenter()
//    }
//}
////运行的
//
//apply plugin: 'com.android.application'
//apply from: "../app-common/build_common.gradle"
//apply plugin: 'kotlin-android'
//apply plugin: 'kotlin-android-extensions'
//
////如果有用到kapt添加如下配置
//kapt {
//    useBuildCache = true
//    javacOptions {
//        option("-Xmaxerrs", 500)
//    }
//}
//
//android {
//
//    compileSdkVersion 29
//    buildToolsVersion "29.0.3"
//
//    sourceSets {
//        main {
//            jniLibs.srcDirs = ['libs']
//        }
//    }
//    lintOptions {
//        abortOnError false
//    }
//    defaultConfig {
//        applicationId "com.evoyo.home1111112"
//        minSdkVersion 21
//        //noinspection ExpiredTargetSdkVersion
//        targetSdkVersion 28
//        versionCode 4160
//        versionName "v4.16.0.20201230"
//        ndk {
//            abiFilters "armeabi-v7a", "arm64-v8a"
//        }
//        /*禁止使用java8,如果sdk使用了java8编译,但是应用层使用了java7编译,会导致应用层打包无法通过*/
//        compileOptions {
//            sourceCompatibility JavaVersion.VERSION_1_7
//            targetCompatibility JavaVersion.VERSION_1_7
//        }
//    }
//    //在Android代码块中添加如下配置:(可优化最上图中transformClassDexBuilderForDebug的时间)
//    dexOptions {
//        preDexLibraries true
//        maxProcessCount 8
//    }
//    buildTypes {
//        debug {
//            minifyEnabled false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//        }
//    }
//    productFlavors {
//    }
//}
//
//
//dependencies {
//    /*萤石SDK核心模块,必须*/
////  api project(path: ':ezviz-sdk')
//    api 'com.ezviz.sdk:ezviz-sdk:4.16.1'
//
//    /*视频通话模块,按需使用*/
////    api project(path: ':videotalk')
//    api 'com.ezviz.sdk:videotalk:1.2.0'
//
//    /*视频通话模块,按需使用*/
////    api project(path: ':streamctrl')
//    api 'com.ezviz.sdk:streamctrl:1.2.0'
//
//    /*萤石核心模块的三方依赖*/
////    implementation 'javax.jmdns:jmdns:3.4.1'
//    implementation 'com.google.code.gson:gson:2.8.0'
//    api 'com.squareup.okhttp3:okhttp:3.12.1'
//
//    /*demo的依赖项*/
//    api project(path: ':app-common')
//    implementation fileTree(include: ['*.jar'], dir: 'libs')
//    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
//}
//
////repositories {
////    maven { url 'https://dl.bintray.com/open-ezviz/mobile-sdk'}
////}
}*/
HDLSDK/com.hdl.sdk/src/main/AndroidManifest.xml
File was deleted
HDLSDK/hdl-common/build.gradle
@@ -1,8 +1,9 @@
plugins {
    id 'com.android.library'
//    id 'com.android.library'
    id 'java-library'
}
android {
/*android {
    compileSdkVersion rootProject.compileSdkVersion
    defaultConfig {
@@ -25,10 +26,13 @@
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}*/
java {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
    api 'com.google.code.gson:gson:2.8.8'
    api 'androidx.annotation:annotation:1.2.0'
    api 'androidx.collection:collection:1.1.0'
//    api 'com.google.code.gson:gson:2.8.8'
    implementation files('libs\\gson-2.8.8.jar')
}
HDLSDK/hdl-common/libs/gson-2.8.8.jar
Binary files differ
HDLSDK/hdl-common/src/main/AndroidManifest.xml
File was deleted
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -1,15 +1,14 @@
package com.hdl.sdk.common;
import android.content.Context;
import com.hdl.sdk.common.utils.LogUtils;
/**
 * Created by Tong on 2021/9/28.
 * Modify by panlili on 5/7/22
 */
public class HDLSdk {
    private Context context;
//    private Context context;
    /**
     * 获取当前版本
@@ -32,14 +31,14 @@
        return SingletonInstance.INSTANCE;
    }
    public void init(Context context) {
/*    public void init(Context context) {
        this.context = context.getApplicationContext();
        LogUtils.i("Version:" + version);
    }
    }*/
    public Context getContext() {
        return context;
    }
//    public Context getContext() {
//        return context;
//    }
    /**
     * 设置打印是否开启
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -1,14 +1,12 @@
package com.hdl.sdk.common.event;
import androidx.annotation.NonNull;
import androidx.collection.ArrayMap;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
@@ -21,9 +19,9 @@
    private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//所有主题消息
    private static final ArrayMap<Object, List<EventListener>> EVENT = new ArrayMap<>();
    private static final Map<Object, List<EventListener>> EVENT = new HashMap<>();
    private static final ArrayMap<EventListener, Integer> TYPE = new ArrayMap<>();
    private static final Map<EventListener, Integer> TYPE = new HashMap<>();
    private static final int MAIN_TYPE = 0;
    private static final int IO_TYPE = 1;
@@ -62,7 +60,7 @@
        }
    }
    public  void registerIo(Object tag, EventListener listener) {
    public void registerIo(Object tag, EventListener listener) {
        synchronized (this) {
            LogUtils.i("注册主题:" + tag);
            if (tag == null) return;
@@ -82,7 +80,7 @@
        }
    }
    public  void remove(Object tag) {
    public void remove(Object tag) {
        synchronized (this) {
            if (tag == null) {
                return;
@@ -105,7 +103,7 @@
        }
    }
    public  void remove(Object tag, EventListener listener) {
    public void remove(Object tag, EventListener listener) {
        synchronized (this) {
            try {
                if (tag == null || listener == null) {
@@ -125,7 +123,7 @@
        }
    }
    public synchronized void post(Object tag, @NonNull Object o) {
    public synchronized void post(Object tag, Object o) {
        if (tag == null) {
            LogUtils.i("post tag为空");
            return;
@@ -139,7 +137,8 @@
                        if (listener == null) {
                            continue;
                        }
                        ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
                       ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                try {
@@ -173,17 +172,18 @@
                    });
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            LogUtils.e("post异常2:" + e.getMessage());
        }
    }
    /**
     * 注册所有主题消息的监听
     *
     * @param listener
     */
    public synchronized void registerAllTopicsListener(EventListener listener) {
        if(listener==null){
        if (listener == null) {
            return;
        }
        try {
@@ -191,13 +191,14 @@
                ALL_TOPICS_EVENT.add(listener);
            }
            TYPE.put(listener, MAIN_TYPE);
        }catch (Exception e){
        } catch (Exception e) {
            LogUtils.e("registerAllTopicsListener:" + e.getMessage());
        }
    }
    /**
     * 取消所有主题消息的监听
     *
     * @param listener
     */
    public synchronized void removeAllTopicsListener(EventListener listener) {
@@ -206,7 +207,7 @@
                @Override
                public void run() {
                    try {
                        if(listener==null){
                        if (listener == null) {
                            return;
                        }
                        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java
@@ -1,7 +1,5 @@
package com.hdl.sdk.common.exception;
import androidx.annotation.NonNull;
/**
 * Created by Tong on 2021/11/11.
 */
@@ -39,8 +37,7 @@
        this.code = code;
    }
    public @NonNull
    String getMsg() {
    public String getMsg() {
        return msg;
    }
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
@@ -1,8 +1,8 @@
package com.hdl.sdk.common.utils;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
//import android.content.Context;
//import android.net.wifi.WifiInfo;
//import android.net.wifi.WifiManager;
import java.net.InetAddress;
import java.net.InterfaceAddress;
@@ -19,21 +19,6 @@
     * @return 广播地址
     */
    public static String getBroadcastAddress() {
//        try {
//            for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
//                 niEnum.hasMoreElements(); ) {
//                NetworkInterface ni = niEnum.nextElement();
//                if (!ni.isLoopback()) {
//                    for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
//                        if (interfaceAddress.getBroadcast() != null) {
//                            return interfaceAddress.getBroadcast().toString().substring(1);
//                        }
//                    }
//                }
//            }
//        } catch (SocketException e) {
//            e.printStackTrace();
//        }
        return "255.255.255.255";
    }
@@ -54,7 +39,7 @@
        return false;
    }
    public static String getIP(Context application) {
    /*public static String getIP(Context application) {
        WifiManager wifiManager = (WifiManager) application.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (!wifiManager.isWifiEnabled()) {
            try {
@@ -77,7 +62,7 @@
        }
        return null;
    }
*/
    private static String intToIp(int i) {
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java
@@ -1,7 +1,5 @@
package com.hdl.sdk.common.utils;
import android.util.Log;
/**
 * Created by Tong on 2021/9/23.
 */
@@ -21,43 +19,43 @@
    public static void d(String tag, String msg) {
        if (tag != null && msg != null && isEnabled) {
            Log.d(TAG, tag + "-- " + msg);
            System.out.println(tag + "-- " + msg);
        }
    }
    public static void e(String tag, String msg) {
        if (tag != null && msg != null && isEnabled) {
            Log.e(TAG, tag + "-- " + msg);
            System.out.println(tag + "-- " + msg);
        }
    }
    public static void w(String tag, String msg) {
        if (tag != null && msg != null && isEnabled) {
            Log.w(TAG, tag + "-- " + msg);
            System.out.println(tag + "-- " + msg);
        }
    }
    public static void v(String tag, String msg) {
        if (tag != null && msg != null && isEnabled) {
            Log.v(TAG, tag + "-- " + msg);
            System.out.println(tag + "-- " + msg);
        }
    }
    public static void i(String tag, String msg) {
        if (tag != null && msg != null && isEnabled) {
            Log.i(TAG, tag + "-- " + msg);
            System.out.println(tag + "-- " + msg);
        }
    }
    public static void i(String msg) {
        if (msg != null && isEnabled) {
            Log.i(TAG, msg);
            System.out.println(msg);
        }
    }
    public static void e(String msg) {
        if (msg != null && isEnabled) {
            Log.e(TAG,  msg);
            System.out.println(msg);
        }
    }
}
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java
File was deleted
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/TextUtils.java
New file
@@ -0,0 +1,9 @@
package com.hdl.sdk.common.utils;
public class TextUtils {
    public static boolean isEmpty(CharSequence str) {
        return str == null || str.length() == 0;
    }
}
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java
@@ -1,8 +1,5 @@
package com.hdl.sdk.common.utils;
import android.os.Handler;
import android.os.Looper;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -12,16 +9,13 @@
 */
public class ThreadToolUtils {
    private final Handler uiHandler = new Handler(Looper.getMainLooper());
//    private final Handler uiHandler = new Handler(Looper.getMainLooper());
    //cpu 最大线程容纳量
    private final int coreSize = Runtime.getRuntime().availableProcessors() + 1;
    private ThreadToolUtils() {
    }
//    private static class SingletonInstance {
//    }
    private static final ThreadToolUtils instance = new ThreadToolUtils();
@@ -65,9 +59,10 @@
    /**
     * 切换回主线程
     */
    public void runOnUiThread(Runnable run) {
        uiHandler.post(run);
    }
   public void runOnUiThread(Runnable run) {
//       uiHandler.post(run);
       Thread thread = new Thread(run);
       thread.start();
   }
}
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java
@@ -1,8 +1,5 @@
package com.hdl.sdk.common.utils.gson;
import androidx.annotation.NonNull;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -25,14 +22,12 @@
        return new ParameterizedTypeImpl(rawType, actualTypeArguments, null);
    }
    @NonNull
    @Override
    public Type[] getActualTypeArguments() {
        return actualTypeArguments;
    }
    @NonNull
    @Override
    public Type getRawType() {
        return rawType;
HDLSDK/hdl-connect/build.gradle
@@ -1,8 +1,9 @@
plugins {
    id 'com.android.library'
//    id 'com.android.library'
    id 'java-library'
}
android {
/*android {
    compileSdkVersion rootProject.compileSdkVersion
    defaultConfig {
@@ -25,10 +26,14 @@
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}*/
java {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
    api project(path: ':hdl-socket')
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation files('libs\\commons-lang3-3.12.0.jar')
    implementation files('libs\\gson-2.8.8.jar')
}
HDLSDK/hdl-connect/libs/commons-lang3-3.12.0.jar
Binary files differ
HDLSDK/hdl-connect/libs/gson-2.8.8.jar
Binary files differ
HDLSDK/hdl-connect/src/main/AndroidManifest.xml
File was deleted
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -1,7 +1,6 @@
package com.hdl.sdk.connect;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -13,7 +12,6 @@
import com.hdl.sdk.connect.socket.HDLSocket;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * Created by jlchen on 11/15/21.
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java
@@ -1,10 +1,7 @@
package com.hdl.sdk.connect.bean;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.common.utils.ByteUtils;
import com.hdl.sdk.connect.utils.AesUtil;
@@ -56,7 +53,6 @@
        this.length = length;
    }
    @NonNull
    @Override
    public String toString() {
        return "Topic:" +
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java
@@ -1,9 +1,6 @@
package com.hdl.sdk.connect.bean;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import java.io.Serializable;
@@ -57,7 +54,6 @@
        this.length = length;
    }
    @NonNull
    @Override
    public String toString() {
        return GsonConvert.getGson().toJson(this);
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/callback/HDLLinkCallBack.java
@@ -1,8 +1,5 @@
package com.hdl.sdk.connect.callback;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.connect.bean.LinkResponse;
/**
 * Created by jlchen on 11/16/21.
 *
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -1,24 +1,21 @@
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.common.utils.TextUtils;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
/**
 * Created by jlchen on 11/11/21.
 * Modify by panlili on 5/7/22
 *
 * @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 static String AUTHENTICATE_LS_KEY = "";
    private static String AUTHENTICATE_GATEWAYID_KEY = "";
    private static String AUTHENTICATE_IPADDRESS_KEY = "";
    private String localSecret;//本地加密密钥
    private String gatewayId;
@@ -30,9 +27,9 @@
    /**
     * instance
     */
    private  static final HDLLinkConfig instance=new HDLLinkConfig();
    private HDLLinkConfig()
    {
    private static final HDLLinkConfig instance = new HDLLinkConfig();
    private HDLLinkConfig() {
        loadConfig();
    }
@@ -41,15 +38,7 @@
     *
     * @return AuthenticateConfig
     */
    public static  HDLLinkConfig getInstance() {
//        if (instance == null) {
//            synchronized (HDLLinkConfig.class) {
//                if (instance == null) {
//                    instance = new HDLLinkConfig();
//                    instance.loadConfig();
//                }
//            }
//        }
    public static HDLLinkConfig getInstance() {
        return instance;
    }
@@ -60,19 +49,15 @@
        this.gatewayId = "";
        this.ipAddress = "";
        this.localSecret = "";
        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, "");
        localSecret = AUTHENTICATE_LS_KEY;
        gatewayId = AUTHENTICATE_GATEWAYID_KEY;
        ipAddress = AUTHENTICATE_IPADDRESS_KEY;
    }
    /**
@@ -86,9 +71,9 @@
        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);
        AUTHENTICATE_LS_KEY = localSecret;
        AUTHENTICATE_GATEWAYID_KEY = gatewayId;
        AUTHENTICATE_IPADDRESS_KEY = ipAddress;
    }
    /**
@@ -112,7 +97,7 @@
    public void setLocalSecret(String localSecret) {
        this.localSecret = localSecret;
        SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
        AUTHENTICATE_LS_KEY = localSecret;
    }
    public String getLocalSecret() {
@@ -122,14 +107,16 @@
    public String getGatewayId() {
        return gatewayId;
    }
    public void setGatewayId(String gatewayId) {
        this.gatewayId=gatewayId;
        this.gatewayId = gatewayId;
    }
    public String getIpAddress() {
        return ipAddress;
    }
    public void setIpAddress(String ipAddress){
    public void setIpAddress(String ipAddress) {
        this.ipAddress = ipAddress;
    }
@@ -143,7 +130,7 @@
            if (!this.ipAddress.equals(this.currentGateway.getIp_address())) {
                //如果IP地址有变化则更新
                this.ipAddress = this.currentGateway.getIp_address();
                SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress);
                AUTHENTICATE_IPADDRESS_KEY = ipAddress;
            }
        }
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -1,20 +1,11 @@
package com.hdl.sdk.connect.protocol;
import android.annotation.TargetApi;
import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
import com.google.gson.internal.bind.DateTypeAdapter;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.common.event.EventDispatcher;
import com.hdl.sdk.common.utils.ByteUtils;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.utils.AesUtil;
import com.hdl.sdk.connect.utils.ProtocolParse;
import com.hdl.sdk.socket.codec.ByteToMessageDecoder;
import java.util.ArrayList;
@@ -168,11 +159,12 @@
                        try {
                            //之前的版本这块是明文的
                            if (!topic.contains("heartbeat_reply")) {
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                                /*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"));
                                }
                                }*/
                                LogUtils.e("解密失败,数据内容是:\r\n" + new String(body, "utf-8"));
                            }
                        } catch (Exception e) {
                        }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -1,7 +1,5 @@
package com.hdl.sdk.connect.socket;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
@@ -10,8 +8,8 @@
import com.hdl.sdk.common.exception.HDLLinkCode;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse;
import com.hdl.sdk.connect.callback.BaseCallBack;
@@ -35,7 +33,6 @@
import com.hdl.sdk.socket.udp.UdpSocketBoot;
import com.hdl.sdk.socket.udp.UdpSocketOptions;
import java.net.InetSocketAddress;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -183,6 +180,9 @@
        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
            @Override
            public void onSucceed(Object msg) {
                LogUtils.i("onSucceed msg:" + msg);
                if (callBack == null) return;
                try {
                    AuthenticateResponse bean = getAuthenticateResponseBean(msg);
@@ -629,6 +629,8 @@
                }
            }
        });
        LogUtils.i("callBackSearchGatewayTimeout onError:搜索网关失败,超时");
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -1,8 +1,5 @@
package com.hdl.sdk.connect.socket;
import android.text.TextUtils;
import android.util.Log;
import com.google.gson.JsonObject;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.EventDispatcher;
@@ -11,6 +8,7 @@
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.bean.request.BroadcastRequest;
@@ -32,6 +30,8 @@
import com.hdl.sdk.socket.codec.MessagePipeLine;
import com.hdl.sdk.socket.listener.ConnectStatusListener;
import com.hdl.sdk.socket.listener.SendListener;
import org.apache.commons.lang3.StringEscapeUtils;
import java.util.ArrayList;
import java.util.List;
@@ -110,7 +110,7 @@
        }).start();
    }
//    private static class SingletonInstance {
    //    private static class SingletonInstance {
//    }
    private static final HDLSocket instance = new HDLSocket();
@@ -119,8 +119,9 @@
    }
    SocketOptions options;
    private SocketOptions getTcpOptions() {
        if(null!=options){
        if (null != options) {
            return options;
        }
        options = new SocketOptions();
@@ -243,6 +244,7 @@
            final BaseLocalResponse<List<FunctionAttributeRequest>> data = new BaseLocalResponse<>();
            data.setId(IdUtils.getUUId());
            data.setTime_stamp(time);
            List<FunctionAttributeRequest> list = new ArrayList<>();
            for (String s : sids) {
@@ -423,13 +425,13 @@
            throw new RuntimeException("请搜索网关");
        }
        //如果没有初始化,或者网关IP更改了,就重新初始化
        if (tcpBoot == null||!getTcpOptions().getIp().equals(getTcpIp())) {
        if (tcpBoot == null || !getTcpOptions().getIp().equals(getTcpIp())) {
            tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions());
            tcpBoot.SetHeartbeat(new IHeartbeat() {
                @Override
                public void heartbeat() {
                    if(HDLLinkConfig.getInstance().getDeviceInfoBean()==null||HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()==null) {
                    if (HDLLinkConfig.getInstance().getDeviceInfoBean() == null || HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) {
                        LogUtils.i("DeviceInfoBean为空,需要设置才能正常心跳");
                        return;
                    }
@@ -493,8 +495,9 @@
    }
    /**
     *  场景控制
     * @param sids 场景sid列表
     * 场景控制
     *
     * @param sids     场景sid列表
     * @param callBack 回调
     */
    public void controlScene(List<String> sids, HDLLinkCallBack callBack) {
@@ -584,8 +587,8 @@
    /**
     * 通用TCP发送指令 只发一次,不监听回复,不重发
     *
     * @param topic    发送数据
     * @param bodyStr  回复的主题
     * @param topic   发送数据
     * @param bodyStr 回复的主题
     */
    public void tcpSendMsg(String topic, String bodyStr) {
        try {
@@ -596,7 +599,7 @@
            LinkRequest message = new LinkRequest(topic, bodyStr);
            getTcp().sendMsg(message.getSendBytes());
        } catch (Exception e) {
            LogUtils.e("tcpSendMsg", "发送失败 :"+e.getMessage());
            LogUtils.e("tcpSendMsg", "发送失败 :" + e.getMessage());
        }
    }
@@ -607,7 +610,7 @@
    public void sendMsg(byte[] data, String eventTag, HDLLinkCallBack callBack, SendListener sendListener) {
        try {
            if(eventTag!=null) {
            if (eventTag != null) {
                final AtomicInteger sendCount = new AtomicInteger(0);
                final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1);
@@ -615,12 +618,14 @@
                    @Override
                    public void onMessage(Object msg) {
                        if (msg instanceof LinkResponse) {
                            LogUtils.i("sendMsg onSuccess");
                            LogUtils.i("sendMsg onSuccess" + StringEscapeUtils.unescapeJava(msg.toString()));
//                            LogUtils.i("sendMsg onSuccess" + msg);
                            threadPool.shutdownNow();
                            LogUtils.i("sendMsg eventListener remove");
                            EventDispatcher.getInstance().remove(eventTag, this);
                            if (callBack != null) {
                                callBack.onSuccess(msg.toString());
                                callBack.onSuccess(StringEscapeUtils.unescapeJava(msg.toString()));
//                                callBack.onSuccess(msg.toString());
                            }
                        }
                    }
@@ -644,6 +649,8 @@
                                    }
                                }
                            });
                            LogUtils.i("HDLSocket sendMsg onError 发送失败");
                        }
                    }
                }, 1000, 500, TimeUnit.MILLISECONDS);
@@ -675,6 +682,8 @@
                    }
                }
            });
            LogUtils.i("HDLSocket sendMsg onError 发送失败");
        }
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
@@ -1,16 +1,14 @@
package com.hdl.sdk.connect.socket;
import android.text.TextUtils;
import com.hdl.sdk.common.event.EventDispatcher;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.bean.LinkRequest;
import com.hdl.sdk.socket.SocketBoot;
import com.hdl.sdk.socket.udp.UdpSocketBoot;
import java.net.InetSocketAddress;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ProtocolParse.java
@@ -1,6 +1,6 @@
package com.hdl.sdk.connect.utils;
import android.text.TextUtils;
import com.hdl.sdk.common.utils.TextUtils;
/**
 * Created by Tong on 2021/9/22.
HDLSDK/hdl-socket/build.gradle
@@ -1,8 +1,9 @@
plugins {
    id 'com.android.library'
//    id 'com.android.library'
    id 'java-library'
}
android {
/*android {
    compileSdkVersion rootProject.compileSdkVersion
    defaultConfig {
@@ -26,6 +27,10 @@
        targetCompatibility JavaVersion.VERSION_1_8
    }
}*/
java {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java
@@ -1,29 +1,18 @@
package com.hdl.sdk.socket;
import android.text.TextUtils;
import android.util.Log;
import androidx.collection.ArrayMap;
import com.google.gson.JsonObject;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.socket.annotation.ConnectStatus;
import com.hdl.sdk.socket.client.IClient;
import com.hdl.sdk.socket.client.IHeartbeat;
import com.hdl.sdk.socket.listener.SendListener;
import java.net.ConnectException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * Created by Tong on 2021/9/26.
@@ -57,7 +46,7 @@
    private final BlockingQueue<SocketRequest> mMessageQueue = new LinkedBlockingDeque<>();
    private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>();
    private final Map<String, SendListener> sendMap = new HashMap<>();
    public SocketBoot(IClient client) {
        this.client = client;
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java
@@ -1,31 +1,22 @@
package com.hdl.sdk.socket.annotation;
import androidx.annotation.IntDef;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
/**
 * Created by Tong on 2021/9/22.
 */
@Target({ElementType.TYPE_PARAMETER, ElementType.PARAMETER})
@IntDef({ConnectStatus.CONNECTING,
        ConnectStatus.CONNECTED,
        ConnectStatus.DISCONNECT})
public @interface ConnectStatus {
public class ConnectStatus {
    /**
     * 连接中
     */
    int CONNECTING = 0;
    public static int CONNECTING = 0;
    /**
     * 连接成功
     */
    int CONNECTED = 1;
    public static int CONNECTED = 1;
    /**
     * 连接关闭
     */
    int DISCONNECT = 2;
    public static int DISCONNECT = 2;
}
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
@@ -1,8 +1,5 @@
package com.hdl.sdk.socket.client;
import com.hdl.sdk.common.utils.ByteUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.socket.SocketBoot;
@@ -39,21 +36,21 @@
    /**
     * 从连接池中找出当前IP及端口的连接客户端
     *
     * @param ipAdderss 连接IP地址
     * @param port 连接端口
     * @param port      连接端口
     * @return
     */
    public static TcpClient getTcpClientByIP(String ipAdderss,int port) {
        for(TcpClient tcpClient:tcpClientList){
            if(tcpClient.ip.equals(ipAdderss)&&tcpClient.port==port)
            {
    public static TcpClient getTcpClientByIP(String ipAdderss, int port) {
        for (TcpClient tcpClient : tcpClientList) {
            if (tcpClient.ip.equals(ipAdderss) && tcpClient.port == port) {
                return tcpClient;
            }
        }
        return  null;
        return null;
    }
    private byte[] readBuffer = new byte[4*1024];
    private byte[] readBuffer = new byte[4 * 1024];
    private TcpClient(String ip, int port, SocketOptions socketOptions) {
        this.socketOptions = socketOptions;
@@ -83,8 +80,6 @@
    }
    @Override
    public void disconnect() {
        if (mSocket != null) {
@@ -108,18 +103,18 @@
    public void onHandleResponse() throws Exception {
        final InputStream stream = getInputStream();
        if (stream != null && getOptions() != null) {
            while ( true) {
                int len=getInputStream().read(readBuffer);
                if(len<=0){
                    throw  new Exception("接收异常,接收数据长度len="+len);
            while (true) {
                int len = getInputStream().read(readBuffer);
                if (len <= 0) {
                    throw new Exception("接收异常,接收数据长度len=" + len);
                }
                IHandleMessage handleMessage = getOptions().getHandleMessage();
                if (handleMessage != null) {
                    byte []bytes = new byte[len];
                    System.arraycopy(readBuffer,0,bytes,0,len);
                    byte[] bytes = new byte[len];
                    System.arraycopy(readBuffer, 0, bytes, 0, len);
                    //完整的数据才回调
                    handleMessage.read(bytes,ip);
                    handleMessage.read(bytes, ip);
                }
            }
        }
@@ -129,10 +124,10 @@
    public void sendMsg(byte[] msg) throws Exception {
        final OutputStream outputStream = getOutStream();
        if (outputStream != null && getOptions() != null) {
                IHandleMessage handleMessage = getOptions().getHandleMessage();
                handleMessage.write(handleMessage.write(msg));
                outputStream.write(msg);
                outputStream.flush();
            IHandleMessage handleMessage = getOptions().getHandleMessage();
            handleMessage.write(handleMessage.write(msg));
            outputStream.write(msg);
            outputStream.flush();
        }
    }
@@ -141,6 +136,7 @@
     * 处理连接状态
     */
    public void onConnectStatus(int status) {
        ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
            @Override
            public void run() {
@@ -148,16 +144,13 @@
                if (list != null && !list.isEmpty()) {
                    for (ConnectStatusListener listener : list) {
                        switch (status) {
                            case ConnectStatus
                                    .CONNECTING:
                            case 0:
                                listener.onConnecting();
                                break;
                            case ConnectStatus
                                    .CONNECTED:
                            case 1:
                                listener.onConnected();
                                break;
                            case ConnectStatus
                                    .DISCONNECT:
                            case 2:
                                listener.onConnectFailed();
                                break;
                        }
@@ -165,6 +158,9 @@
                }
            }
        });
        LogUtils.i("TcpClient onConnectStatus status:" + status);
    }
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -1,10 +1,8 @@
package com.hdl.sdk.socket.client;
import android.text.TextUtils;
import com.hdl.sdk.common.utils.IpUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.socket.SocketBoot;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.SocketPool;
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
@@ -1,26 +1,15 @@
package com.hdl.sdk.socket.udp;
import android.text.TextUtils;
import androidx.collection.ArrayMap;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.TextUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.socket.SocketRequest;
import com.hdl.sdk.socket.annotation.ConnectStatus;
import com.hdl.sdk.socket.client.IClient;
import com.hdl.sdk.socket.client.IUdpClient;
import com.hdl.sdk.socket.listener.SendListener;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.concurrent.BlockingQueue;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -37,7 +26,7 @@
    private ExecutorService receiveThread;
    private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>();
    private final Map<String, SendListener> sendMap = new HashMap<>();
    public UdpSocketBoot(IUdpClient client) {
        this.client = client;
HDLSDK/settings.gradle
@@ -4,3 +4,4 @@
include ':hdl-connect'
include ':hdl-common'
include ':com.hdl.sdk'
include ':hdl-test'
HDLSDK_DEMO/.idea/compiler.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <bytecodeTargetLevel target="1.8" />
    <bytecodeTargetLevel target="11" />
  </component>
</project>
HDLSDK_DEMO/.idea/gradle.xml
@@ -4,7 +4,7 @@
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="testRunner" value="PLATFORM" />
        <option name="testRunner" value="GRADLE" />
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="modules">
@@ -17,7 +17,6 @@
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
        <option name="useQualifiedModuleNames" value="true" />
      </GradleProjectSettings>
    </option>
  </component>
HDLSDK_DEMO/.idea/misc.xml
@@ -3,12 +3,16 @@
  <component name="DesignSurface">
    <option name="filePathToZoomLevelMap">
      <map>
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_devices_list.xml" value="0.3494791666666667" />
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml" value="0.3536458333333333" />
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/demo_item.xml" value="0.3494791666666667" />
        <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/item_devices_list.xml" value="0.3494791666666667" />
        <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/activity_main.xml" value="0.1" />
        <entry key="..\:/job/me/Android/HDLSDK/app/src/main/res/layout/demo_item.xml" value="0.28958333333333336" />
      </map>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
HDLSDK_DEMO/app/build.gradle
@@ -32,12 +32,17 @@
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
    implementation files('libs\\hdl-common.jar')
    implementation files('libs\\hdl-connect.jar')
    implementation files('libs\\hdl-socket.jar')
    implementation files('libs\\commons-lang3-3.12.0.jar')
    implementation files('libs\\gson-2.8.8.jar')
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6'
    implementation 'com.google.code.gson:gson:2.8.8'
//    implementation 'com.google.code.gson:gson:2.8.8'
//    implementation project(path: ':hdl-connect')
}
HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.0.11.aar
Binary files differ
HDLSDK_DEMO/app/libs/commons-lang3-3.12.0.jar
Binary files differ
HDLSDK_DEMO/app/libs/gson-2.8.8.jar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-common.jar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-connect.jar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-socket.jar
Binary files differ
HDLSDK_DEMO/app/src/main/AndroidManifest.xml
@@ -12,14 +12,12 @@
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.HDLSDK">
        <activity android:name=".device.DevicesListActivity"></activity>
        <activity
            android:name=".MainActivity"
            android:exported="true">
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/App.java
File was deleted
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java
@@ -4,7 +4,6 @@
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import java.util.List;
@@ -16,7 +15,7 @@
    public DemoAdapter(@Nullable List<DemoBean> data) {
        super(data);
        addItemType(0, R.layout.demo_item);
        addItemType(0,R.layout.demo_item);
    }
    @Override
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -4,12 +4,13 @@
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -19,32 +20,22 @@
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.hdl.hdlsdk.device.DevicesListActivity;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.IpUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkRequest;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
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.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.codec.MessagePipeLine;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
@@ -52,8 +43,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
public class MainActivity extends AppCompatActivity {
@@ -64,7 +53,7 @@
    private TextView responseTv;
    boolean isOn;
    private EventListener allTopicsListener;
    private String testLightSid = "0001010D48C71B02020100010101";
    private String testLightSid = "1493092497588469761";
    @Override
    protected void onDestroy() {
@@ -72,86 +61,26 @@
        removeAllTopicsListener();
    }
    void initDeviceInfo()
    {
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
        infoBean.setDeviceMAC("AA000000000000AF");
        infoBean.setIPMAC("AA000000000000AF");
        infoBean.setDeviceName("音乐播放器");//设备名字
        infoBean.setDeviceModel("MCLog.431");//设备型号
        infoBean.setAccessMode("WIFI");
        infoBean.setIPGateway("192.168.88.1");
        infoBean.setIPAddress("192.168.88.153");
        infoBean.setGateway_type("music.standard");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
        infoBean.setOID("010105000000FE10");//每个设备oid都要不一样
        infoBean.setSid("110105000000FE08110100000000");//每个设备的sid都要不一样
        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
    void init() {
        HDLLinkConfig.getInstance().setLocalSecret("e186beeb7974998e");
        HDLLinkConfig.getInstance().setGatewayId("1519863101509361666");
//    HDLLinkConfig.getInstance().setLocalEncrypt(true);
    }
    /**
     * 入网认证
     */
    void sendAuthenticateRequest() {
        tv.setText("开始入网认证...");
        //认证提交参数准备
//
//        //测试服务
//        String spkStr = "ir.module";//产品spk
//        String macStr = "AA000000000000AF";//设备唯一MAC地址
//        String secret = "44b360eb74b7ba64";//通过spk和mac提交云端认证后分配的secret
//        正式服务器
        String spkStr = "screen.mirror";//产品spk
        String macStr = "AA000000000000AC";//设备唯一MAC地址
        String secret = "ee62124c151b737c";//通过spk和mac提交云端认证后分配的secret
        String mac_key = stringToMD5(stringToMD5(macStr + secret));
        String versionString = "HDL_V1.0.1";//
        String time = String.valueOf(System.currentTimeMillis());
        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
        //1.设置认证信息
        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
        requestBean.setMAC(macStr);
        requestBean.setSupplier("WISE");
        requestBean.setFirmwareVersion(versionString);
        requestBean.setHardwareModel("1956F");
        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
        authbean.setSpk(spkStr);
        authbean.setMACKey(mac_key);
        authbean.setRequest(requestBean);
        //HDLLinkConfig.getInstance().getDeviceInfoBean()这个初始化的时候要先设置好
        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("认证失败");
                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError: 认证失败");
            }
            @Override
            public void onSuccess(String msg) {
                tv.setText("认证成功");
                responseTv.setText(msg.toString());
            }
        });
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        responseTv = findViewById(R.id.response_tv);
        tv = findViewById(R.id.state_tv);
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
//        init();
        checkIfCertified();
        initDeviceInfo();//初始化
        initDeviceInfo();//初始化基本信息,非常重要,认证时要用
        registerAllTopicsListener();
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@@ -225,7 +154,7 @@
                        break;
                    case 8:
                        //功能列表
                        startDevicesListActivity();
//                        startDevicesListActivity();
                        break;
                    case 9:
                        //UDP发送
@@ -271,6 +200,7 @@
            @Override
            public void onMessage(Object msg) {
                LinkResponse response = (LinkResponse) msg;
                handleLinkResponse(response);
            }
        };
        HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
@@ -319,7 +249,82 @@
        HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
    }
    void initDeviceInfo() {
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
//        infoBean.setDeviceMAC("AA00000000000100");
//        infoBean.setIPMAC("AA00000000000100");
        infoBean.setDeviceMAC("BB000000000000BF");
        infoBean.setIPMAC("BB000000000000BF");
        infoBean.setDeviceName("音乐播放器");//设备名字
        infoBean.setDeviceModel("MCLog.431");//设备型号
        infoBean.setAccessMode("WIFI");
//        infoBean.setIPGateway("192.168.1.1");
//        infoBean.setIPAddress("192.168.1.116");
        infoBean.setIPGateway("192.168.3.1");
        infoBean.setIPAddress("192.168.3.126");
        infoBean.setGateway_type("music.standard");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
//        infoBean.setOID("010105000000FE11");//每个设备oid都要不一样
//        infoBean.setSid("110105000000FE08110100000011");//每个设备的sid都要不一样
        infoBean.setOID("010105010101FE07");//每个设备oid都要不一样
        infoBean.setSid("010105010101FE02020100040101");//每个设备的sid都要不一样
        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
    }
    /**
     * 入网认证
     */
    void sendAuthenticateRequest() {
        tv.setText("开始入网认证...");
        //认证提交参数准备
//        测试服务
        String spkStr = "ir.module";//产品spk
        String macStr = "BB000000000000BF";//设备唯一MAC地址
        String secret = "d70f8872ddd6fe6a";//通过spk和mac提交云端认证后分配的secret
//        正式服务器
//        String spkStr = "screen.mirror";//产品spk
//        String macStr = "AA00000000000100";//设备唯一MAC地址
//        String secret = "e186beeb7974998e";//通过spk和mac提交云端认证后分配的secret
        String mac_key = stringToMD5(stringToMD5(macStr + secret));
        String versionString = "HDL_V1.0.1";//
        String time = String.valueOf(System.currentTimeMillis());
        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
        //1.设置认证信息
        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
        requestBean.setMAC(macStr);
        requestBean.setSupplier("WISE");
        requestBean.setFirmwareVersion(versionString);
        requestBean.setHardwareModel("1956F");
        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
        authbean.setSpk(spkStr);
        authbean.setMACKey(mac_key);
        authbean.setRequest(requestBean);
        //HDLLinkConfig.getInstance().getDeviceInfoBean()这个初始化的时候要先设置好
        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException e) {
//                tv.setText("认证失败");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError: 认证失败" + e.getMsg());
            }
            @Override
            public void onSuccess(String msg) {
//                tv.setText("认证成功");
//                responseTv.setText(msg.toString());
                Log.i("TAG", "onSuccess: 认证成功" + msg.toString());
            }
        });
    }
    String stringToMD5(String text) {
        byte[] hash;
@@ -352,15 +357,16 @@
        HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() {
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("网关不在线");
                responseTv.setText(e.getMsg());
//                tv.setText("网关不在线");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "网关不在线" + e.getMsg());
            }
            @Override
            public void onSuccess(GatewaySearchBean gatewaySearchBean) {
                tv.setText("网关在线");
                responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId());
//                                LogUtils.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
//                tv.setText("网关在线");
//                responseTv.setText("搜索成功 网关id:" + gatewaySearchBean.getGatewayId());
                Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
            }
        });
    }
@@ -374,13 +380,15 @@
        HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException error) {
                tv.setText(error.getMsg());
//                tv.setText(error.getMsg());
                Log.i("TAG", "onError 获取功能列表失败" + error.getMsg());
            }
            @Override
            public void onSuccess(String data) {
                tv.setText("获取功能列表成功");
                responseTv.setText(data);
//                tv.setText("获取功能列表成功");
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 获取功能列表成功" + data.toString());
            }
        });
    }
@@ -396,12 +404,14 @@
        HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 功能属性读取成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 获取功能列表失败" + e.getMsg());
            }
        });
    }
@@ -417,20 +427,22 @@
        HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String data) {
                tv.setText("读取成功");
                responseTv.setText(data);
//                tv.setText("读取成功");
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 读取设备状态成功" + data.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                tv.setText("读取失败");
                responseTv.setText(e.getMsg());
//                tv.setText("读取失败");
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 读取设备状态失败" + e.getMsg());
            }
        });
    }
    /**
     * 控制失败
     * 控制设备
     * 回复响应code为200 代表执行成功
     */
    void controlDecide() {
@@ -449,12 +461,14 @@
        HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String data) {
                responseTv.setText(data);
//                responseTv.setText(data);
                Log.i("TAG", "onSuccess 控制设备成功" + data.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 控制设备失败" + e.getMsg());
            }
        });
    }
@@ -467,12 +481,14 @@
        HDLLink.getInstance().getSceneList(new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 获取场景列表成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 获取场景列表失败" + e.getMsg());
            }
        });
    }
@@ -497,21 +513,23 @@
        HDLLink.getInstance().controlScene(sids, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                responseTv.setText(msg);
//                responseTv.setText(msg);
                Log.i("TAG", "onSuccess 场景控制成功" + msg.toString());
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError 场景控制失败" + e.getMsg());
            }
        });
    }
    void startDevicesListActivity() {
/*    void startDevicesListActivity() {
        Intent intent = new Intent(this, DevicesListActivity.class);
        startActivity(intent);
    }
    }*/
    /**
     * TCP发送 只发一次,不监听回复,不重发
@@ -565,13 +583,14 @@
        HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() {
            @Override
            public void onSuccess(LinkResponse msg) {
                Log.i("udpSendWithCallback", "udpSendWithCallback");
                responseTv.setText(GsonConvert.getGson().toJson(msg));
                Log.i("TAG", "onSuccess UDP发送成功" + GsonConvert.getGson().toJson(msg));
//                responseTv.setText(GsonConvert.getGson().toJson(msg));
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError UDP发送失败" + e.getMsg());
            }
        });
    }
@@ -586,13 +605,14 @@
        HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                Log.i("tcpSendWithCallback", "tcpSendWithCallback");
                responseTv.setText(msg);
                Log.i("TAG", "onSuccess TCP发送成功" + msg);
//                responseTv.setText(msg);
            }
            @Override
            public void onError(HDLLinkException e) {
                responseTv.setText(e.getMsg());
//                responseTv.setText(e.getMsg());
                Log.i("TAG", "onError TCP发送失败");
            }
        });
    }
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java
File was deleted
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java
File was deleted
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/device/FunctionBean.java
File was deleted