hxb
2022-03-21 0188dee359636723190f0f67a6b674b7b08f7bef
增加判断json数据格式
3个文件已添加
3个文件已删除
19个文件已修改
198 ■■■■■ 已修改文件
HDLSDK.zip 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO.zip 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-common-V1.0.3.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-common-V1.0.8.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-connect-V1.0.3.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-connect-V1.0.8.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-socket-V1.0.3.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/libs/hdl-socket-V1.0.8.aar 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK.zip
Binary files differ
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -94,7 +94,7 @@
         init();
        checkIfCertified();
        initDeviceInfo();
        initDeviceInfo();//初始化基本信息,非常重要,认证时要用
        registerAllTopicsListener();
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@@ -272,7 +272,7 @@
        infoBean.setDeviceModel("MCLog.431");//设备型号
        infoBean.setAccessMode("WIFI");
        infoBean.setIPGateway("192.168.1.1");
        infoBean.setIPAddress("192.168.1.101");
        infoBean.setIPAddress("192.168.1.102");
        infoBean.setGateway_type("music.standard");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
@@ -289,14 +289,14 @@
        //认证提交参数准备
        //测试服务
        String spkStr = "ir.module";//产品spk
        String macStr = "AA000000000000AF";//设备唯一MAC地址
        String secret = "44b360eb74b7ba64";//通过spk和mac提交云端认证后分配的secret
//        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 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";//
HDLSDK/hdl-common/build.gradle
@@ -9,8 +9,8 @@
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.0.7"
        versionName "1.0.10"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -19,7 +19,7 @@
        return version;
    }
    private String version="1.0.7";
    private String version="1.0.8";
    private HDLSdk() {
    }
HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -27,7 +27,7 @@
    private static final int MAIN_TYPE = 0;
    private static final int IO_TYPE = 1;
    private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(2);
    private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(3);
    private EventDispatcher() {
    }
@@ -63,6 +63,8 @@
    }
    public synchronized void remove(Object tag) {
        try {
        ioThread.execute(new Runnable() {
            @Override
            public void run() {
@@ -80,9 +82,11 @@
            }
        });
        }catch (Exception e){}
    }
    public synchronized void remove(Object tag, EventListener listener) {
        try {
        ioThread.execute(new Runnable() {
            @Override
            public void run() {
@@ -100,6 +104,7 @@
            }
        });
        }catch (Exception e){}
    }
@@ -150,6 +155,7 @@
     * @param listener
     */
    public synchronized void removeAllTopicsListener(EventListener listener) {
        try {
        ioThread.execute(new Runnable() {
            @Override
            public void run() {
@@ -164,6 +170,7 @@
            }
        });
        }catch (Exception e){}
    }
    public synchronized void clear() {
HDLSDK/hdl-connect/build.gradle
@@ -9,7 +9,7 @@
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.0.7"
        versionName "1.0.10"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java
@@ -17,6 +17,16 @@
    private String data;
    private int length;
    public String getSource_ipAddress() {
        return source_ipAddress;
    }
    public void setSource_ipAddress(String source_ipAddress) {
        this.source_ipAddress = source_ipAddress;
    }
    public String source_ipAddress;
    public String getTopic() {
        return topic;
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -119,7 +119,7 @@
    @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));
            //如果多条命令打包在一条数据中,都需要处理完
@@ -157,6 +157,7 @@
                    bytes.add(recevieBytes[i]);
                }
                LinkResponse response = new LinkResponse();
                response.setSource_ipAddress(ipaddress);
                response.setTopic(topic);
                if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) {
                    //需要解密
@@ -182,7 +183,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;
                }
                //解析完成,topic发送一次
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -408,11 +408,11 @@
     */
    public void udpSendMsg(String topic, String bodyStr,boolean broadcast) {
        if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
            LogUtils.e("udpSendMsg", "参数不能为空");
            LogUtils.e( "参数不能为空,不能发送UDP数据");
            return;
        }
        if (!HDLLinkConfig.getInstance().checkIfCertified()) {
            LogUtils.e("udpSendMsg", "未认证,请先认证");
            LogUtils.e("未认证,请先认证再调用UDP发送方法");
            return;
        }
        LinkRequest message = new LinkRequest(topic, bodyStr);
@@ -492,7 +492,8 @@
                            }.getType());
                            GatewaySearchBean searchBean = response.getObjects();
                            if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) {
                                if (searchBean.getGatewayId().contains(searchGatewayId)) {
                                searchBean.setIp_address(linkResponse.getSource_ipAddress());
                                if (searchBean.getGatewayId().contains(searchGatewayId)&&!TextUtils.isEmpty(searchGatewayId)) {
                                    removeSearchGatewayEvent();//移除搜索网关监听
                                    isSearchGatewaySuccess.set(true);//搜索成功标记
                                    searchGatewayCount.set(11);//次数标记
@@ -526,10 +527,14 @@
                            }.getType());
                            GatewaySearchBean gateway = response.getObjects();
                            if (gateway != null && !TextUtils.isEmpty(gateway.getGatewayId())) {
                                //可能网关带过来的ip不对
                                gateway.setIp_address(linkResponse.getSource_ipAddress());
                                //主网关并且是当前绑定的网关
                                if ("true".equals(gateway.getMaster().toLowerCase()) && gateway.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) {
                                    HDLLinkConfig.getInstance().setCurrentGateway(gateway);//设置当前网关
                                    if(!TextUtils.isEmpty( gateway.getIp_address())) {
                                    HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address());
                                    }
                                    //更新当前网关的信息
                                    HDLLinkConfig.getInstance().reSaveConfig();
                                }
@@ -582,9 +587,11 @@
                }
                if (!isSearchGatewaySuccess.get()) {
                    try {
                        LogUtils.e("搜索网关", "搜索10次,指定网关都没回复,回调超时");
                    //搜索10次,指定网关都没回复,回调超时
                    callBackSearchGatewayTimeout();
                    LogUtils.e("搜索网关", "搜索10次,指定网关都没回复,回调超时");
                    }catch (Exception e){}
                }
            }
        }).start();
HDLSDK/hdl-socket/build.gradle
@@ -9,7 +9,7 @@
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 2
        versionName "1.0.7"
        versionName "1.0.10"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
@@ -119,7 +119,7 @@
                    byte []bytes = new byte[len];
                    System.arraycopy(readBuffer,0,bytes,0,len);
                    //完整的数据才回调
                    handleMessage.read(bytes);
                    handleMessage.read(bytes,ip);
                }
            }
        }
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -154,7 +154,7 @@
            if (handleMessage != null) {
                byte[] data = new byte[receivePacket.getLength()];
                System.arraycopy(receivePacket.getData(), 0, data, 0, data.length);
                handleMessage.read(data);
                handleMessage.read(data,receivePacket.getAddress().getHostAddress());
            }
        } catch (Exception e) {
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java
@@ -5,12 +5,12 @@
 */
public abstract class ByteToMessageDecoder<T> implements IHandleFlow<T> {
    protected abstract T decoder(Object msg)
    protected abstract T decoder(Object msg,String ipaddress)
            throws Exception;
    @Override
    public final T read(Object data) throws Exception {
        return decoder(data);
    public final T read(Object data,String ipaddress) throws Exception {
        return decoder(data,ipaddress);
    }
    @Override
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java
@@ -5,7 +5,7 @@
 */
public interface IHandleFlow<T> {
    T read(Object data) throws Exception;
    T read(Object data,String ipaddress) throws Exception;
    byte[] write(byte[] data) throws Exception;
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java
@@ -4,7 +4,7 @@
 * Created by Tong on 2021/9/27.
 */
public interface IHandleMessage {
    void read(byte[] data) throws Exception;
    void read(byte[] data,String ipaddress) throws Exception;
    byte[] write(byte[] data) throws Exception;
}
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java
@@ -22,11 +22,11 @@
    }
    @Override
    public void read(byte[] data) throws Exception {
    public void read(byte[] data,String ipaddress) throws Exception {
        Object out = data;
        for (int i = 0; i < queue.size(); i++) {
            IHandleFlow flow = queue.get(i);
            Object read = flow.read(out);
            Object read = flow.read(out,ipaddress);
            try {
                out = Objects.requireNonNull(read);
            } catch (Exception ignored) {
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java
@@ -11,7 +11,7 @@
            throws Exception;
    @Override
    public final Object read(Object data) {
    public final Object read(Object data,String ipaddress) {
        return data;
    }
HDLSDK_DEMO.zip
Binary files differ
HDLSDK_DEMO/app/libs/hdl-common-V1.0.3.aar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-common-V1.0.8.aar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-connect-V1.0.3.aar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-connect-V1.0.8.aar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-socket-V1.0.3.aar
Binary files differ
HDLSDK_DEMO/app/libs/hdl-socket-V1.0.8.aar
Binary files differ
HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -75,19 +75,69 @@
    void initDeviceInfo()
    {
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
        infoBean.setDeviceMAC("123456789");
        infoBean.setIPMAC("12345678900");
        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.100");
        infoBean.setIPGateway("192.168.1.1");
        infoBean.setIPAddress("192.168.1.102");
        infoBean.setGateway_type("music.standard");
        infoBean.setHw_version("HW2.0");
        infoBean.setFw_version("Fw1.0");
        infoBean.setOID("010105000000FE08");
        infoBean.setSid("010105000000FE08110100000000");
        infoBean.setOID("010105000000FE10");//每个设备oid都要不一样
        infoBean.setSid("110105000000FE08110100000000");//每个设备的sid都要不一样
        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
    }
    /**
     * 入网认证
     */
    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());
            }
        });
    }
@@ -101,7 +151,7 @@
        rv.setLayoutManager(new LinearLayoutManager(this));
        checkIfCertified();
        initDeviceInfo();
        initDeviceInfo();//初始化
        registerAllTopicsListener();
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@@ -269,55 +319,7 @@
        HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
    }
    /**
     * 入网认证
     */
    void sendAuthenticateRequest() {
        tv.setText("开始入网认证...");
        //认证提交参数准备
        //测试服务
        String spkStr = "ir.module";//产品spk
        String macStr = "AA000000000000BB";//设备唯一MAC地址
        String secret = "87ae414b7a853f65";//通过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("raysgem");
        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());
            }
        });
    }
    String stringToMD5(String text) {
        byte[] hash;