From fdcf461fbfa3bcd650685743e891ad3357898f0c Mon Sep 17 00:00:00 2001 From: 562935844@qq.com Date: 星期四, 31 八月 2023 17:36:50 +0800 Subject: [PATCH] 更新sdk --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/ConnectStatusListener.java | 27 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IClient.java | 32 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/GsonConvert.java | 55 HDLSDK/app/src/main/AndroidManifest.xml | 67 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java | 1 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java | 121 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java | 8 HDLSDK/config.gradle | 5 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java | 45 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java | 269 + HDLSDK/app/src/main/res/layout/activity_main.xml | 18 HDLSDK/app/src/main/res/layout/demo_item.xml | 54 HDLSDK_DEMO/settings.gradle | 1 HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml | 18 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java | 26 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java | 6 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 220 + HDLSDK/app/src/main/res/layout/item_devices_list.xml | 86 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java | 12 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java | 16 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest2.java | 29 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java | 5 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java | 151 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java | 24 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java | 16 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java | 65 HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java | 66 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java | 125 + HDLSDK_DEMO/.idea/gradle.xml | 1 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/LogUtils.java | 63 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CheckAppVersionListener.java | 11 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketOptions.java | 75 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java | 48 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java | 11 HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoBean.java | 56 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java | 222 + HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketRequest.java | 7 HDLSDK/gradle.properties | 4 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java | 50 HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java | 12 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java | 62 HDLSDK_DEMO/app/build.gradle | 5 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventListener.java | 10 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java | 176 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java | 48 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketPool.java | 51 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java | 17 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java | 46 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java | 27 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java | 51 HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java | 52 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java | 5 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java | 20 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java | 73 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java | 20 HDLSDK_DEMO/.idea/misc.xml | 3 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 329 ++ HDLSDK/hdl-common/build.gradle | 5 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java | 39 HDLSDK/hdl-socket/build.gradle | 1 HDLSDK/app/release/output-metadata.json | 18 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java | 28 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java | 239 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 458 +++ HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 269 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketOptions.java | 26 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/.DS_Store | 0 HDLSDK_DEMO.rar | 0 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java | 21 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java | 6 HDLSDK_DEMO/app/src/main/AndroidManifest.xml | 1 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java | 8 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketRequest.java | 41 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java | 68 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java | 10 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketBoot.java | 270 ++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java | 4 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java | 235 + HDLSDK/.idea/gradle.xml | 3 HDLSDK/build.gradle | 18 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java | 127 + HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java | 223 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java | 3 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java | 124 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java | 10 HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar | 0 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java | 247 ++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java | 47 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/SPUtils.java | 203 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IMessagePipeLine.java | 11 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java | 129 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/SendListener.java | 11 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java | 163 HDLSDK/settings.gradle | 4 HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar | 0 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/IHDLClient.java | 52 HDLSDK/app/src/main/res/values/strings.xml | 1 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java | 24 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/UpdateInfo.java | 90 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java | 43 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LoginRequest.java | 30 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java | 43 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java | 43 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/TcpClient.java | 199 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java | 51 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java | 64 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java | 175 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java | 42 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IdUtils.java | 12 HDLSDK/hdl-connect/build.gradle | 15 HDLSDK/com.hdl.sdk/build.gradle | 59 HDLSDK_DEMO/config.gradle | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java | 79 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java | 114 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/.DS_Store | 0 116 files changed, 6,539 insertions(+), 794 deletions(-) diff --git a/HDLSDK/.idea/gradle.xml b/HDLSDK/.idea/gradle.xml index 6c18d10..c5f824a 100644 --- a/HDLSDK/.idea/gradle.xml +++ b/HDLSDK/.idea/gradle.xml @@ -7,14 +7,13 @@ <option name="testRunner" value="GRADLE" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> + <option name="gradleJvm" value="JDK" /> <option name="modules"> <set> <option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/com.hdl.sdk" /> - <option value="$PROJECT_DIR$/hdl-common" /> <option value="$PROJECT_DIR$/hdl-connect" /> - <option value="$PROJECT_DIR$/hdl-socket" /> </set> </option> <option name="resolveModulePerSourceSet" value="false" /> diff --git a/HDLSDK/app/release/output-metadata.json b/HDLSDK/app/release/output-metadata.json new file mode 100644 index 0000000..3885049 --- /dev/null +++ b/HDLSDK/app/release/output-metadata.json @@ -0,0 +1,18 @@ +{ + "version": 2, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.hdl.hdlsdk", + "variantName": "processReleaseResources", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "versionCode": 1, + "versionName": "1.0", + "outputFile": "app-release.apk" + } + ] +} \ No newline at end of file diff --git a/HDLSDK/app/src/main/AndroidManifest.xml b/HDLSDK/app/src/main/AndroidManifest.xml index 964acd6..cd2cfe7 100644 --- a/HDLSDK/app/src/main/AndroidManifest.xml +++ b/HDLSDK/app/src/main/AndroidManifest.xml @@ -1,34 +1,35 @@ -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - package="com.hdl.hdlsdk"> - - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> - <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> - <uses-permission - android:name="android.permission.WRITE_EXTERNAL_STORAGE" - tools:ignore="ScopedStorage" /> - <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"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> - </application> - +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.hdl.hdlsdk"> + + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE" + tools:ignore="ScopedStorage" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/> + + <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"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + </manifest> \ No newline at end of file diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java index 2935d87..5e35853 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/App.java @@ -1,33 +1,33 @@ -package com.hdl.hdlsdk; - -import android.app.Application; -import android.util.Log; - -import com.hdl.sdk.common.HDLSdk; -import com.hdl.sdk.common.event.EventListener; -import com.hdl.sdk.common.utils.LogUtils; -import com.hdl.sdk.connect.HDLLink; -import com.hdl.sdk.connect.bean.LinkResponse; - -/** - * Created by Tong on 2021/10/8. - */ -public class App extends Application { - - private String deviceStatusUpdateTopic; - @Override - public void onCreate() { - super.onCreate(); - //鍒濆鍖朣DK - HDLSdk.getInstance().init(this); - //鎺у埗SDK鏃ュ織鎵撳嵃 - HDLSdk.getInstance().setLogEnabled(true); - - } - - @Override - public void onTerminate() { - super.onTerminate(); - - } -} +package com.hdl.hdlsdk; + +import android.app.Application; +import android.util.Log; + +import com.hdl.sdk.common.HDLSdk; +import com.hdl.sdk.common.event.EventListener; +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.LinkResponse; + +/** + * Created by Tong on 2021/10/8. + */ +public class App extends Application { + + private String deviceStatusUpdateTopic; + @Override + public void onCreate() { + super.onCreate(); + //鍒濆鍖朣DK + HDLSdk.getInstance().init(this); + //鎺у埗SDK鏃ュ織鎵撳嵃 + HDLSdk.getInstance().setLogEnabled(true); + + } + + @Override + public void onTerminate() { + super.onTerminate(); + + } +} diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java index 18f6d76..20b0fff 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoAdapter.java @@ -1,26 +1,26 @@ -package com.hdl.hdlsdk; - -import androidx.annotation.NonNull; -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; - -/** - * Created by Tong on 2021/10/8. - */ -public class DemoAdapter extends BaseMultiItemQuickAdapter<DemoBean, BaseViewHolder> { - - public DemoAdapter(@Nullable List<DemoBean> data) { - super(data); - addItemType(0,R.layout.demo_item); - } - - @Override - protected void convert(@NonNull BaseViewHolder baseViewHolder, DemoBean demoBean) { - baseViewHolder.setText(R.id.tv_title,demoBean.getName()); - } -} +package com.hdl.hdlsdk; + +import androidx.annotation.NonNull; +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; + +/** + * Created by Tong on 2021/10/8. + */ +public class DemoAdapter extends BaseMultiItemQuickAdapter<DemoBean, BaseViewHolder> { + + public DemoAdapter(@Nullable List<DemoBean> data) { + super(data); + addItemType(0,R.layout.demo_item); + } + + @Override + protected void convert(@NonNull BaseViewHolder baseViewHolder, DemoBean demoBean) { + baseViewHolder.setText(R.id.tv_title,demoBean.getName()); + } +} diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoBean.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoBean.java index ad185fa..18b237e 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoBean.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/DemoBean.java @@ -1,28 +1,28 @@ -package com.hdl.hdlsdk; - -import com.chad.library.adapter.base.entity.MultiItemEntity; - -/** - * Created by Tong on 2021/10/8. - */ -public class DemoBean implements MultiItemEntity { - - private String name; - - public DemoBean(String name) { - this.name = name; - } - - @Override - public int getItemType() { - return 0; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} +package com.hdl.hdlsdk; + +import com.chad.library.adapter.base.entity.MultiItemEntity; + +/** + * Created by Tong on 2021/10/8. + */ +public class DemoBean implements MultiItemEntity { + + private String name; + + public DemoBean(String name) { + this.name = name; + } + + @Override + public int getItemType() { + return 0; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java index 678a722..d8e4570 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -1,5 +1,19 @@ package com.hdl.hdlsdk; +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; @@ -9,47 +23,33 @@ 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; -import android.view.View; -import android.widget.TextView; -import android.widget.Toast; - 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.DeleteNetworkListener; 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.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; +import com.hdl.sdk.connect.bean.response.UpdateInfo; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; +import com.hdl.sdk.connect.cloud.CallBackListener; +import com.hdl.sdk.connect.cloud.CheckAppVersionListener; +import com.hdl.sdk.connect.cloud.HDLException; 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.connect.utils.AesUtil; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; @@ -59,9 +59,6 @@ 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 { private static final String TAG = "MainActivity"; @@ -69,35 +66,132 @@ private RecyclerView rv; private TextView tv; private TextView responseTv; + private TextView localSecret; + private EditText editText; boolean isOn; private EventListener allTopicsListener; - private String testLightSid = "0001010D48C71B02020100010101"; + private String testLightSid = "02010131D9C03D01020300010107"; + private String secret = ""; @Override protected void onDestroy() { super.onDestroy(); removeAllTopicsListener(); } -void init() { -// HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600"); -// HDLLinkConfig.getInstance().setGatewayId("1473119283609321473"); -// HDLLinkConfig.getInstance().setLocalEncrypt(true); -} - @RequiresApi(api = Build.VERSION_CODES.O) + + void applyDeviceSecret() { + tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�..."); + responseTv.setText(""); + +// //姝e紡鏈嶅姟鍣� + String appKey = "i8hR07jzrIS";//appkey + String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret + + //娴嬭瘯鏈嶅姟鍣� +// String appKey ="FcRyUJlLJFF"; +// String appSecret = "wz8wn75ABidx8vXcFGUotqhwFkTaYvvJ"; + +// String appKey = "L2OZliZRxHc"; +// String appSecret = "aCIWSvJDOukXfx3kivsKW11x9xdR3IbV"; + String supplier = "JINMAOYUN";//鍘傚晢 +// String mac = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 + String mac = editText.getText().toString(); + String spk = "screen.touch";//浜у搧spk + + if (TextUtils.isEmpty(mac)) { + Toast.makeText(this, "mac涓嶈兘涓虹┖锛�", Toast.LENGTH_SHORT).show(); + return; + } + + HDLLink.getInstance().applyDeviceSecret(this, appKey, appSecret, supplier, mac, spk, new CallBackListener() { + @Override + public void onError(HDLException e) { + tv.setText("鐢宠澶辫触"); + responseTv.setText(e.getMsg()); + secret = ""; + } + + @Override + public void onSuccess(String msg) { + tv.setText("鐢宠鎴愬姛"); + responseTv.setText(msg.toString()); + secret = msg.toString(); + } + }); + + } + + void checkAppVersion() { + tv.setText("寮�濮嬫娴嬫洿鏂�..."); + responseTv.setText(""); + +// //姝e紡鏈嶅姟鍣� + String appKey = "i8hR07jzrIS";//appkey + String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret + + String appCode = "1697150870315999233";//appCode + + HDLLink.getInstance().checkAppVersion(this, appKey, appSecret, getAppVersionName(this), appCode, new CheckAppVersionListener() { + @Override + public void onSuccess(UpdateInfo info) { + tv.setText("鏈夋柊鏇存柊"); + responseTv.setText(info.toString()); + } + + @Override + public void onError(HDLException e) { + tv.setText("妫�娴嬫洿鏂板け璐�"); + responseTv.setText(e.getMsg()); + } + }); + + } + + public void UploadDeviceAuth(String mac, String result, String message, String auth_code) { + //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧 + HDLLink.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() { + @Override + public void onSuccess(String s) { + tv.setText("涓婃姤缁撴灉鎴愬姛"); + responseTv.setText(s.toString()); + } + + @Override + public void onError(HDLLinkException e) { + tv.setText("涓婃姤缁撴灉澶辫触"); + responseTv.setText(e.getMsg()); + Log.i(TAG, "onError: 涓婃姤缁撴灉澶辫触"); + } + }); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); responseTv = findViewById(R.id.response_tv); + editText = findViewById(R.id.edittext); + localSecret = findViewById(R.id.local_secret); tv = findViewById(R.id.state_tv); rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); - init(); + selectnetwork(); checkIfCertified(); - initDeviceInfo();//鍒濆鍖栧熀鏈俊鎭紝闈炲父閲嶈锛岃璇佹椂瑕佺敤 + initDeviceInfo();//鍒濆鍖� registerAllTopicsListener(); + HDLLink.getInstance().setDeleteNetworkListener(new DeleteNetworkListener() { + @Override + public void onSuccess(Object msg) { + LogUtils.i("setDeleteNetworkListener onSucceed = " + msg); + } + + @Override + public void onFailure() { + LogUtils.i("setDeleteNetworkListener onFailure"); + } + }); ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @Override @@ -108,9 +202,11 @@ launcher.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}); - final List<DemoBean> beans = new ArrayList<>(); + final List<DemoBean> beans = new ArrayList<DemoBean>(); + beans.add(new DemoBean("鐢宠璁惧瀵嗛挜")); beans.add(new DemoBean("鍏ョ綉璁よ瘉")); beans.add(new DemoBean("鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎")); + beans.add(new DemoBean("涓婃姤oid鍒楄〃")); beans.add(new DemoBean("鑾峰彇鍔熻兘鍒楄〃")); beans.add(new DemoBean("鍔熻兘灞炴�ц鍙�")); beans.add(new DemoBean("璁惧鎺у埗")); @@ -122,6 +218,8 @@ beans.add(new DemoBean("TCP鍙戦��")); beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�")); beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�")); + beans.add(new DemoBean("閫�缃�")); + beans.add(new DemoBean("妫�娴嬫洿鏂�")); demoAdapter = new DemoAdapter(beans); rv.setAdapter(demoAdapter); @@ -137,56 +235,72 @@ public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) { switch (position) { case 0: + //鐢宠璁惧瀵嗛挜 + applyDeviceSecret(); + break; + case 1: //鍏ョ綉璁よ瘉 sendAuthenticateRequest(); break; - case 1: + case 2: //鎼滅储缃戝叧 searchGatewayBroadcast(); break; - case 2: + case 3: + //涓婃姤oid鍒楄〃 + UploadOidList(); + break; + case 4: //鑾峰彇鍔熻兘鍒楄〃 getFunctionList(); break; - case 3: + case 5: //鍔熻兘灞炴�ц鍙� getFunctionAttribute(); break; - case 4: + case 6: //璁惧鎺у埗 controlDecide(); break; - case 5: + case 7: //璇诲彇鐘舵�� propertyRead(); break; - case 6: + case 8: //鑾峰彇鍦烘櫙鍒楄〃 getSceneList(); break; - case 7: - //鑾峰彇鍦烘櫙鍒楄〃 - controlScene(); + case 9: + //鍦烘櫙鎺у埗 + getScene(); break; - case 8: + case 10: //鍔熻兘鍒楄〃 startDevicesListActivity(); break; - case 9: + case 11: //UDP鍙戦�� udpSend(); break; - case 10: + case 12: //TCP鍙戦�� tcpSend(); break; - case 11: + case 13: //UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋� udpSendWithCallback(); break; - case 12: + case 14: //TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋� tcpSendWithCallback(); + break; + case 15: + //閫�缃� + deleteNetwork(); + break; + case 16: + //妫�娴嬫洿鏂� + checkAppVersion(); break; } } @@ -196,6 +310,10 @@ public void showToast(String text) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); + } + + void selectnetwork() { + HDLLink.getInstance().selectNetwork("wlan0"); } /** @@ -216,7 +334,9 @@ @Override public void onMessage(Object msg) { LinkResponse response = (LinkResponse) msg; - handleLinkResponse(response); + if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())) { + localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret()); + } } }; HDLLink.getInstance().registerAllTopicsListener(allTopicsListener); @@ -361,6 +481,7 @@ */ void searchGatewayBroadcast() { tv.setText("鎼滅储缃戝叧涓�..."); + responseTv.setText(""); HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() { @Override public void onError(HDLLinkException e) { @@ -403,6 +524,7 @@ */ void getFunctionAttribute() { tv.setText("鍔熻兘灞炴�ц鍙�"); + responseTv.setText(""); List<String> sids = new ArrayList<>(); sids.add(testLightSid); HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() { @@ -424,6 +546,7 @@ */ void propertyRead() { tv.setText("璇诲彇鐘舵�佷腑..."); + responseTv.setText(""); List<String> list = new ArrayList<>(); list.add(testLightSid);//瑕佽鍙栬澶囩殑sid HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() { @@ -447,6 +570,7 @@ */ void controlDecide() { tv.setText("鎺у埗璁惧"); + responseTv.setText(""); isOn = !isOn; List<DeviceControlRequest> requestList = new ArrayList<>(); DeviceControlRequest request = new DeviceControlRequest(); @@ -476,10 +600,12 @@ */ void getSceneList() { tv.setText("璇诲彇鍦烘櫙鍒楄〃"); + responseTv.setText(""); HDLLink.getInstance().getSceneList(new HDLLinkCallBack() { @Override public void onSuccess(String msg) { responseTv.setText(msg); + Log.d("panlili", "MainActivity.java:getSceneList-----> " + msg); } @Override @@ -493,11 +619,36 @@ // {"id":"8a5eaa143ce943b987b577df5a66759b","time_stamp":"1637040217235","objects":[{"sid":"04010560D2C7170A0A0100000000","name":"鍥炲妯″紡","status":"off","group":"255","delay":"0","modify_time":"1634871490"},{"sid":"04010560D2C76E0A0A0100010000","name":"绂诲妯″紡","status":"off","group":"255","delay":"0","modify_time":"1634785823"}]} /** + * 鑾峰彇鍦烘櫙璇︽儏 + * 鎵ц鎴愬姛鐨勮瘽 鍝嶅簲code涓�200 + */ + void getScene() { + tv.setText("鍦烘櫙璇诲彇"); + responseTv.setText(""); + //鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忚鍙� + List<String> sids = new ArrayList<>(); + sids.add("0201034C50B53F0A0A0100011100"); + sids.add("0201037F50B53F0A0A0100021100"); + HDLLink.getInstance().getScene(sids, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + responseTv.setText(msg); + } + + @Override + public void onError(HDLLinkException e) { + responseTv.setText(e.getMsg()); + } + }); + } + + /** * 鎺у埗鍦烘櫙 * 鎵ц鎴愬姛鐨勮瘽 鍝嶅簲code涓�200 */ void controlScene() { tv.setText("鍦烘櫙鎺у埗"); + responseTv.setText(""); //鎺у埗鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忔帶鍒� List<String> sids = new ArrayList<>(); isOn = !isOn; @@ -530,6 +681,7 @@ */ private void tcpSend() { tv.setText("TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr); @@ -540,6 +692,7 @@ */ private void udpSend() { tv.setText("UDP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr); @@ -572,6 +725,7 @@ */ private void udpSendWithCallback() { tv.setText("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() { @@ -593,6 +747,7 @@ */ private void tcpSendWithCallback() { tv.setText("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() { @@ -608,4 +763,76 @@ } }); } + + private void deleteNetwork() { + tv.setText("閫�缃�"); + responseTv.setText(""); + String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID(); + HDLLink.getInstance().deleteNetwork(oid, false, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + responseTv.setText(msg); + //閫�缃戞垚鍔燂紝鍒犻櫎鏁版嵁 + } + + @Override + public void onError(HDLLinkException e) { + responseTv.setText(e.getMsg()); + } + }); + } + + /** + * 涓婃姤oid鍒楄〃 + */ + private void UploadOidList() { + tv.setText("涓婃姤oid鍒楄〃..."); + responseTv.setText(""); + + //1.璁剧疆璁惧淇℃伅 + AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + + ListUploadRequest request = new ListUploadRequest(); + request.setOid(authenticateDeviceInfoBean.getOID()); + request.setDevice_name(authenticateDeviceInfoBean.getDeviceName()); + request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel()); + request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC()); + request.setSrc("LINK");//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK" + request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 + + HDLLink.getInstance().UploadOidList(request, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException error) { + tv.setText(error.getMsg()); + } + + @Override + public void onSuccess(String data) { + tv.setText("涓婃姤oid鍒楄〃鎴愬姛"); + responseTv.setText(data); + } + }); + } + + /** + * 鑾峰彇APP鐗堟湰 + * + * @param context + * @return + */ + public static String getAppVersionName(Context context) { + String versionName = "0"; + try { + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); + versionName = packageInfo.versionName; + if (TextUtils.isEmpty(versionName)) { + versionName = "0"; + } + } catch (Exception e) { + e.printStackTrace(); + } + return versionName; + } + } \ No newline at end of file diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java index f253b34..dc7156d 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListActivity.java @@ -1,24 +1,20 @@ package com.hdl.hdlsdk.device; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.OrientationHelper; -import androidx.recyclerview.widget.RecyclerView; - import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.google.gson.reflect.TypeToken; -import com.hdl.hdlsdk.DemoAdapter; import com.hdl.hdlsdk.R; import com.hdl.sdk.common.exception.HDLLinkException; -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.LinkResponse; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; -import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import java.util.ArrayList; diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java index d352b7c..773df27 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java @@ -1,118 +1,107 @@ -package com.hdl.hdlsdk.device; - -import android.content.Context; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.CompoundButton; -import android.widget.Switch; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import com.chad.library.adapter.base.BaseMultiItemQuickAdapter; -import com.chad.library.adapter.base.viewholder.BaseViewHolder; -import com.hdl.hdlsdk.DemoBean; -import com.hdl.hdlsdk.R; -import com.hdl.sdk.common.config.TopicConstant; -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.gson.GsonConvert; -import com.hdl.sdk.connect.HDLLink; -import com.hdl.sdk.connect.bean.request.DeviceControlRequest; -import com.hdl.sdk.connect.bean.response.BaseLocalResponse; -import com.hdl.sdk.connect.callback.HDLLinkCallBack; -import com.hdl.sdk.connect.config.HDLLinkConfig; - -import java.util.ArrayList; -import java.util.List; - -public class DevicesListAdapter extends RecyclerView.Adapter<DevicesListAdapter.ViewHolder> { - - private LayoutInflater mInflater; - private List<FunctionBean> mList = null; - - public DevicesListAdapter(Context context, List<FunctionBean> devicesList) { - this.mInflater = LayoutInflater.from(context); - this.mList = devicesList; - } - - /** - * item鏄剧ず绫诲瀷 - * - * @param parent - * @param viewType - * @return - */ - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = mInflater.inflate(R.layout.item_devices_list, parent, false); - ViewHolder viewHolder = new ViewHolder(view); - return viewHolder; - } - - /** - * 鏁版嵁鐨勭粦瀹氭樉绀� - * - * @param holder - * @param position - */ - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - holder.item_tv.setText(mList.get(position).getName()); - holder.device_on_off_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { - propertyDown(mList.get(position), isChecked); - } - }); - } - - @Override - public int getItemCount() { - return mList.size(); - } - - //鑷畾涔夌殑ViewHolder锛屾寔鏈夋瘡涓狪tem鐨勭殑鎵�鏈夌晫闈㈠厓绱� - public static class ViewHolder extends RecyclerView.ViewHolder { - public TextView item_tv; - public Switch device_on_off_switch; - - public ViewHolder(View view) { - super(view); - item_tv = (TextView) view.findViewById(R.id.device_title_tv); - device_on_off_switch = view.findViewById(R.id.device_on_off_switch); - } - } - - private void propertyDown(FunctionBean functionBean, Boolean isOn){ - List<DeviceControlRequest> requestList = new ArrayList<>(); - DeviceControlRequest request = new DeviceControlRequest(); - request.setSid(functionBean.getSid()); - List<DeviceControlRequest.StatusBean> statusBeanList= new ArrayList<>(); - DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean(); - bean.setKey("on_off"); - bean.setValue(isOn ? "on" : "off"); - statusBeanList.add(bean); - request.setStatus(statusBeanList); - requestList.add(request); - String time = String.valueOf(System.currentTimeMillis()); - - HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() { - @Override - public void onSuccess(String data) { - Log.i("propertyDown",data); - } - - @Override - public void onError(HDLLinkException e) { - Log.e("propertyDown", "ERROR :"+ e.getMsg()); - } - }); - - } +package com.hdl.hdlsdk.device; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.Switch; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import com.hdl.hdlsdk.R; +import com.hdl.sdk.common.exception.HDLLinkException; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.callback.HDLLinkCallBack; + +import java.util.ArrayList; +import java.util.List; + +public class DevicesListAdapter extends RecyclerView.Adapter<DevicesListAdapter.ViewHolder> { + + private LayoutInflater mInflater; + private List<FunctionBean> mList = null; + + public DevicesListAdapter(Context context, List<FunctionBean> devicesList) { + this.mInflater = LayoutInflater.from(context); + this.mList = devicesList; + } + + /** + * item鏄剧ず绫诲瀷 + * + * @param parent + * @param viewType + * @return + */ + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = mInflater.inflate(R.layout.item_devices_list, parent, false); + ViewHolder viewHolder = new ViewHolder(view); + return viewHolder; + } + + /** + * 鏁版嵁鐨勭粦瀹氭樉绀� + * + * @param holder + * @param position + */ + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.item_tv.setText(mList.get(position).getName()); + holder.device_on_off_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { + propertyDown(mList.get(position), isChecked); + } + }); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + //鑷畾涔夌殑ViewHolder锛屾寔鏈夋瘡涓狪tem鐨勭殑鎵�鏈夌晫闈㈠厓绱� + public static class ViewHolder extends RecyclerView.ViewHolder { + public TextView item_tv; + public Switch device_on_off_switch; + + public ViewHolder(View view) { + super(view); + item_tv = (TextView) view.findViewById(R.id.device_title_tv); + device_on_off_switch = view.findViewById(R.id.device_on_off_switch); + } + } + + private void propertyDown(FunctionBean functionBean, Boolean isOn){ + List<DeviceControlRequest> requestList = new ArrayList<>(); + DeviceControlRequest request = new DeviceControlRequest(); + request.setSid(functionBean.getSid()); + List<DeviceControlRequest.StatusBean> statusBeanList= new ArrayList<>(); + DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean(); + bean.setKey("on_off"); + bean.setValue(isOn ? "on" : "off"); + statusBeanList.add(bean); + request.setStatus(statusBeanList); + requestList.add(request); + String time = String.valueOf(System.currentTimeMillis()); + + HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() { + @Override + public void onSuccess(String data) { + Log.i("propertyDown",data); + } + + @Override + public void onError(HDLLinkException e) { + Log.e("propertyDown", "ERROR :"+ e.getMsg()); + } + }); + + } } \ No newline at end of file diff --git a/HDLSDK/app/src/main/res/layout/activity_main.xml b/HDLSDK/app/src/main/res/layout/activity_main.xml index 6fa6c2b..6bdd2a2 100644 --- a/HDLSDK/app/src/main/res/layout/activity_main.xml +++ b/HDLSDK/app/src/main/res/layout/activity_main.xml @@ -40,10 +40,20 @@ android:layout_height="match_parent" android:orientation="vertical"> + <EditText + android:id="@+id/edittext" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="10dp" + android:hint="璇疯緭鍏ac" + android:text="f2c5d8bad48f" + /> + <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="10dp" + android:layout_marginTop="@dimen/dp_10" android:text="褰撳墠鐘舵�侊細" /> <TextView @@ -66,6 +76,14 @@ android:text="鍝嶅簲锛�" /> <TextView + android:id="@+id/local_secret" + android:paddingStart="10dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="瀵嗛挜锛�" /> + + <TextView android:id="@+id/response_tv" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/HDLSDK/app/src/main/res/layout/demo_item.xml b/HDLSDK/app/src/main/res/layout/demo_item.xml index 84a9aed..3788542 100644 --- a/HDLSDK/app/src/main/res/layout/demo_item.xml +++ b/HDLSDK/app/src/main/res/layout/demo_item.xml @@ -1,28 +1,28 @@ -<?xml version="1.0" encoding="utf-8"?> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="40dp"> - - <TextView - android:id="@+id/tv_title" - android:layout_width="0dp" - android:layout_height="0dp" - android:gravity="center" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - <View - android:layout_width="0dp" - android:layout_height="1dp" - android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" - android:background="#f5f5f5" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> - - +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="40dp"> + + <TextView + android:id="@+id/tv_title" + android:layout_width="0dp" + android:layout_height="0dp" + android:gravity="center" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:background="#f5f5f5" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> + + </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/HDLSDK/app/src/main/res/layout/item_devices_list.xml b/HDLSDK/app/src/main/res/layout/item_devices_list.xml index 345f892..07b7cf4 100644 --- a/HDLSDK/app/src/main/res/layout/item_devices_list.xml +++ b/HDLSDK/app/src/main/res/layout/item_devices_list.xml @@ -1,44 +1,44 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="50dp" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:orientation="horizontal"> - - <TextView - android:id="@+id/device_title_tv" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_marginLeft="@dimen/dp_10" - android:gravity="center|left" - android:text="璁惧" - android:textColor="@color/black" - android:layout_weight="1"/> - - <Switch - android:id="@+id/device_on_off_switch" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginRight="@dimen/dp_10" - /> - </LinearLayout> - - - <View - android:layout_width="match_parent" - android:layout_height="1dp" - android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" - android:background="#f5f5f5" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> - - +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="50dp" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="horizontal"> + + <TextView + android:id="@+id/device_title_tv" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_marginLeft="@dimen/dp_10" + android:gravity="center|left" + android:text="璁惧" + android:textColor="@color/black" + android:layout_weight="1"/> + + <Switch + android:id="@+id/device_on_off_switch" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="@dimen/dp_10" + /> + </LinearLayout> + + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:background="#f5f5f5" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> + + </LinearLayout> \ No newline at end of file diff --git a/HDLSDK/app/src/main/res/values/strings.xml b/HDLSDK/app/src/main/res/values/strings.xml index 192b55f..dc5eb5f 100644 --- a/HDLSDK/app/src/main/res/values/strings.xml +++ b/HDLSDK/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ <resources> <string name="app_name">HDLSDK</string> + <string name="http_unknown">鏈煡缃戠粶閿欒锛岃绋嶅悗鍐嶈瘯</string> </resources> \ No newline at end of file diff --git a/HDLSDK/build.gradle b/HDLSDK/build.gradle index 8641fad..9137082 100644 --- a/HDLSDK/build.gradle +++ b/HDLSDK/build.gradle @@ -3,7 +3,13 @@ buildscript { repositories { google() + jcenter() mavenCentral() + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } + maven { url = uri("https://plugins.gradle.org/m2/") } + maven { + url "https://jitpack.io" + } } dependencies { classpath "com.android.tools.build:gradle:4.1.2" @@ -18,8 +24,20 @@ maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/repository/public' } + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } + maven { url = uri("https://plugins.gradle.org/m2/") } google() + jcenter() + mavenCentral() maven { url "https://jitpack.io" } + + maven { + credentials { + username rootProject.ext.ALIYUN_USER_NAME + password rootProject.ext.ALIYUN_PASSWORD + } + url 'https://packages.aliyun.com/maven/repository/2012126-release-Mc0DNo/' + } } } diff --git a/HDLSDK/com.hdl.sdk/build.gradle b/HDLSDK/com.hdl.sdk/build.gradle index 795f57b..00a22db 100644 --- a/HDLSDK/com.hdl.sdk/build.gradle +++ b/HDLSDK/com.hdl.sdk/build.gradle @@ -1,6 +1,6 @@ //鎵撳寘鐨� apply plugin: 'com.android.library' -apply plugin:'com.kezong.fat-aar' +apply plugin: 'com.kezong.fat-aar' android { compileSdkVersion rootProject.compileSdkVersion @@ -8,8 +8,8 @@ defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion - versionCode 2 - versionName "1.0.15" + versionCode 6 + versionName "1.1.4" } buildTypes { debug { @@ -27,14 +27,32 @@ 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 'com.hdl.hdlhttp:hxhttp:1.0.4' - embed project(path: ':hdl-common', configuration:'default') - embed project(path: ':hdl-connect', configuration:'default') - embed project(path: ':hdl-socket', configuration:'default') +// api 'androidx.appcompat:appcompat:1.3.1' +// api 'com.google.android.material:material:1.4.0' + + embed 'com.squareup.okhttp3:okhttp:4.9.1' + embed 'com.squareup.okhttp3:logging-interceptor:4.9.1' + embed 'com.squareup.okio:okio:2.8.0' + //retrofit + embed 'com.squareup.retrofit2:retrofit:2.9.0' + embed 'com.squareup.retrofit2:converter-scalars:2.9.0' + embed 'com.squareup.retrofit2:adapter-rxjava3:2.9.0' + embed 'io.reactivex.rxjava3:rxandroid:3.0.0' + embed 'io.reactivex.rxjava3:rxjava:3.1.1' + embed 'com.google.code.gson:gson:2.8.8' + + embed 'com.trello.rxlifecycle4:rxlifecycle:4.0.2' + embed 'com.trello.rxlifecycle4:rxlifecycle-android:4.0.2' + embed 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2' + + embed 'org.reactivestreams:reactive-streams:1.0.3' + +// embed(name: 'hxhttp_1.0.4_230201',ext: 'aar') + + embed project(path: ':hdl-connect', configuration: 'default') + } //鎵撳寘鐨� @@ -43,7 +61,7 @@ repositories { google() jcenter() - maven {url "https://plugins.gradle.org/m2/"} + maven { url "https://plugins.gradle.org/m2/" } } dependencies { @@ -52,16 +70,15 @@ } } -//allprojects { -// repositories { -// flatDir{ -// dirs 'libs' -// } -// google() -// jcenter() -// } -//} - +allprojects { + repositories { + flatDir { + dirs 'libs' + } + google() + jcenter() + } +} ////杩愯鐨� diff --git a/HDLSDK/config.gradle b/HDLSDK/config.gradle index 51a8ae6..d665ff3 100644 --- a/HDLSDK/config.gradle +++ b/HDLSDK/config.gradle @@ -1,5 +1,8 @@ ext { - minSdkVersion = 16 + minSdkVersion = 21 targetSdkVersion = 31 compileSdkVersion = 31 + + ALIYUN_USER_NAME = "611f24277cbfb3c62b5b1d4f" + ALIYUN_PASSWORD = "sJA([gwZJ5Y0" } \ No newline at end of file diff --git a/HDLSDK/gradle.properties b/HDLSDK/gradle.properties index 52f5917..31a34a4 100644 --- a/HDLSDK/gradle.properties +++ b/HDLSDK/gradle.properties @@ -15,5 +15,5 @@ # Android operating system, and which are packaged with your app"s APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true \ No newline at end of file +### Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true diff --git a/HDLSDK/hdl-common/build.gradle b/HDLSDK/hdl-common/build.gradle index f054e96..1f5d91e 100644 --- a/HDLSDK/hdl-common/build.gradle +++ b/HDLSDK/hdl-common/build.gradle @@ -11,7 +11,6 @@ versionCode 2 versionName "1.0.15" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } @@ -25,10 +24,8 @@ 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' } \ No newline at end of file diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java index de346dd..fca6a9b 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java @@ -13,13 +13,14 @@ /** * 鑾峰彇褰撳墠鐗堟湰 + * * @return */ public String getVersion() { return version; } - private String version="1.0.15"; + private String version = "1.0.15"; private HDLSdk() { } @@ -43,9 +44,10 @@ /** * 璁剧疆鎵撳嵃鏄惁寮�鍚� + * * @param enable */ - public void setLogEnabled(boolean enable){ + public void setLogEnabled(boolean enable) { LogUtils.setEnabled(enable); } } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java index bfb38b3..96adb95 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java @@ -1,8 +1,7 @@ package com.hdl.sdk.common.event; -import androidx.annotation.NonNull; -import androidx.collection.ArrayMap; +import android.util.ArrayMap; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; @@ -10,6 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -21,9 +21,9 @@ private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//鎵�鏈変富棰樻秷鎭� - private static final ArrayMap<Object, List<EventListener>> EVENT = new ArrayMap<>(); + private static final ConcurrentHashMap<Object, List<EventListener>> EVENT = new ConcurrentHashMap<>(); - private static final ArrayMap<EventListener, Integer> TYPE = new ArrayMap<>(); + private static final ConcurrentHashMap<EventListener, Integer> TYPE = new ConcurrentHashMap<>(); private static final int MAIN_TYPE = 0; private static final int IO_TYPE = 1; @@ -62,7 +62,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 +82,7 @@ } } - public void remove(Object tag) { + public void remove(Object tag) { synchronized (this) { if (tag == null) { return; @@ -105,7 +105,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 +125,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; @@ -147,7 +147,7 @@ listener.onMessage(o); } } catch (Exception e) { - LogUtils.e("post寮傚父1锛�" + e.getMessage()); +// LogUtils.e("post寮傚父1锛�" + e.getMessage()); } } }); @@ -173,17 +173,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 +192,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 +208,7 @@ @Override public void run() { try { - if(listener==null){ + if (listener == null) { return; } if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java index 715cb3e..5343159 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java @@ -1,6 +1,7 @@ package com.hdl.sdk.common.exception; -import androidx.annotation.NonNull; + + /** * Created by Tong on 2021/11/11. @@ -39,7 +40,7 @@ this.code = code; } - public @NonNull + public String getMsg() { return msg; } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java index 46b1d5d..b7333d3 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/LogUtils.java @@ -57,7 +57,7 @@ public static void e(String msg) { if (msg != null && isEnabled) { - Log.e(TAG, msg); + Log.e(TAG, msg); } } } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java index bbdd808..6181f68 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/SPUtils.java @@ -3,7 +3,6 @@ import android.content.Context; import android.content.SharedPreferences; -import androidx.annotation.NonNull; import com.hdl.sdk.common.HDLSdk; @@ -26,87 +25,87 @@ //======閫氱敤瀛樺偍======== - public static void put(@NonNull final String key, final String value) { + public static void put(final String key, final String value) { getAppPreference().edit().putString(key, value).apply(); } - public static String getString(@NonNull final String key) { + public static String getString(final String key) { return getString(key, ""); } - public static String getString(@NonNull final String key, final String defaultValue) { + public static String getString(final String key, final String defaultValue) { return getAppPreference().getString(key, defaultValue); } - public static void put(@NonNull final String key, final int value) { + public static void put(final String key, final int value) { put(key, value, false); } - public static void put(@NonNull final String key, final int value, final boolean isCommit) { + public static void put(final String key, final int value, final boolean isCommit) { getAppPreference().edit().putInt(key, value).apply(); } - public static int getInt(@NonNull final String key) { + public static int getInt(final String key) { return getInt(key, -1); } - public static int getInt(@NonNull final String key, final int defaultValue) { + public static int getInt(final String key, final int defaultValue) { return getAppPreference().getInt(key, defaultValue); } - public static void put(@NonNull final String key, final long value) { + public static void put(final String key, final long value) { getAppPreference().edit().putLong(key, value).apply(); } - public static long getLong(@NonNull final String key) { + public static long getLong(final String key) { return getLong(key, -1L); } - public static long getLong(@NonNull final String key, final long defaultValue) { + public static long getLong(final String key, final long defaultValue) { return getAppPreference().getLong(key, defaultValue); } - public static void put(@NonNull final String key, final float value) { + public static void put(final String key, final float value) { getAppPreference().edit().putFloat(key, value).apply(); } - public static float getFloat(@NonNull final String key) { + public static float getFloat(final String key) { return getFloat(key, -1f); } - public static float getFloat(@NonNull final String key, final float defaultValue) { + public static float getFloat(final String key, final float defaultValue) { return getAppPreference().getFloat(key, defaultValue); } - public static void put(@NonNull final String key, final boolean value) { + public static void put(final String key, final boolean value) { getAppPreference().edit().putBoolean(key, value).apply(); } - public static boolean getBoolean(@NonNull final String key) { + public static boolean getBoolean(final String key) { return getBoolean(key, false); } - public static boolean getBoolean(@NonNull final String key, final boolean defaultValue) { + public static boolean getBoolean(final String key, final boolean defaultValue) { return getAppPreference().getBoolean(key, defaultValue); } - public static void put(@NonNull final String key, + public static void put(final String key, final Set<String> value ) { @@ -115,12 +114,12 @@ } - public static Set<String> getStringSet(@NonNull final String key) { + public static Set<String> getStringSet(final String key) { return getStringSet(key, Collections.<String>emptySet()); } - public static Set<String> getStringSet(@NonNull final String key, + public static Set<String> getStringSet(final String key, final Set<String> defaultValue) { return getAppPreference().getStringSet(key, defaultValue); } @@ -131,12 +130,12 @@ } - public static boolean contains(@NonNull final String key) { + public static boolean contains(final String key) { return getAppPreference().contains(key); } - public static void remove(@NonNull final String key) { + public static void remove(final String key) { getAppPreference().edit().remove(key).apply(); } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java index fd122d8..83fd5c6 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java @@ -1,8 +1,6 @@ package com.hdl.sdk.common.utils.gson; -import androidx.annotation.NonNull; - import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -25,14 +23,13 @@ return new ParameterizedTypeImpl(rawType, actualTypeArguments, null); } - @NonNull + @Override public Type[] getActualTypeArguments() { return actualTypeArguments; } - @NonNull @Override public Type getRawType() { return rawType; diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle index 79e077a..5f8c118 100644 --- a/HDLSDK/hdl-connect/build.gradle +++ b/HDLSDK/hdl-connect/build.gradle @@ -8,10 +8,9 @@ defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion - versionCode 2 - versionName "1.0.15" + versionCode 5 + versionName "1.1.3" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } @@ -28,7 +27,11 @@ } dependencies { - api project(path: ':hdl-socket') - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'com.google.android.material:material:1.3.0' +// implementation fileTree(include: ['*.jar'], dir: 'libs') + + api 'com.hdl.hdlhttp:hxhttp:1.0.4' + api 'com.squareup.okhttp3:logging-interceptor:4.9.1' +// embed(name: 'hxhttp_1.0.4_230201',ext: 'aar') + + api 'com.google.code.gson:gson:2.8.8' } diff --git a/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar b/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar new file mode 100644 index 0000000..a436691 --- /dev/null +++ b/HDLSDK/hdl-connect/libs/hxhttp_1.0.4_230201.aar Binary files differ diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/.DS_Store b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/.DS_Store new file mode 100644 index 0000000..e90f688 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/.DS_Store Binary files differ diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java new file mode 100644 index 0000000..1db547c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java @@ -0,0 +1,68 @@ +package com.hdl.sdk.common; + +import android.content.Context; +import android.util.Log; + +import com.hdl.sdk.common.config.TopicConstant; +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.gson.GsonConvert; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.LinkResponse; +import com.hdl.sdk.connect.bean.request.BroadcastRequest; +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; + +/** + * Created by Tong on 2021/9/28. + */ +public class HDLSdk { + + private Context context; + + /** + * 鑾峰彇褰撳墠鐗堟湰 + * + * @return + */ + public String getVersion() { + return version; + } + + private String version = "1.1.0"; + + private HDLSdk() { + } + + private static class SingletonInstance { + private static final HDLSdk INSTANCE = new HDLSdk(); + } + + public static HDLSdk getInstance() { + return SingletonInstance.INSTANCE; + } + + public void init(Context context) { + this.context = context.getApplicationContext(); + HDLAuthSocket.getInstance().init(); + HDLSocket.getInstance().broadcastRequest(); + LogUtils.i("HDLSdk Version:" + version); + } + + + public Context getContext() { + return context; + } + + /** + * 璁剧疆鎵撳嵃鏄惁寮�鍚� + * + * @param enable + */ + public void setLogEnabled(boolean enable) { + LogUtils.setEnabled(enable); + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/IHDLClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/IHDLClient.java new file mode 100644 index 0000000..b27f2ab --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/IHDLClient.java @@ -0,0 +1,52 @@ +package com.hdl.sdk.common; + +/** + * Created by Tong on 2021/9/28. + * 鍖呭惈鎵�鏈夋搷浣� + */ +public interface IHDLClient { + + + /** + * 鎼滅储缃戝叧 + */ + void searchGateway(); + + + /** + * 鑾峰彇缃戝叧璇︾粏淇℃伅 + */ + void getGatewayInfo(); + + /** + * 鑾峰彇璁惧鍒楄〃 + */ + void getDeviceList(); + + /** + * 鑾峰彇鍔熻兘鍒楄〃 + */ + void getFunctionList(); + + /** + * 鑾峰彇鍔熻兘灞炴�� + */ + void getFunctionAttribute(); + + /** + * 璁惧鎺у埗 + */ + void deviceControl(); + + /** + * 鑾峰彇璁惧鐘舵�� + */ + void getDeviceStatus(); + + /** + * 鏀瑰彉璁惧鐘舵�� + */ + void changeDeviceStatus(); + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java new file mode 100644 index 0000000..4ad39ac --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java @@ -0,0 +1,125 @@ +package com.hdl.sdk.common.config; + +/** + * Created by Tong on 2021/9/22. + */ +public class TopicConstant { + + //缃戝叧骞挎挱鍏ョ綉鎸囦护 + public static final String GATEWAY_AUTH_BROADCAST = "/user/all/custom/device/network_access/broadcast"; + + //璁惧鍏ョ綉鍜岃璇� + public static final String DEIVCE_AUTH_REQUEST = "/user/all/custom/device/network_access/request"; + + //璁惧鍏ョ綉鍜岃璇佸搷搴� + public static final String DEIVCE_AUTH_REQUEST_REPLY = "/user/all/custom/device/network_access/request_reply"; + + //鍏ョ綉璁よ瘉缁撴灉鍙嶉 + public static final String DEIVCE_AUTH_RESULT_NOTIFY = "/user/%s/custom/device/auth/result_notify"; + + //鎼滅储缃戝叧 + public static final String GATEWAY_SEARCH = "/user/all/custom/gateway/search"; + + //鎼滅储缃戝叧鍝嶅簲 + public static final String GATEWAY_SEARCH_REPLY = "/user/all/custom/gateway/search_reply"; + + //缃戝叧璇︾粏淇℃伅鑾峰彇s=gw_id + public static final String GATEWAY_INFO = "/user/%s/custom/gateway/get"; + + //鑾峰彇鐗╃悊璁惧鍒楄〃 + public static final String GET_DEVICE_LIST = " /user/%s/custom/device/list/get"; + + //鑾峰彇鐗╃悊璁惧鍒楄〃鍝嶅簲 + public static final String GET_DEVICE_LIST_REPLY = " /user/%s/custom/device/list/get_reply"; + + //鑾峰彇鍔熻兘鍒楄〃 + public static final String GET_FUNCTION_LIST = "/user/%s/custom/function/list/get"; + + //鑾峰彇鍔熻兘鍝嶅簲 + public static final String GET_FUNCTION_LIST_REPLY = "/user/%s/custom/function/list/get_reply"; + + //鍔熻兘灞炴�ц鍙� + public static final String GET_FUNCTION_ATTRIBUTE = "/user/%s/custom/function/attribute/get"; + + //鍔熻兘灞炴�у搷搴� + public static final String GET_FUNCTION_ATTRIBUTE_REPLY = "/user/%s/custom/function/attribute/get_reply"; + + //鎺у埗 + public static final String PROPERTY_DOWN = "/base/%s/thing/property/down"; + + //鎺у埗鍝嶅簲 + public static final String PROPERTY_DOWN_REPLY = "/base/%s/thing/property/down_reply"; + + //鐘舵�佷笂鎶� + public static final String PROPERTY_UP = "/base/%s/thing/property/up"; + + //鐘舵�佷笂鎶ュ搷搴� + public static final String PROPERTY_UP_REPLY = "/base/%s/thing/property/up_reply"; + + //璇诲彇鐘舵�� + public static final String PROPERTY_READ = "/base/%s/thing/property/read"; + + //璇诲彇鐘舵�佸搷搴� + public static final String PROPERTY_READ_REPLY = "/base/%s/thing/property/read_reply"; + + //8.1鑾峰彇鍦烘櫙鍒楄〃 + public static final String SCENE_LIST_GET = "/user/%s/custom/scene/list/get"; + + //8.2鑾峰彇鍦烘櫙 + public static final String SCENE_GET = "/user/%s/custom/scene/get"; + + //8.3鎵ц鍦烘櫙 + public static final String SCENE_CONTROL = "/user/%s/custom/scene/execute"; + + //8.4鍦烘櫙澧炲姞 + public static final String SCENE_ADD = "/user/%s/custom/scene/add"; + + //8.5鍦烘櫙缂栬緫 + public static final String SCENE_EDIT = "/user/%s/custom/scene/edit"; + + //8.6鍦烘櫙鍒犻櫎 + public static final String SCENE_DELETE = "/user/%s/custom/scene/delete"; + + //link tcp 鐧诲綍 + public static final String GATEWAY_LOGIN = "/user/%s/custom/gateway/login"; + + /** + * 璁惧杩炴帴TCP涔嬪墠骞挎挱 + */ + public static final String BROADCAST = "/user/all/custom/gateway/broadcast"; + + /** + * 涓荤綉鍏冲洖澶� + */ + public static final String BROADCAST_REPLY = "/user/all/custom/gateway/broadcast_reply"; + + public static final String LINK_BROADCAST = "/user/all/custom/gateway/broadcast_reply"; + + /** + * 蹇冭烦妫�娴� + */ + public static final String HEARTBEAT = "/user/%s/custom/gateway/heartbeat"; + /** + * 蹇冭烦妫�娴嬪洖澶� + */ + public static final String HEARTBEAT_REPLY = "/user/%s/custom/gateway/heartbeat_reply"; + + //閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧 + public static final String DELETE_REQUEST = "/base/%s/thing/topo/delete/request"; + + //缃戝叧鍝嶅簲閫�缃戦�氱煡 + public static final String DELETE_NOTIFY = "/base/%s/thing/topo/delete/notify"; + + public static final String DELETE_NOTIFY_REPLY = "/base/%s/thing/topo/delete/notify_reply"; + + //缃戝叧鐗╃悊鍒犻櫎(閫�缃�)瀛愯澶囧悗涓婃姤 + public static final String DELETE_UP = "/base/%s/thing/topo/delete/up"; + + //椹卞姩涓婃姤oid鍒楄〃 + public static final String LIST_UPLOAD = "/user/%s/custom/device/list/upload"; + + //椹卞姩涓婃姤oid鍒楄〃鍥炲 + public static final String LIST_UPLOAD_REPLY = "/user/%s/custom/device/list/upload_reply"; + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java new file mode 100644 index 0000000..0fa9a8a --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/DeleteNetworkListener.java @@ -0,0 +1,11 @@ +package com.hdl.sdk.common.event; + +/** + * Created by Tong on 2021/9/22. + */ +public interface DeleteNetworkListener { + + void onSuccess(Object msg); + void onFailure(); + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java new file mode 100644 index 0000000..2f59e1d --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java @@ -0,0 +1,239 @@ +package com.hdl.sdk.common.event; + + +import android.util.ArrayMap; + +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.common.utils.ThreadToolUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; + + +/** + * Created by Tong on 2021/9/22. + * 浜嬩欢鍒嗗彂 + */ +public class EventDispatcher { + + private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//鎵�鏈変富棰樻秷鎭� + + private static final ConcurrentHashMap<Object, List<EventListener>> EVENT = new ConcurrentHashMap<>(); + + private static final ConcurrentHashMap<EventListener, Integer> TYPE = new ConcurrentHashMap<>(); + + private static final int MAIN_TYPE = 0; + private static final int IO_TYPE = 1; + + private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(3); + + + private EventDispatcher() { + } + + // private static class SingletonInstance { + private static final EventDispatcher instance = new EventDispatcher(); +// } + + public static EventDispatcher getInstance() { + return instance; + } + + public void register(Object tag, EventListener listener) { + synchronized (this) { + try { + LogUtils.i("娉ㄥ唽涓婚锛�" + tag); + if (tag == null) return; + if (!EVENT.containsKey(tag)) { + EVENT.put(tag, new ArrayList<>()); + } + if (listener == null) { + LogUtils.i("鐩戝惉浜嬩欢涓虹┖"); + return; + } + Objects.requireNonNull(EVENT.get(tag)).add(listener); + TYPE.put(listener, MAIN_TYPE); + } catch (Exception e) { + LogUtils.e("register锛�" + e.getMessage()); + } + } + } + + public void registerIo(Object tag, EventListener listener) { + synchronized (this) { + LogUtils.i("娉ㄥ唽涓婚锛�" + tag); + if (tag == null) return; + if (!EVENT.containsKey(tag)) { + EVENT.put(tag, new ArrayList<>()); + } + try { + if (listener == null) { + LogUtils.i("鐩戝惉浜嬩欢涓虹┖"); + return; + } + Objects.requireNonNull(EVENT.get(tag)).add(listener); + TYPE.put(listener, IO_TYPE); + } catch (Exception e) { + LogUtils.e("registerIo锛�" + e.getMessage()); + } + } + } + + public void remove(Object tag) { + synchronized (this) { + if (tag == null) { + return; + } + try { + if (EVENT.containsKey(tag)) { + LogUtils.i("绉婚櫎key锛�" + tag); + List<EventListener> list = EVENT.get(tag); + for (EventListener eventListener : list) { + if (eventListener == null) { + continue; + } + TYPE.remove(eventListener); + } + EVENT.remove(tag); + } + } catch (Exception ignored) { + LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage()); + } + } + } + + public void remove(Object tag, EventListener listener) { + synchronized (this) { + try { + if (tag == null || listener == null) { + return; + } + if (EVENT.containsKey(tag)) { + LogUtils.i("绉婚櫎key锛�" + tag); + List<EventListener> ev = EVENT.get(tag); + if (ev != null && !ev.isEmpty()) { + TYPE.remove(listener); + ev.remove(listener); + } + } + } catch (Exception ignored) { + LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage()); + } + } + } + + public synchronized void post(Object tag, Object o) { + if (tag == null) { + LogUtils.i("post tag涓虹┖"); + return; + } + try { + if (EVENT.containsKey(tag)) { + LogUtils.i("post锛�" + tag); + List<EventListener> list = EVENT.get(tag); + if (list != null && !list.isEmpty()) { + for (EventListener listener : list) { + if (listener == null) { + continue; + } + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + try { + if (listener != null) { + listener.onMessage(o); + } + } catch (Exception e) { + LogUtils.e("post寮傚父1锛�" + e.getMessage()); + } + } + }); + } + } + } + //鎵�鏈変富棰樼殑Listener閫氱煡 + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { + for (EventListener listener : ALL_TOPICS_EVENT) { + if (listener == null) { + continue; + } + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + try { + if (listener != null) { + listener.onMessage(o); + } + } catch (Exception e) { + } + } + }); + } + } + } catch (Exception e) { + LogUtils.e("post寮傚父2锛�" + e.getMessage()); + } + } + + /** + * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * + * @param listener + */ + public synchronized void registerAllTopicsListener(EventListener listener) { + if (listener == null) { + return; + } + try { + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.contains(listener)) { + ALL_TOPICS_EVENT.add(listener); + } + TYPE.put(listener, MAIN_TYPE); + } catch (Exception e) { + LogUtils.e("registerAllTopicsListener锛�" + e.getMessage()); + } + } + + /** + * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * + * @param listener + */ + public synchronized void removeAllTopicsListener(EventListener listener) { + try { + ioThread.execute(new Runnable() { + @Override + public void run() { + try { + if (listener == null) { + return; + } + if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) { + TYPE.remove(listener); + ALL_TOPICS_EVENT.remove(listener); + } + } catch (Exception ignored) { + LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage()); + } + + } + }); + } catch (Exception e) { + LogUtils.e("绉婚櫎event寮傚父2锛�" + e.getMessage()); + } + } + + public synchronized void clear() { + ALL_TOPICS_EVENT.clear(); + EVENT.clear(); + TYPE.clear(); + } + + public synchronized void release() { + clear(); + ioThread.shutdownNow(); + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventListener.java new file mode 100644 index 0000000..b2f9c38 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventListener.java @@ -0,0 +1,10 @@ +package com.hdl.sdk.common.event; + +/** + * Created by Tong on 2021/9/22. + */ +public interface EventListener { + + void onMessage(Object msg); + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java new file mode 100644 index 0000000..079e275 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkCode.java @@ -0,0 +1,50 @@ +package com.hdl.sdk.common.exception; + +/** + * Created by jlchen on 11/15/21. + * + * @Description : HDLError + */ +public enum HDLLinkCode { + + HDL_AUTH_124013_ERROR(124013,"璇AC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪"), + HDL_AUTH_124015_ERROR(124015,"璁惧鍘傚涓嶅尮閰�"), + HDL_DATA_ERROR(-2000,"鍙傛暟寮傚父"), + HDL_DATA_NULL_ERROR(-2001,"鍙傛暟涓嶈兘涓虹┖"), + HDL_AUTH_ERROR(-2002,"璁よ瘉澶辫触"), + HDL_SEND_ERROR(-2003,"鍙戦�佸け璐�"), + HDL_TIMEOUT_ERROR(-2004,"瓒呮椂"), + HDL_UNAUTHORIZED_ERROR(-2005,"鏈璇侊紝璇峰厛璁よ瘉"), + HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED(-2006,"璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔�"), + HDL_SEARCH_GATEWAY_TIMEOUT_ERROR(-2007,"鎼滅储缃戝叧澶辫触锛岃秴鏃�"), + HDL_AUTH_MAC_KEY_ERROR_(-2008,"璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪"), + HDL_GET_DEVICE_LIST_ERROR(-2100,"鑾峰彇璁惧鍒楄〃澶辫触"), + HDL_GET_FUNCTION_LIST_ERROR(-2101,"鑾峰彇鍔熻兘鍒楄〃澶辫触"), + HDL_GET_FUNCTION_PROPERTIES_ERROR(-2102,"鑾峰彇鍔熻兘灞炴�уけ璐�"), + HDL_CONTROL_FAILURE_ERROR(-2103,"鎺у埗澶辫触"), + HDL_UPLOAD_GATEWAYINFO_FAILURE_ERROR(-2104,"涓婃姤澶辫触"); + + private String msg; + private int code; + + private HDLLinkCode(int code, String msg) { + this.msg = msg; + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java new file mode 100644 index 0000000..b580aae --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/exception/HDLLinkException.java @@ -0,0 +1,64 @@ +package com.hdl.sdk.common.exception; + + + + +/** + * Created by Tong on 2021/11/11. + */ +public class HDLLinkException extends RuntimeException { + + private int code = 0; + private String msg = ""; + private Throwable rawThrowable; + + public HDLLinkException() { + } + + public HDLLinkException(String msg) { + this.msg = msg; + } + + public HDLLinkException(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public HDLLinkException(int code) { + this.code = code; + } + + public HDLLinkException(Throwable rawThrowable) { + this.rawThrowable = rawThrowable; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public + String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Throwable getRawThrowable() { + return rawThrowable; + } + + public void setRawThrowable(Throwable rawThrowable) { + this.rawThrowable = rawThrowable; + } + + public static HDLLinkException getErrorWithCode(HDLLinkCode code){ + return new HDLLinkException(code.getCode(), code.getMsg()); + } +} + diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java new file mode 100644 index 0000000..6122daa --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ByteUtils.java @@ -0,0 +1,151 @@ +package com.hdl.sdk.common.utils; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by Tong on 2021/9/23. + */ +public class ByteUtils { + + public static byte[] toByteArray(List<Byte> list) { + Byte[] temps = list.toArray(new Byte[0]); + byte[] result = new byte[temps.length]; + for (int i = 0; i < result.length; i++) { + result[i] = temps[i]; + } + return result; + + } + + public static List<Byte> toByteList(byte[] bytes) { + final List<Byte> list = new ArrayList<>(); + for (byte aByte : bytes) { + list.add(aByte); + } + return list; + + } + + public static byte[] getRangeBytes(List<Byte> list, int start, int end) { + Byte[] temps = Arrays.copyOfRange(list.toArray(new Byte[0]), start, end); + byte[] result = new byte[temps.length]; + for (int i = 0; i < temps.length; i++) { + result[i] = temps[i]; + } + return result; + + } + + /** + * 鎷兼帴byte + */ + public static byte[] concatBytes(byte[] bt1, byte[] bt2) { + if (bt1 == null) { + return bt2; + } + if (bt2 == null) { + return bt1; + } + byte[] bt3 = new byte[bt1.length + bt2.length]; + System.arraycopy(bt1, 0, bt3, 0, bt1.length); + System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length); + return bt3; + } + + + public boolean endWith(Byte[] src, byte[] target) { + if (src.length < target.length) { + return false; + } + for (int i = 0; i < target.length; i++) { + if (target[target.length - i - 1] != src[src.length - i - 1]) { + return false; + } + } + return true; + } + + + public static int byteIndexOf(byte[] searched, byte[] find, int start) { + boolean matched; + int end = find.length - 1; + int skip = 0; + for (int index = start; index <= searched.length - find.length; ++index) { + matched = true; + if (find[0] != searched[index] || find[end] != searched[index + end]) continue; + else skip++; + if (end > 10) + if (find[skip] != searched[index + skip] || find[end - skip] != searched[index + end - skip]) + continue; + else skip++; + for (int subIndex = skip; subIndex < find.length - skip; ++subIndex) { + if (find[subIndex] != searched[index + subIndex]) { + matched = false; + break; + } + } + if (matched) { + return index; + } + } + return -1; + + } + + public static int getByteIndexOf(byte[] sources, byte[] src) { + return getByteIndexOf(sources, src, 0, sources.length); + } + + //鍒ゆ柇涓�涓猙yte鏁板�煎湪鍙﹀涓�涓猙yte鏁扮粍涓搴旂殑娓告爣鍊� + public static int getByteIndexOf(byte[] sources, byte[] src, int startIndex) { + return getByteIndexOf(sources, src, startIndex, sources.length); + } + + + //鍒ゆ柇涓�涓猙yte鏁板�煎湪鍙﹀涓�涓猙yte鏁扮粍涓搴旂殑娓告爣鍊硷紝鎸囧畾寮�濮嬬殑娓告爣鍜岀粨鏉熺殑娓告爣浣嶇疆 + public static int getByteIndexOf(byte[] sources, byte[] src, int startIndex, int endIndex) { + + if (sources == null || src == null || sources.length == 0 || src.length == 0) { + return -1; + } + + if (endIndex > sources.length) { + endIndex = sources.length; + } + + int i, j; + for (i = startIndex; i < endIndex; i++) { + if (sources[i] == src[0] && i + src.length < endIndex) { + for (j = 1; j < src.length; j++) { + if (sources[i + j] != src[j]) { + break; + } + } + + if (j == src.length) { + return i; + } + } + } + return -1; + } + + /** + * 瀛楃涓瞭o Bytes + * @param str 瀛楃涓� + * @return + */ + public static byte[] stringToBytes(String str) { + try { + // 浣跨敤鎸囧畾鐨勫瓧绗﹂泦灏嗘瀛楃涓茬紪鐮佷负byte搴忓垪骞跺瓨鍒颁竴涓猙yte鏁扮粍涓� + return str.getBytes("utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return new byte[]{}; + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IdUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IdUtils.java new file mode 100644 index 0000000..c053953 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IdUtils.java @@ -0,0 +1,12 @@ +package com.hdl.sdk.common.utils; + +import java.util.UUID; + +/** + * Created by Tong on 2021/10/8. + */ +public class IdUtils { + public static String getUUId() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java new file mode 100644 index 0000000..8fa0785 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java @@ -0,0 +1,235 @@ +package com.hdl.sdk.common.utils; + +import android.content.Context; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.text.TextUtils; +import android.util.Log; + +import com.hdl.sdk.connect.config.HDLLinkConfig; + +import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Enumeration; + +/** + * Created by Tong on 2021/9/27. + */ +public class IpUtils { + +// /** +// * @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"; + }*/ + + + /** + * @return 骞挎挱鍦板潃 + */ + public static synchronized String getBroadcastAddress() { + try { + if (!TextUtils.isEmpty(HDLLinkConfig.getInstance().getNetworkName())) { + for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); + niEnum.hasMoreElements(); ) { + NetworkInterface ni = niEnum.nextElement(); + if (!ni.isLoopback() && ni.getName().equalsIgnoreCase(HDLLinkConfig.getInstance().getNetworkName())) { + for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { + if (interfaceAddress.getBroadcast() != null) { + Log.d("TAG", "----->ni.getName()= " + ni.getName() + " ip= " + interfaceAddress.getBroadcast().toString().substring(1)); + return interfaceAddress.getBroadcast().toString().substring(1); + } + } + } + } + + for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); + niEnum.hasMoreElements(); ) { + NetworkInterface ni = niEnum.nextElement(); + if (!ni.isLoopback()) { + for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { + if (interfaceAddress.getBroadcast() != null) { + Log.d("TAG", "----->ip= " + interfaceAddress.getBroadcast().toString().substring(1)); + return interfaceAddress.getBroadcast().toString().substring(1); + } + } + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + return "255.255.255.255"; + } + + public static boolean isLocalIpAddress(String ipAddress) { + try { + for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); + niEnum.hasMoreElements(); ) { + NetworkInterface ni = niEnum.nextElement(); + for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { + if (ipAddress.equals(interfaceAddress.getAddress().getHostAddress())) { + return true; + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + return false; + } + + public static String getIP(Context application) { + WifiManager wifiManager = (WifiManager) application.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + if (!wifiManager.isWifiEnabled()) { + try { + for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { + NetworkInterface intf = en.nextElement(); + for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress()) { + return inetAddress.getHostAddress(); + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + } else { + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + int ipAddress = wifiInfo.getIpAddress(); + return intToIp(ipAddress); + } + return null; + } + + + private static String intToIp(int i) { + + return (i & 0xFF) + "." + + ((i >> 8) & 0xFF) + "." + + ((i >> 16) & 0xFF) + "." + + (i >> 24 & 0xFF); + } + + private static String getWifiManagerAddress(Context context) { + try { + if (context != null) { + WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + if (wifiManager != null && wifiManager.isWifiEnabled()) { + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + int ipAddress = wifiInfo.getIpAddress(); + return intToIp(ipAddress); + } + } + } catch (Exception ignored) { + } + return null; + } + + public static String getWifiIpV4Address(Context context) { + try { + //鐩存帴浠巜ifiManager鑾峰彇 + String managerAddress = getWifiManagerAddress(context); + if (!TextUtils.isEmpty(managerAddress)) { + return managerAddress; + } + + Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces(); + while (enumeration.hasMoreElements()) { + NetworkInterface network = enumeration.nextElement(); + if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) { + continue; + } else { + Enumeration<InetAddress> addresses = network.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress address = addresses.nextElement(); + if (!address.isLoopbackAddress() && !address.isAnyLocalAddress() + && !address.isLinkLocalAddress()) { + String hostAddress = address.getHostAddress(); + if (hostAddress != null) { + boolean isIPv4 = hostAddress.indexOf(':') < 0; + if (isIPv4) return hostAddress; + } + + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static String getEth0IpV4Address() { + try { + Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces(); + while (enumeration.hasMoreElements()) { + NetworkInterface network = enumeration.nextElement(); + if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) { + continue; + } else { + Enumeration<InetAddress> addresses = network.getInetAddresses(); + + while (addresses.hasMoreElements()) { + InetAddress address = addresses.nextElement(); + if (!address.isLoopbackAddress() && !address.isAnyLocalAddress() + && !address.isLinkLocalAddress()) { + String hostAddress = address.getHostAddress(); + if (hostAddress != null) { + boolean isIPv4 = hostAddress.indexOf(':') < 0; + if (isIPv4) return hostAddress; + } + + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * @return 鑾峰彇鍏ㄩ儴鏈夋晥ip鍦板潃, 浼樺厛杩斿洖鏈夌嚎ip + */ + public static String getIpV4Address(Context context) { + + try { + String eth0IpV4Address = getEth0IpV4Address(); + if (!TextUtils.isEmpty(eth0IpV4Address)) { + return eth0IpV4Address; + } + String wifiIpV4Address = getWifiIpV4Address(context); + if (!TextUtils.isEmpty(wifiIpV4Address)) { + return wifiIpV4Address; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/LogUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/LogUtils.java new file mode 100644 index 0000000..40ea989 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/LogUtils.java @@ -0,0 +1,63 @@ +package com.hdl.sdk.common.utils; + +import android.util.Log; + +/** + * Created by Tong on 2021/9/23. + */ +public class LogUtils { + + private static final String TAG = "HDLSDK"; + + private static boolean isEnabled = true; + + public static boolean isEnabled() { + return isEnabled; + } + + public static void setEnabled(boolean enabled) { + isEnabled = enabled; + } + + public static void d(String tag, String msg) { + if (tag != null && msg != null && isEnabled) { + Log.d(TAG, tag + "-- " + msg); + } + } + + public static void e(String tag, String msg) { + if (tag != null && msg != null && isEnabled) { + Log.e(TAG, tag + "-- " + msg); + } + } + + public static void w(String tag, String msg) { + if (tag != null && msg != null && isEnabled) { + Log.w(TAG, tag + "-- " + msg); + } + } + + public static void v(String tag, String msg) { + if (tag != null && msg != null && isEnabled) { + Log.v(TAG, tag + "-- " + msg); + } + } + + public static void i(String tag, String msg) { + if (tag != null && msg != null && isEnabled) { + Log.i(TAG, tag + "-- " + msg); + } + } + + public static void i(String msg) { + if (msg != null && isEnabled) { + Log.i(TAG, msg); + } + } + + public static void e(String msg) { + if (msg != null && isEnabled) { + Log.e(TAG, msg); + } + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/SPUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/SPUtils.java new file mode 100644 index 0000000..60f6c5f --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/SPUtils.java @@ -0,0 +1,203 @@ +package com.hdl.sdk.common.utils; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Base64; + + +import com.hdl.sdk.common.HDLSdk; + + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +/** + * Created by Tong on 2021/9/28. + */ +public class SPUtils { + private static final String APP_PREFERENCES_KEY = "profile"; + private static final SharedPreferences PREFERENCES = + HDLSdk.getInstance().getContext().getApplicationContext().getSharedPreferences(APP_PREFERENCES_KEY, Context.MODE_PRIVATE); + + private static SharedPreferences getAppPreference() { + return PREFERENCES; + } + + + //======閫氱敤瀛樺偍======== + public static void put(final String key, final String value) { + getAppPreference().edit().putString(key, value).apply(); + } + + + public static String getString(final String key) { + return getString(key, ""); + } + + + public static String getString(final String key, final String defaultValue) { + return getAppPreference().getString(key, defaultValue); + } + + + public static void put(final String key, final int value) { + put(key, value, false); + } + + + public static void put(final String key, final int value, final boolean isCommit) { + getAppPreference().edit().putInt(key, value).apply(); + } + + + public static int getInt(final String key) { + return getInt(key, -1); + } + + + public static int getInt(final String key, final int defaultValue) { + return getAppPreference().getInt(key, defaultValue); + } + + + public static void put(final String key, final long value) { + getAppPreference().edit().putLong(key, value).apply(); + } + + + public static long getLong(final String key) { + return getLong(key, -1L); + } + + + public static long getLong(final String key, final long defaultValue) { + return getAppPreference().getLong(key, defaultValue); + } + + + public static void put(final String key, final float value) { + getAppPreference().edit().putFloat(key, value).apply(); + } + + + public static float getFloat(final String key) { + return getFloat(key, -1f); + } + + + public static float getFloat(final String key, final float defaultValue) { + return getAppPreference().getFloat(key, defaultValue); + } + + + public static void put(final String key, final boolean value) { + getAppPreference().edit().putBoolean(key, value).apply(); + } + + + public static boolean getBoolean(final String key) { + return getBoolean(key, false); + } + + + public static boolean getBoolean(final String key, final boolean defaultValue) { + return getAppPreference().getBoolean(key, defaultValue); + } + + + public static void put(final String key, + final Set<String> value + ) { + + getAppPreference().edit().putStringSet(key, value).apply(); + + } + + + public static Set<String> getStringSet(final String key) { + return getStringSet(key, Collections.<String>emptySet()); + } + + + public static Set<String> getStringSet(final String key, + final Set<String> defaultValue) { + return getAppPreference().getStringSet(key, defaultValue); + } + + + public static Map<String, ?> getAll() { + return getAppPreference().getAll(); + } + + + public static boolean contains(final String key) { + return getAppPreference().contains(key); + } + + + public static void remove(final String key) { + getAppPreference().edit().remove(key).apply(); + } + + public static void clear() { + getAppPreference() + .edit() + .clear() + .apply(); + } + + private static String Object2String(Object object) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = null; + try { + objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(object); + String string = new String(Base64.encode(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)); + objectOutputStream.close(); + return string; + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + private static Object String2Object(String objectString) { + byte[] mobileBytes = Base64.decode(objectString.getBytes(), Base64.DEFAULT); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(mobileBytes); + ObjectInputStream objectInputStream = null; + try { + objectInputStream = new ObjectInputStream(byteArrayInputStream); + Object object = objectInputStream.readObject(); + objectInputStream.close(); + return object; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void saveSerializableEntity(String key, Object saveObject) { + SharedPreferences.Editor editor = getAppPreference().edit(); + String string = Object2String(saveObject); + editor.putString(key, string); + editor.commit(); + } + + public static Object getSerializableEntity(String key) { + String string = getAppPreference().getString(key, null); + if (string != null) { + Object object = String2Object(string); + return object; + } else { + return null; + } + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java new file mode 100644 index 0000000..b7192b0 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/ThreadToolUtils.java @@ -0,0 +1,73 @@ +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; + +/** + * Created by Tong on 2021/9/15. + */ +public class ThreadToolUtils { + + 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(); + + public static ThreadToolUtils getInstance() { + return instance; + } + + + /** + * 绾跨▼鏁伴噺鍥哄畾鐨勭嚎绋嬫睜 + */ + public ExecutorService newFixedThreadPool(int size) { + if (size == 0 || coreSize < size) { + return Executors.newFixedThreadPool(coreSize); + } + return Executors.newFixedThreadPool(size); + } + + /** + * 瀹氭椂浠诲姟绾跨▼姹� + */ + public ScheduledExecutorService newScheduledThreadPool(int size) { + if (size == 0 || coreSize < size) { + return Executors.newScheduledThreadPool(coreSize); + } + return Executors.newScheduledThreadPool(size); + } + + /** + * 鍗曚竴绾跨▼ + */ + public ExecutorService newSingleThreadPool() { + return Executors.newSingleThreadExecutor(); + } + + + public ExecutorService newCachedThreadPool() { + return Executors.newCachedThreadPool(); + } + + /** + * 鍒囨崲鍥炰富绾跨▼ + */ + public void runOnUiThread(Runnable run) { + uiHandler.post(run); + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/GsonConvert.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/GsonConvert.java new file mode 100644 index 0000000..41115ed --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/GsonConvert.java @@ -0,0 +1,55 @@ +package com.hdl.sdk.common.utils.gson; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; + +/** + * Created by Tong on 2021/9/8. + */ +public class GsonConvert { + + private static Gson gson = null; + + public static Gson getGson() { + if (gson == null) { + synchronized (GsonConvert.class) { + if (gson == null) { + gson = new GsonBuilder() + .setPrettyPrinting() + .disableHtmlEscaping() + .registerTypeAdapter(String.class, new StringTypeAdapter()) + .create(); + } + } + } + return gson; + } + + private static class StringTypeAdapter implements JsonSerializer<String>, JsonDeserializer<String> { + @Override + public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + if (json instanceof JsonPrimitive) { + return json.getAsString(); + } else { + return json.toString(); + } + } + + @Override + public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java new file mode 100644 index 0000000..ebdac92 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/gson/ParameterizedTypeImpl.java @@ -0,0 +1,43 @@ +package com.hdl.sdk.common.utils.gson; + + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * Created by Tong on 2021/9/17. + */ +public class ParameterizedTypeImpl implements ParameterizedType { + + private final Type[] actualTypeArguments; + private final Type rawType; + private final Type ownerType; + + public ParameterizedTypeImpl(Type rawType, Type[] actualTypeArguments, Type ownerType) { + this.ownerType = ownerType; + this.rawType = rawType; + this.actualTypeArguments = actualTypeArguments; + } + + public static Type getType(Type rawType, Type[] actualTypeArguments) { + return new ParameterizedTypeImpl(rawType, actualTypeArguments, null); + } + + + @Override + public Type[] getActualTypeArguments() { + return actualTypeArguments; + } + + + @Override + public Type getRawType() { + return rawType; + } + + + @Override + public Type getOwnerType() { + return ownerType; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java index e5e993b..9ee990e 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java @@ -1,10 +1,22 @@ package com.hdl.sdk.connect; +import android.content.Context; + +import com.hdl.hdlhttp.HxHttpConfig; +import com.hdl.sdk.common.event.DeleteNetworkListener; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; +import com.hdl.sdk.connect.bean.request.DeviceAuthRequest; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; +import com.hdl.sdk.connect.cloud.CallBackListener; +import com.hdl.sdk.connect.cloud.CheckAppVersionListener; +import com.hdl.sdk.connect.cloud.HdlCloudApi; +import com.hdl.sdk.connect.cloud.HdlCloudController; +import com.hdl.sdk.connect.cloud.interceptor.EncryptInterceptor; +import com.hdl.sdk.connect.cloud.interceptor.SmartHeaderInterceptor; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; @@ -15,6 +27,9 @@ import java.util.List; import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.disposables.Disposable; +import okhttp3.logging.HttpLoggingInterceptor; + /** * Created by jlchen on 11/15/21. * @@ -24,13 +39,17 @@ /** * instance */ - private static final HDLLink instance=new HDLLink(); + private static final HDLLink instance = new HDLLink(); + + private String appKey, appSecret; + public DeleteNetworkListener listener; + /** * getInstance * * @return HDLLink */ - public static HDLLink getInstance() { + public static HDLLink getInstance() { // if (instance == null) { // synchronized (HDLLink.class) { // if (instance == null) { @@ -41,30 +60,63 @@ return instance; } + public String getAppKey() { + return appKey; + } + + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + /** * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * * @param listener */ - public synchronized void registerAllTopicsListener(EventListener listener){ + public synchronized void registerAllTopicsListener(EventListener listener) { EventDispatcher.getInstance().registerAllTopicsListener(listener); } + /** * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉 + * * @param listener */ public synchronized void removeAllTopicsListener(EventListener listener) { - if(listener == null) return; + if (listener == null) return; EventDispatcher.getInstance().removeAllTopicsListener(listener); + } + + /** + * 娉ㄥ唽閫�缃戜富棰樼殑鐩戝惉 + * + * @param listener + */ + public synchronized void setDeleteNetworkListener(DeleteNetworkListener listener) { + this.listener = listener; } /***********************涓夋柟璁惧鍜岀綉鍏抽�氫俊涔嬪墠鐨勮璇佹祦绋�****************************/ /** * 妫�娴嬫槸鍚﹀凡缁忚璇佽繃 * 璁よ瘉閫氳繃鎵嶈兘杩涜璁惧鎺у埗 + * * @return */ - public boolean checkIfCertified(){ + public boolean checkIfCertified() { return HDLLinkConfig.getInstance().checkIfCertified(); + } + + public void selectNetwork(String networkName) { + HDLLinkConfig.getInstance().setNetworkName(networkName); } /** @@ -75,7 +127,7 @@ */ public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) { LogUtils.i("鍙戦�佽璇佽姹�"); - HDLAuthSocket.getInstance().startAuthenticateRequest(request,callBack); + HDLAuthSocket.getInstance().startAuthenticateRequest(request, callBack); } /** @@ -89,26 +141,90 @@ HDLAuthSocket.getInstance().sendAuthenticateRequest(ip, request, callBack); } - // /** -// * 寮�濮嬫悳绱㈡墍鏈夌綉鍏筹紝鏈夌綉鍏冲洖澶嶅氨鍥炶皟锛屼笂灞傝嚜宸卞仛鍘婚噸鍒ゆ柇 -// * -// * @param callBack 鍥炶皟 -// */ -// public void startSearchAllGateway(HDLAuthSocket.SearchGatewayCallBack callBack) { -// -// } -// -// /** -// * 鏆傚仠鎼滅储缃戝叧 -// */ -// public void endSearchAllGateway() { -// -// } + /** + * 鍏ョ綉璁よ瘉缁撴灉鍙嶉 + * + * @param mac mac + * @param result 缁撴灉0/-1 + * @param message 璁よ瘉淇℃伅 + * @param auth_code 浜戠璁よ瘉code + * @param callBack 缁撴灉鍥炶皟 + */ + public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) { + HDLSocket.getInstance().UploadDeviceAuth(mac, result, message, auth_code, callBack); + } + + /** + * 鐢宠璁惧瀵嗛挜(鏍规嵁璁惧MAC) + * + * @param supplier 鍘傚晢 + * @param mac 璁惧mac + * @param spk 璁惧spk + * @param callBack 缁撴灉鍥炶皟 + */ + public void applyDeviceSecret(Context context, String appKey, String appSecret, String supplier, String mac, String spk, CallBackListener callBack) { + LogUtils.i("鐢宠璁惧瀵嗛挜"); + HxHttpConfig.getInstance().init(context, HdlCloudApi.BASE_CHINA_URL) + .addInterceptor( + new EncryptInterceptor(), + new SmartHeaderInterceptor()); + this.appKey = appKey; + this.appSecret = appSecret; + + HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); + httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY); + + HxHttpConfig.getInstance() + //.addInterceptor(new HttpCacheInterceptor()) + .addInterceptor(httpLoggingInterceptor).ignoreSSL(); + + HdlCloudController.applyDeviceSecret(supplier, mac, spk, callBack); + } + + /** + * 妫�娴嬫洿鏂� + * + * @param appKey appKey + * @param appSecret appSecret + * @param versionCode 褰撳墠鐗堟湰 + * @param appCode appCode + * @param listener 缁撴灉鍥炶皟 + */ + public void checkAppVersion(Context context, String appKey, String appSecret, String versionCode, String appCode, CheckAppVersionListener listener) { + LogUtils.i("妫�娴嬫洿鏂�"); + HxHttpConfig.getInstance().init(context, HdlCloudApi.BASE_CHINA_URL) + .addInterceptor( + new EncryptInterceptor(), + new SmartHeaderInterceptor()); + this.appKey = appKey; + this.appSecret = appSecret; + + HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); + httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY); + + HxHttpConfig.getInstance() + //.addInterceptor(new HttpCacheInterceptor()) + .addInterceptor(httpLoggingInterceptor).ignoreSSL(); + + HdlCloudController.checkAppVersion(versionCode, appCode, listener); + } + + /** + * 閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧 + * + * @param oid 浠庣綉鍏筹紙璁惧锛塷id + * @param isForce 鏄惁寮哄埗閫�缃� + * @param callBack 缁撴灉鍥炶皟 + */ + public void deleteNetwork(String oid, boolean isForce, HDLLinkCallBack callBack) { + HDLSocket.getInstance().deleteNetwork(oid, isForce, callBack); + } /***********************涓夋柟璁惧璇峰厛璁よ瘉鎴愬姛 鍐嶈皟鐢ㄤ笅闈㈢殑鎺ュ彛鍜岀綉鍏抽�氫俊****************************/ /** * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 - * @param callBack 鍥炶皟 + * + * @param callBack 鍥炶皟 */ public void searchGatewayMulticast(HDLAuthSocket.SearchGatewayCallBack callBack) { HDLAuthSocket.getInstance().searchGatewayMulticast(callBack); @@ -116,7 +232,8 @@ /** * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 - * @param callBack 鍥炶皟 + * + * @param callBack 鍥炶皟 */ public void searchGatewayBroadcast(HDLAuthSocket.SearchGatewayCallBack callBack) { HDLAuthSocket.getInstance().searchGatewayBroadcast(callBack); @@ -148,7 +265,8 @@ /** * 璁惧鎺у埗 - * @param request 鎺у埗鐘舵�佸弬鏁� + * + * @param request 鎺у埗鐘舵�佸弬鏁� * @param callBack 缁撴灉鍥炶皟 */ public void propertyDown(List<DeviceControlRequest> request, HDLLinkCallBack callBack) { @@ -157,7 +275,8 @@ /** * 璇诲彇鐘舵�� - * @param sids 璇锋眰鍙傛暟 鎸囧畾璇诲彇鐨勮澶噑id鍒楄〃 + * + * @param sids 璇锋眰鍙傛暟 鎸囧畾璇诲彇鐨勮澶噑id鍒楄〃 * @param callBack 鍥炶皟 */ public void propertyRead(List<String> sids, HDLLinkCallBack callBack) { @@ -172,8 +291,19 @@ } /** + * 鍦烘櫙璇︽儏 + * + * @param sids 鍦烘櫙sid鍒楄〃 + * @param callBack 鍥炶皟 + */ + public void getScene(List<String> sids, HDLLinkCallBack callBack) { + HDLSocket.getInstance().getScene(sids, callBack); + } + + /** * 鍦烘櫙鎺у埗 - * @param sids 鍦烘櫙sid鍒楄〃 + * + * @param sids 鍦烘櫙sid鍒楄〃 * @param callBack 鍥炶皟 */ public void controlScene(List<String> sids, HDLLinkCallBack callBack) { @@ -181,25 +311,37 @@ } /** + * 涓婃姤oid鍒楄〃 + * + * @param request 璁惧淇℃伅 + * @param callBack 鍥炶皟 + */ + public void UploadOidList(ListUploadRequest request, HDLLinkCallBack callBack) { + HDLSocket.getInstance().UploadOidList(request, callBack); + } + + /** * 閫氱敤UDP鍙戦�佹寚浠� * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆� - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr body鍐呭 + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr body鍐呭 * @param callBack 鍥炶皟 */ public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { - HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,false, callBack); + HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false, callBack); } /** * 閫氱敤骞挎挱UDP鍙戦�佹寚浠� * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆� - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr body鍐呭 + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr body鍐呭 * @param callBack 鍥炶皟 */ public void udpBroadcastSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { - HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,true, callBack); + HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true, callBack); } /** @@ -218,28 +360,28 @@ /** * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� */ public void udpSendMsg(String topic, String bodyStr) { - HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,false); + HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false); } /** * 閫氱敤骞挎挱鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� */ public void udpBroadcastSendMsg(String topic, String bodyStr) { - HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr,true); + HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true); } /** * 閫氱敤TCP鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� */ public void tcpSendMsg(String topic, String bodyStr) { HDLAuthSocket.getInstance();//閫氳繃杩欎釜鍙互鍏堝垵濮嬪寲UDP鐩戝惉浜嬩欢 diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java index 9a9b5ae..8184536 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java @@ -1,8 +1,8 @@ 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.connect.config.HDLLinkConfig; @@ -56,7 +56,6 @@ this.length = length; } - @NonNull @Override public String toString() { return "Topic:" + diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java index 8364f80..65677eb 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkResponse.java @@ -1,8 +1,8 @@ package com.hdl.sdk.connect.bean; + import android.text.TextUtils; -import androidx.annotation.NonNull; import com.hdl.sdk.common.utils.gson.GsonConvert; @@ -57,7 +57,7 @@ this.length = length; } - @NonNull + @Override public String toString() { return GsonConvert.getGson().toJson(this); diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LoginRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LoginRequest.java new file mode 100644 index 0000000..394ad89 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LoginRequest.java @@ -0,0 +1,30 @@ +package com.hdl.sdk.connect.bean; + +import java.io.Serializable; + +/** + * Created by Tong on 2022/09/23. + */ + +public class LoginRequest implements Serializable { + + + private String clientType; + private String version; + + public String getClientType() { + return clientType; + } + + public void setClientType(String clientType) { + this.clientType = clientType; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java index e7ba0f3..6aac1aa 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AuthenticateRequest.java @@ -1,5 +1,7 @@ package com.hdl.sdk.connect.bean.request; +import com.hdl.sdk.common.utils.SPUtils; + import java.io.Serializable; /** @@ -15,17 +17,37 @@ private AuthenticateDeviceInfoBean objects;//褰撳墠璁惧鍩烘湰淇℃伅 private AuthBean auth;//璁よ瘉淇℃伅 - public String getID() { return id; } - public void setID(String value) { this.id = value; } + public String getID() { + return id; + } - public String getTimeStamp() { return time_stamp; } - public void setTimeStamp(String value) { this.time_stamp = value; } + public void setID(String value) { + this.id = value; + } - public AuthenticateDeviceInfoBean getObjects() { return objects; } - public void setObjects(AuthenticateDeviceInfoBean value) { this.objects = value; } + public String getTimeStamp() { + return time_stamp; + } - public AuthBean getAuth() { return auth; } - public void setAuth(AuthBean value) { this.auth = value; } + public void setTimeStamp(String value) { + this.time_stamp = value; + } + + public AuthenticateDeviceInfoBean getObjects() { + return objects; + } + + public void setObjects(AuthenticateDeviceInfoBean value) { + this.objects = value; + } + + public AuthBean getAuth() { + return auth; + } + + public void setAuth(AuthBean value) { + this.auth = value; + } public AuthenticateRequest(String id, String time_stamp, AuthenticateDeviceInfoBean objects, AuthBean auth) { this.id = id; @@ -53,39 +75,58 @@ /** * MAC key + * * @return */ - public String getMACKey() { return mac_key; } + public String getMACKey() { + return mac_key; + } /** * MACkey + * * @param value */ - public void setMACKey(String value) { this.mac_key = value; } + public void setMACKey(String value) { + this.mac_key = value; + SPUtils.put("auth_mackey_key", mac_key); + } /** * SPK + * * @return */ - public String getSpk() { return spk; } + public String getSpk() { + return spk; + } /** * SPK + * * @param value */ - public void setSpk(String value) { this.spk = value; } + public void setSpk(String value) { + this.spk = value; + } - public RequestBean getRequest() { return request; } - public void setRequest(RequestBean value) { this.request = value; } + public RequestBean getRequest() { + return request; + } + + public void setRequest(RequestBean value) { + this.request = value; + } public AuthBean() { } /** - * 璁よ瘉淇℃伅 + * 璁よ瘉淇℃伅 + * * @param mac_key mac key - * @param spk 浜у搧spk + * @param spk 浜у搧spk * @param request 璇锋眰瀵硅薄 */ public AuthBean(String mac_key, String spk, RequestBean request) { @@ -95,12 +136,17 @@ } } - public static class RequestBean implements Serializable{ + public static class RequestBean implements Serializable { private String mac;//璁惧mac private String supplier;//鍘傚 private String hardware_model;//璁惧鍨嬪彿 private String firmware_version;//绋嬪簭鐗堟湰 - public RequestBean(){}; + + public RequestBean() { + } + + ; + public RequestBean(String mac, String supplier, String hardware_model, String firmware_version) { this.mac = mac; this.supplier = supplier; @@ -110,54 +156,78 @@ /** * 璁惧MAC + * * @return */ - public String getMAC() { return mac; } + public String getMAC() { + return mac; + } /** * 璁惧MAC + * * @param value */ - public void setMAC(String value) { this.mac = value; } + public void setMAC(String value) { + this.mac = value; + } /** * 鍘傚 + * * @return */ - public String getSupplier() { return supplier; } + public String getSupplier() { + return supplier; + } /** * 鍘傚 + * * @param value */ - public void setSupplier(String value) { this.supplier = value; } + public void setSupplier(String value) { + this.supplier = value; + } /** * 纭欢鐗堟湰 + * * @return */ - public String getHardwareModel() { return hardware_model; } + public String getHardwareModel() { + return hardware_model; + } /** * 纭欢鐗堟湰 + * * @param value */ - public void setHardwareModel(String value) { this.hardware_model = value; } + public void setHardwareModel(String value) { + this.hardware_model = value; + } /** * 杞欢鐗堟湰 + * * @return */ - public String getFirmwareVersion() { return firmware_version; } + public String getFirmwareVersion() { + return firmware_version; + } /** * 杞欢鐗堟湰 + * * @param value */ - public void setFirmwareVersion(String value) { this.firmware_version = value; } + public void setFirmwareVersion(String value) { + this.firmware_version = value; + } } - public static class AuthenticateDeviceInfoBean implements Serializable{ + public static class AuthenticateDeviceInfoBean implements Serializable { private String oid;//璁惧鐨凮id private String device_mac;//璁惧鐨凪ac private String device_name;// @@ -173,148 +243,232 @@ private String gateway_type; private String hw_version; private String fw_version; + private String supplier;//鍘傚晢 - public String getOID() { return oid; } + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getOID() { + return oid; + } /** * 璁惧Oid + * * @param value */ - public void setOID(String value) { this.oid = value; } + public void setOID(String value) { + this.oid = value; + } - public String getDeviceMAC() { return device_mac; } + public String getDeviceMAC() { + return device_mac; + } /** * 璁惧Mac + * * @param value */ - public void setDeviceMAC(String value) { this.device_mac = value; } + public void setDeviceMAC(String value) { + this.device_mac = value; + } /** * 璁惧鍚� + * * @return */ - public String getDeviceName() { return device_name; } + public String getDeviceName() { + return device_name; + } /** * 璁惧鍚� + * * @param value */ - public void setDeviceName(String value) { this.device_name = value; } + public void setDeviceName(String value) { + this.device_name = value; + } /** * 璁惧鍨嬪彿 + * * @return */ - public String getDeviceModel() { return device_model; } + public String getDeviceModel() { + return device_model; + } /** * 璁惧鍨嬪彿 + * * @param value */ - public void setDeviceModel(String value) { this.device_model = value; } + public void setDeviceModel(String value) { + this.device_model = value; + } /** * 杩炴帴绫诲瀷锛屾湁绾胯繕鏄棤绾� + * * @return */ - public String getAccessMode() { return access_mode; } + public String getAccessMode() { + return access_mode; + } /** * 杩炴帴绫诲瀷锛屾湁绾胯繕鏄棤绾� + * * @param value */ - public void setAccessMode(String value) { this.access_mode = value; } + public void setAccessMode(String value) { + this.access_mode = value; + } /** * 璁惧sid + * * @return */ - public String getSid() { return sid; } + public String getSid() { + return sid; + } /** * 璁惧sid + * * @param value */ - public void setSid(String value) { this.sid = value; } + public void setSid(String value) { + this.sid = value; + } /** * 璁惧IPMAC + * * @return */ - public String getIPMAC() { return ip_mac; } + public String getIPMAC() { + return ip_mac; + } /** * 璁惧IPMAC + * * @param value */ - public void setIPMAC(String value) { this.ip_mac = value; } + public void setIPMAC(String value) { + this.ip_mac = value; + } /** * 璁惧IP鍦板潃 + * * @return */ - public String getIPAddress() { return ip_address; } + public String getIPAddress() { + return ip_address; + } /** * 璁惧IP鍦板潃 + * * @param value */ - public void setIPAddress(String value) { this.ip_address = value; } + public void setIPAddress(String value) { + this.ip_address = value; + } /** * 瀛愮綉鎺╃爜 + * * @return */ - public String getNetmask() { return netmask; } + public String getNetmask() { + return netmask; + } /** * 瀛愮綉鎺╃爜 + * * @param value */ - public void setNetmask(String value) { this.netmask = value; } + public void setNetmask(String value) { + this.netmask = value; + } /** * 缃戝叧IP + * * @return */ - public String getIPGateway() { return ip_gateway; } + public String getIPGateway() { + return ip_gateway; + } /** * 缃戝叧IP + * * @param value */ - public void setIPGateway(String value) { this.ip_gateway = value; } + public void setIPGateway(String value) { + this.ip_gateway = value; + } /** * DNS1 + * * @return */ - public String getDns1() { return dns1; } + public String getDns1() { + return dns1; + } /** * DNS1 + * * @param value */ - public void setDns1(String value) { this.dns1 = value; } + public void setDns1(String value) { + this.dns1 = value; + } /** * DNS2 + * * @return */ - public String getDns2() { return dns2; } + public String getDns2() { + return dns2; + } /** * DNS2 + * * @param value */ - public void setDns2(String value) { this.dns2 = value; } + public void setDns2(String value) { + this.dns2 = value; + } - public VersionBean[] getVersions() {return null; } - public void setVersions(VersionBean[] value) { } + public VersionBean[] getVersions() { + return null; + } + + public void setVersions(VersionBean[] value) { + } /** * 缃戝叧绫诲瀷 + * * @return */ public String getGateway_type() { @@ -323,6 +477,7 @@ /** * 缃戝叧绫诲瀷 + * * @param gateway_type */ public void setGateway_type(String gateway_type) { @@ -331,6 +486,7 @@ /** * 纭欢鐗堟湰 + * * @return */ public String getHw_version() { @@ -338,7 +494,8 @@ } /** - *纭欢鐗堟湰 + * 纭欢鐗堟湰 + * * @param */ public void setHw_version(String hw_version) { @@ -348,6 +505,7 @@ /** * 鍥轰欢鐗堟湰 + * * @return */ public String getFw_version() { @@ -356,6 +514,7 @@ /** * 鍥轰欢鐗堟湰 + * * @param fw_version */ public void setFw_version(String fw_version) { @@ -363,7 +522,7 @@ } } - public static class VersionBean implements Serializable{ + public static class VersionBean implements Serializable { private String module; private String version; diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java new file mode 100644 index 0000000..57d8946 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/DeviceAuthRequest.java @@ -0,0 +1,48 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by panlili on 2023/1/31 + * description: + */ +public class DeviceAuthRequest { + + private String mac;//mac + private String result;//0涓烘垚鍔燂紝-1涓哄け璐� + private String message;//success + private String auth_code;//浜戠璁よ瘉杩斿洖鐨刢ode + + public String getMac() { + return mac; + } + + public void setMac(String mac) { + this.mac = mac; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getAuth_code() { + return auth_code; + } + + public void setAuth_code(String auth_code) { + this.auth_code = auth_code; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java new file mode 100644 index 0000000..c750cc2 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java @@ -0,0 +1,129 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by panlili on 2023/1/31 + * description: + */ +public class GatewayInfoRequest { + + private String device_model; + private String device_mac;//璁惧鐨凪ac + private String device_name; + private String gateway_type;//杩欓噷濉玸pk + private String access_mode; + private String oid;//璁惧鐨凮id + private String sid;//璁惧鐨剆id + private String supplier;//鍘傚晢 + private String hw_version; + private String fw_version; + private String ip_address; + private String master; + private boolean isLocalEncrypt; + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public String getDevice_name() { + return device_name; + } + + public void setDevice_name(String device_name) { + this.device_name = device_name; + } + + public String getDevice_model() { + return device_model; + } + + public void setDevice_model(String device_model) { + this.device_model = device_model; + } + + public String getDevice_mac() { + return device_mac; + } + + public void setDevice_mac(String device_mac) { + this.device_mac = device_mac; + } + + public String getGateway_type() { + return gateway_type; + } + + public void setGateway_type(String gateway_type) { + this.gateway_type = gateway_type; + } + + public String getAccess_mode() { + return access_mode; + } + + public void setAccess_mode(String access_mode) { + this.access_mode = access_mode; + } + + public String getSid() { + return sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getHw_version() { + return hw_version; + } + + public void setHw_version(String hw_version) { + this.hw_version = hw_version; + } + + public String getFw_version() { + return fw_version; + } + + public void setFw_version(String fw_version) { + this.fw_version = fw_version; + } + + public String getIp_address() { + return ip_address; + } + + public void setIp_address(String ip_address) { + this.ip_address = ip_address; + } + + public String getMaster() { + return master; + } + + public void setMaster(String master) { + this.master = master; + } + + public boolean isLocalEncrypt() { + return isLocalEncrypt; + } + + public void setLocalEncrypt(boolean localEncrypt) { + isLocalEncrypt = localEncrypt; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java new file mode 100644 index 0000000..32b1cd0 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest.java @@ -0,0 +1,20 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; + +/** + * Created by Tong on 2022/09/23. + */ + +public class ListOidRequest implements Serializable { + + private String oid; + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest2.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest2.java new file mode 100644 index 0000000..24aa094 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListOidRequest2.java @@ -0,0 +1,29 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; + +/** + * Created by Tong on 2022/09/23. + */ + +public class ListOidRequest2 implements Serializable { + + private String oid; + private String mac; + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public String getMac() { + return mac; + } + + public void setMac(String mac) { + this.mac = mac; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java new file mode 100644 index 0000000..03e78a2 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java @@ -0,0 +1,127 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by panlili on 2023/1/31 + * description: + */ +public class ListUploadRequest { + + private String oid;//璁惧鐨凮id + private String device_name; + private String device_model; + private String device_mac;//璁惧鐨凪ac + private String addresses;//椹卞姩鐢ㄧ殑绉佹湁鍦板潃锛屽娌℃湁鍒欑┖鐫�灏卞彲浠� + private String driver_code;//椹卞姩鐢ㄧ殑id锛屽娌℃湁鍒欑┖鐫�灏卞彲浠� + private String src;//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK" + private String from;//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 + private List<ImageInfo> image_info; + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public String getDevice_name() { + return device_name; + } + + public void setDevice_name(String device_name) { + this.device_name = device_name; + } + + public String getDevice_model() { + return device_model; + } + + public void setDevice_model(String device_model) { + this.device_model = device_model; + } + + public String getDevice_mac() { + return device_mac; + } + + public void setDevice_mac(String device_mac) { + this.device_mac = device_mac; + } + + public String getAddresses() { + return addresses; + } + + public void setAddresses(String addresses) { + this.addresses = addresses; + } + + public String getDriver_code() { + return driver_code; + } + + public void setDriver_code(String driver_code) { + this.driver_code = driver_code; + } + + public String getSrc() { + return src; + } + + public void setSrc(String src) { + this.src = src; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public List<ImageInfo> getImage_info() { + return image_info; + } + + public void setImage_info(List<ImageInfo> image_info) { + this.image_info = image_info; + } + + public static class ImageInfo implements Serializable { + + //闀滃儚鍙凤紝鐢ㄤ簬鍗囩骇鍖归厤 + private String image_info; + + private String hw_version; + + private String fw_version; + + public String getImage_info() { + return image_info; + } + + public void setImage_info(String image_info) { + this.image_info = image_info; + } + + public String getHw_version() { + return hw_version; + } + + public void setHw_version(String hw_version) { + this.hw_version = hw_version; + } + + public String getFw_version() { + return fw_version; + } + + public void setFw_version(String fw_version) { + this.fw_version = fw_version; + } + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java index e2b8b07..1efcb5d 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java @@ -11,21 +11,35 @@ private String code; private GatewayObjects objects; private Auth auth; + private String ip_address; public String getCode() { return code; } public void setCode(String value) { this.code = value; } public GatewayObjects getObjects() { return objects; } - public void setObjects(GatewayObjects value) { this.objects = value; } + public void setObjects(GatewayObjects value) { + this.objects = value; + } public Auth getAuth() { return auth; } public void setAuth(Auth value) { this.auth = value; } + + public String getIp_address() { + return ip_address; + } + + public void setIp_address(String ip_address) { + this.ip_address = ip_address; + } public class Auth implements Serializable { private String localSecret; public String getLocalSecret() { return localSecret; } - public void setLocalSecret(String value) { this.localSecret = value; } + public void setLocalSecret(String value) { + this.localSecret = value; + } + } public class GatewayObjects implements Serializable { @@ -34,10 +48,14 @@ private String oid; public String getIPAddress() { return ip_address; } - public void setIPAddress(String value) { this.ip_address = value; } + public void setIPAddress(String value) { + this.ip_address = value; + } public String getGatewayID() { return gatewayId; } - public void setGatewayID(String value) { this.gatewayId = value; } + public void setGatewayID(String value) { + this.gatewayId = value; + } public String getOID() { return oid; } public void setOID(String value) { this.oid = value; } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java new file mode 100644 index 0000000..94ecf31 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/BaseLocalCodeResponse.java @@ -0,0 +1,47 @@ +package com.hdl.sdk.connect.bean.response; + +import java.io.Serializable; + +/** + * Created by Tong on 2021/9/29. + */ +public class BaseLocalCodeResponse<T> implements Serializable { + + + private String id; + private String time_stamp; + private String code; + private T objects; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTime_stamp() { + return time_stamp; + } + + public void setTime_stamp(String time_stamp) { + this.time_stamp = time_stamp; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public T getObjects() { + return objects; + } + + public void setObjects(T objects) { + this.objects = objects; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java new file mode 100644 index 0000000..1e9d43c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java @@ -0,0 +1,62 @@ +package com.hdl.sdk.connect.bean.response; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by jlchen on 11/12/21. + * + * @Description : DeviceDeleteResponse + */ +public class DeviceDeleteResponse extends BaseResponse { + private List<GatewayObjects> objects; + + public List<GatewayObjects> getObjects() { + return objects; + } + + public void setObjects(List<GatewayObjects> objects) { + this.objects = objects; + } + + public class GatewayObjects implements Serializable { + private String device_name; + private String oid; + private boolean isSaveOidInfo; + private boolean isDeletOidInfo; + + public String getOID() { + return oid; + } + + public void setOID(String value) { + this.oid = value; + } + + public String getDevice_name() { + return device_name; + } + + public void setDevice_name(String device_name) { + this.device_name = device_name; + } + + public boolean isSaveOidInfo() { + return isSaveOidInfo; + } + + public void setSaveOidInfo(boolean saveOidInfo) { + isSaveOidInfo = saveOidInfo; + } + + public boolean isDeletOidInfo() { + return isDeletOidInfo; + } + + public void setDeletOidInfo(boolean deletOidInfo) { + isDeletOidInfo = deletOidInfo; + } + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java new file mode 100644 index 0000000..a819363 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java @@ -0,0 +1,79 @@ +package com.hdl.sdk.connect.bean.response; + +import java.io.Serializable; + +/** + * Created by jlchen on 11/12/21. + * + * @Description : DeviceInfoResponse + */ +public class DeviceInfoResponse extends BaseResponse { + private GatewayObjects objects; + + public GatewayObjects getObjects() { + return objects; + } + + public void setObjects(GatewayObjects value) { + this.objects = value; + } + + public class GatewayObjects implements Serializable { + private String ip_address; + private String gatewayId; + private String oid; + private String homeId; + private String mac; + private String local_secret; + + public String getIPAddress() { + return ip_address; + } + + public void setIPAddress(String value) { + this.ip_address = value; + } + + public String getGatewayID() { + return gatewayId; + } + + public void setGatewayID(String value) { + this.gatewayId = value; + } + + public String getOID() { + return oid; + } + + public void setOID(String value) { + this.oid = value; + } + + public String getHomeId() { + return homeId; + } + + public void setHomeId(String homeId) { + this.homeId = homeId; + } + + public String getMac() { + return mac; + } + + public void setMac(String mac) { + this.mac = mac; + } + + public String getLocalSecret() { + return local_secret; + } + + public void setLocalSecret(String localSecret) { + local_secret = localSecret; + } + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java index 9e01eba..8478008 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java @@ -18,5 +18,4 @@ public String getHomeID() { return homeId; } public void setHomeID(String value) { this.homeId = value; } - } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/UpdateInfo.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/UpdateInfo.java new file mode 100644 index 0000000..1e94436 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/UpdateInfo.java @@ -0,0 +1,90 @@ +package com.hdl.sdk.connect.bean.response; + +import java.io.Serializable; + +/** + * Created by panlili on 2023/8/30. + */ +public class UpdateInfo implements Serializable { + + private String version; + private String appName; + private String appCode; + //鏄惁寮哄埗鏇存柊 + private Boolean isEnforce; + //绫诲瀷 + private String releaseSystem; + //鏂板寘涓嬭浇璺緞 + private String packageUrl; + //鏇存柊璇存槑 + private String remark; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName; + } + + public String getAppCode() { + return appCode; + } + + public void setAppCode(String appCode) { + this.appCode = appCode; + } + + public Boolean getIsEnforce() { + return isEnforce; + } + + public void setIsEnforce(Boolean isEnforce) { + this.isEnforce = isEnforce; + } + + public String getReleaseSystem() { + return releaseSystem; + } + + public void setReleaseSystem(String releaseSystem) { + this.releaseSystem = releaseSystem; + } + + public String getPackageUrl() { + return packageUrl; + } + + public void setPackageUrl(String packageUrl) { + this.packageUrl = packageUrl; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return "UpdateInfo{" + + "version='" + version + '\'' + + ", appName='" + appName + '\'' + + ", appCode='" + appCode + '\'' + + ", isEnforce=" + isEnforce + + ", releaseSystem='" + releaseSystem + '\'' + + ", packageUrl='" + packageUrl + '\'' + + ", remark='" + remark + '\'' + + '}'; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java new file mode 100644 index 0000000..9573604 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseCallBack.java @@ -0,0 +1,10 @@ +package com.hdl.sdk.connect.cloud; + +/** + * Created by Tong on 2021/11/8. + */ +public interface BaseCallBack { + + void onError(HDLException e); + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java new file mode 100644 index 0000000..b2df913 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/BaseInfo.java @@ -0,0 +1,48 @@ +package com.hdl.sdk.connect.cloud; + + +import java.io.Serializable; + + +/** + * @Author : Zoro. + * @Date : 2019/6/9. + * @Describe : + */ +public class BaseInfo<T> implements Serializable { + + private int code; + private T data; + private String message; + + public BaseInfo(int code, T data) { + this.code = code; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public T getData() { + return data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setData(T data) { + this.data = data; + } + +} + diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java new file mode 100644 index 0000000..76a9346 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CallBackListener.java @@ -0,0 +1,8 @@ +package com.hdl.sdk.connect.cloud; + +/** + * Created by panlili on 2022/5/17. + */ +public interface CallBackListener extends BaseCallBack { + void onSuccess(String message); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CheckAppVersionListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CheckAppVersionListener.java new file mode 100644 index 0000000..7841ca8 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CheckAppVersionListener.java @@ -0,0 +1,11 @@ +package com.hdl.sdk.connect.cloud; + + +import com.hdl.sdk.connect.bean.response.UpdateInfo; + +/** + * Created by panlili on 2023/8/30. + */ +public interface CheckAppVersionListener extends BaseCallBack { + void onSuccess(UpdateInfo info); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java new file mode 100644 index 0000000..516df1d --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/CloudLinkCode.java @@ -0,0 +1,46 @@ +package com.hdl.sdk.connect.cloud; + +/** + * Created by Tong on 2021/11/2. + */ + +public @interface CloudLinkCode { + + //鎴愬姛 + int SUCCEED = 0; + + //绯荤粺绻佸繖 + int SYSTEM_BUSY = 1; + + //绯荤粺缁存姢 2 + + //鏈嶅姟寮傚父 3 + + //绛惧悕閿欒 4 + + //鍙傛暟寮傚父 5 + + //token瓒呮椂 + int TOKEN_TIMEOUT = 10001; + //10002 閲嶆柊鐧诲綍 + int Re_Login = 10002; + //token涓嶅悎娉� + int TOKEN_NOT_STANDARD = 10003; + //缂哄皯token鍙傛暟 + int NO_TOKEN = 10004; + //鐢ㄦ埛鍚嶆垨鑰呭瘑鐮侀敊璇� 10008 + //鐢ㄦ埛宸茶绂佺敤 10009 + //10010 鐢ㄦ埛涓嶅瓨鍦� + //10012 鐢ㄦ埛宸插瓨鍦紝涓嶈兘閲嶅娉ㄥ唽 + //10404 浣忓畢鍞竴鏍囪瘑涓嶅瓨鍦� + //10506 缃戝叧涓嶅瓨鍦� + //10805 璁惧涓嶅瓨鍦� + //12005 搴旂敤涓嶅瓨鍦� + //20000 鎺у埗澶辫触 + //20001 缃戝叧绂荤嚎 + //20002 璁惧绂荤嚎 + //20101 spk涓嶆敮鎸佽鍔熻兘灞炴�� + //20102 spk涓嶆敮鎸佽鍔熻兘灞炴�у�� + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java new file mode 100644 index 0000000..22621cb --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/GsonUtils.java @@ -0,0 +1,247 @@ +package com.hdl.sdk.connect.cloud; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; +import java.lang.reflect.Type; + +/** + * Created by Tong on 2021/11/10. + */ +public class GsonUtils { + + private static Gson gson; + + public static <T> T copy(Object o, Class<T> type) { + return copy(o, TypeToken.get(type)); + } + + public static <T> T copy(Object o, TypeToken<T> type) { + return copy(o, type.getType()); + } + + public static <T> T copy(Object o, Type type) { + try { + Gson gson = getGson(); + return gson.fromJson(gson.toJson(o), type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static <T> T fromJson(String json, Type type) { + try { + Gson gson = getGson(); + return gson.fromJson(json, type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static <T> T fromJson(String json, Class<T> type) { + try { + Gson gson = getGson(); + return gson.fromJson(json, type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static <T> T fromJson(String json) { + try { + Gson gson = getGson(); + return gson.fromJson(json, new TypeToken<T>() { + }.getType()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static String toJson(Object object) { + try { + return getGson().toJson(object); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static Type getType(@NonNull final Type rawType, @NonNull final Type... typeArguments) { + return TypeToken.getParameterized(rawType, typeArguments).getType(); + } + + + public static Gson getGson() { + if (gson == null) { + gson = new GsonBuilder() + .disableHtmlEscaping() + .registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()) + .registerTypeAdapter(String.class, new StringAdapter()) + .registerTypeAdapter(Integer.class, new IntegerDefaultAdapter()) + .registerTypeAdapter(Double.class, new DoubleDefaultAdapter()) + .registerTypeAdapter(Long.class, new LongDefaultAdapter()) + .create(); + } + return gson; + } + + /** + * + * @param o + * @param <T> + * @return + */ + public static <T> JsonArray toJsonArray(Object o) { + try { + return getGson().fromJson(GsonUtils.toJson(o), new TypeToken<JsonArray>() { + }.getType()); + } catch (Exception e) { + return null; + } + } + + private static class StringAdapter implements JsonSerializer<String>, JsonDeserializer<String> { + @Override + public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + if (json instanceof JsonPrimitive) { + return json.getAsString(); + } else { + return json.toString(); + } + } + + @Override + public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + + private static class IntegerDefaultAdapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> { + @Override + public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0; + } + } catch (Exception ignore) { + } + try { + return json.getAsInt(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class DoubleDefaultAdapter implements JsonSerializer<Double>, JsonDeserializer<Double> { + @Override + public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0.00; + } + } catch (Exception ignore) { + } + try { + return json.getAsDouble(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class LongDefaultAdapter implements JsonSerializer<Long>, JsonDeserializer<Long> { + @Override + public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0L; + } + } catch (Exception ignore) { + } + try { + return json.getAsLong(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class NullStringToEmptyAdapterFactory implements TypeAdapterFactory { + + public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { + Class<T> rawType = (Class<T>) type.getRawType(); + if (rawType != String.class) { + return null; + } + return (TypeAdapter<T>) new StringNullAdapter(); + } + } + + public static class StringNullAdapter extends TypeAdapter<String> { + + @Override + public String read(JsonReader reader) throws IOException { + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + return ""; + } + return reader.nextString(); + } + + @Override + public void write(JsonWriter writer, String value) throws IOException { + if (value == null) { + writer.nullValue(); + return; + } + writer.value(value); + } + + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java new file mode 100644 index 0000000..ec6a21a --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLException.java @@ -0,0 +1,114 @@ +package com.hdl.sdk.connect.cloud; + +import android.text.TextUtils; + +import androidx.annotation.IntDef; +import androidx.annotation.Nullable; + +import com.hdl.hdlhttp.callback.HxException; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by Tong on 2021/11/8. + */ +public class HDLException extends RuntimeException { + + private int code; + private String msg; + + @Retention(RetentionPolicy.SOURCE) + @Target({ElementType.FIELD, ElementType.PARAMETER}) + @IntDef({ + ErrorCode.UNKNOWN, + ErrorCode.PARSE_ERROR, + ErrorCode.NETWORK_ERROR, + ErrorCode.HTTP_ERROR, + ErrorCode.SSL_ERROR, + ErrorCode.TIMEOUT_ERROR + }) + public @interface ErrorCode { + //鏈煡閿欒 + int UNKNOWN = -40000; + //瑙f瀽閿欒 + int PARSE_ERROR = -40001; + //缃戠粶閿欒 + int NETWORK_ERROR = -40002; + //鍗忚鍑洪敊 + int HTTP_ERROR = -40003; + //璇佷功鍑洪敊 + int SSL_ERROR = -40004; + //杩炴帴瓒呮椂 + int TIMEOUT_ERROR = -40005; + + } + + private int getHxToErrorCode(@HxException.ErrorCode int hxCode) { + switch (hxCode) { + case HxException.ErrorCode.UNKNOWN: + return ErrorCode.UNKNOWN; + case HxException.ErrorCode.PARSE_ERROR: + return ErrorCode.PARSE_ERROR; + case HxException.ErrorCode.NETWORK_ERROR: + return ErrorCode.NETWORK_ERROR; + case HxException.ErrorCode.HTTP_ERROR: + return ErrorCode.HTTP_ERROR; + case HxException.ErrorCode.SSL_ERROR: + return ErrorCode.SSL_ERROR; + case HxException.ErrorCode.TIMEOUT_ERROR: + return ErrorCode.TIMEOUT_ERROR; + } + return ErrorCode.NETWORK_ERROR; + } + + public HDLException(HxException exception) { + this.code = getHxToErrorCode(exception.getCode()); + this.msg = exception.getMsg(); + } + + + public HDLException(int code, String msg) { + this.code = code; + this.msg = msg; + if (!TextUtils.isEmpty(msg)) { + this.msg = msg; + } else { +// this.msg = HxHttpConfig.getInstance().getString(R.string.network_error); + this.msg = "缃戠粶鍙戠敓寮傚父锛岃绋嶅悗鍐嶈瘯"; + } + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + + @Override + public String toString() { + return "HDLException{" + + "code=" + code + + ", msg='" + msg + '\'' + + '}'; + } + + @Nullable + @Override + public String getMessage() { + return msg; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java new file mode 100644 index 0000000..ee682ce --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HDLResponse.java @@ -0,0 +1,51 @@ +package com.hdl.sdk.connect.cloud; + +import com.hdl.hdlhttp.callback.HxException; +import com.hdl.hdlhttp.response.GsonSubscribe; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + + +/** + * Created by Tong on 2021/11/8. + */ +public abstract class HDLResponse<K> extends GsonSubscribe<BaseInfo<K>> { + + public abstract void onResponse(K response); + + public abstract void onFailure(HDLException e); + + @Override + public void onNext(String s) { + try { + Type type = getClass().getGenericSuperclass(); + if (type instanceof ParameterizedType) { + Type[] types = ((ParameterizedType) type).getActualTypeArguments(); + ParameterizedTypeImpl parameterizedType = new ParameterizedTypeImpl(BaseInfo.class, types, BaseInfo.class); + + BaseInfo<K> data = GsonUtils.fromJson(s,parameterizedType); + onSuccess(data); + } + } catch (Exception e) { + e.printStackTrace(); + this.onError(HxException.handleException(e)); + } + } + + @Override + public final void onSuccess(BaseInfo<K> response) { + if (response.getCode() == CloudLinkCode.SUCCEED) { + onResponse(response.getData()); + } else { + onFailure(new HDLException(response.getCode(), response.getMessage())); + } + } + + @Override + public final void onError(HxException e) { + onFailure(new HDLException(e)); + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java new file mode 100644 index 0000000..5f6256b --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudApi.java @@ -0,0 +1,21 @@ +package com.hdl.sdk.connect.cloud; + +/** + * Created by panlili on 2023/1/30 + * description: + */ +public class HdlCloudApi { + + //姝e紡鐜 + public static final String BASE_CHINA_URL = "https://china-gateway.hdlcontrol.com"; + + //娴嬭瘯鐜 +// public static final String BASE_CHINA_URL = "https://test-gz.hdlcontrol.com"; + + //鐢宠璁惧瀵嗛挜(鏍规嵁璁惧MAC) + public static final String APPLY_DEVICE_SECRET = "/smart-open/third/device/authByMac"; + + //妫�鏌pp鏄惁鏇存柊 + public static final String CHECK_APP_VERSION_URL = "/basis-footstone/app/appVersion/check"; + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java new file mode 100644 index 0000000..8f05dcf --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/HdlCloudController.java @@ -0,0 +1,65 @@ +package com.hdl.sdk.connect.cloud; + +import com.hdl.hdlhttp.HxHttp; +import com.hdl.sdk.connect.bean.response.UpdateInfo; + +import io.reactivex.rxjava3.disposables.Disposable; + +/** + * Created by panlili on 2023/1/30 + * description: + */ +public class HdlCloudController { + + public static Disposable applyDeviceSecret(String supplier, String mac, String spk, CallBackListener callBack) { + return HxHttp.builder() + .url(HdlCloudApi.BASE_CHINA_URL + HdlCloudApi.APPLY_DEVICE_SECRET) + .params("supplier", supplier) + .params("mac", mac) + .params("spk", spk) + .build() + .post() + .subscribeWith(new HDLResponse<String>() { + @Override + public void onResponse(String response) { + if (callBack != null) { + callBack.onSuccess(response); + } + } + + @Override + public void onFailure(HDLException e) { + if (callBack != null) { + callBack.onError(e); + } + } + }); + } + + /** + * 妫�鏌pp鏄惁鏇存柊 + * + * @return + */ + public static Disposable checkAppVersion(String versionCode, String appCode, CheckAppVersionListener listener) { + return HxHttp.builder() + .url(HdlCloudApi.BASE_CHINA_URL + HdlCloudApi.CHECK_APP_VERSION_URL) + .params("version", versionCode) + .params("appCode", appCode) + .params("releaseSystem", "Android") + .build() + .post() + .subscribeWith(new HDLResponse<UpdateInfo>() { + @Override + public void onResponse(UpdateInfo response) { + listener.onSuccess(response); + } + + @Override + public void onFailure(HDLException e) { + listener.onError(e); + } + }); + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java new file mode 100644 index 0000000..88cca98 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/MD5Utils.java @@ -0,0 +1,121 @@ +package com.hdl.sdk.connect.cloud; + +import java.io.File; +import java.io.FileInputStream; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Created by Tong on 2021/11/3. + */ +public final class MD5Utils { + + /** + * MD5杞瓧绗︿覆 + */ + public static String encodeMD5(String s) { + try { + MessageDigest digest = MessageDigest.getInstance("MD5"); + digest.update(s.getBytes("UTF-8")); + byte[] messageDigest = digest.digest(); + return toHexString(messageDigest); + } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { + e.printStackTrace(); + } + return ""; + } + + private static String toHexString(byte[] keyData) { + if (keyData == null) { + return null; + } + int expectedStringLen = keyData.length * 2; + StringBuilder sb = new StringBuilder(expectedStringLen); + for (byte keyDatum : keyData) { + String hexStr = Integer.toString(keyDatum & 0x00FF, 16); + if (hexStr.length() == 1) { + hexStr = "0" + hexStr; + } + sb.append(hexStr); + } + return sb.toString(); + } + + /** + * MD5杞瓧绗︿覆 + * 棰濆鍊� + */ + public static String encodeMD52(String s) { + char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + try { + byte[] btInput = s.getBytes("utf-8"); + MessageDigest digest = MessageDigest.getInstance("MD5"); + digest.update(btInput); + byte[] md = digest.digest(); + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + for (byte byte0 : md) { + str[k++] = hexDigits[byte0 >>> 4 & 0xf]; + str[k++] = hexDigits[byte0 & 0xf]; + } + return new String(str); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * MD5鏂囦欢杞瓧绗︿覆 + */ + public static String encodeMD5(File f) { + if (!f.isFile()) { + return null; + } + MessageDigest digest; + byte[] buffer = new byte[1024]; + int len; + try { + digest = MessageDigest.getInstance("MD5"); + FileInputStream in = new FileInputStream(f); + while ((len = in.read(buffer, 0, 1024)) != -1) { + digest.update(buffer, 0, len); + } + in.close(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + BigInteger bigInt = new BigInteger(1, digest.digest()); + return bigInt.toString(16); + } + + public static String encrypt(String raw) { + String md5Str = raw; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); // 鍒涘缓涓�涓狹D5绠楁硶瀵硅薄 + md.update(raw.getBytes()); // 缁欑畻娉曞璞″姞杞藉緟鍔犲瘑鐨勫師濮嬫暟鎹� + byte[] encryContext = md.digest(); // 璋冪敤digest鏂规硶瀹屾垚鍝堝笇璁$畻 + int i; + StringBuffer buf = new StringBuffer(""); + for (int offset = 0; offset < encryContext.length; offset++) { + i = encryContext[offset]; + if (i < 0) { + i += 256; + } + if (i < 16) { + buf.append("0"); + } + buf.append(Integer.toHexString(i)); // 鎶婂瓧鑺傛暟缁勯�愪綅杞崲涓哄崄鍏繘鍒舵暟 + } + md5Str = buf.toString(); // 鎷艰鍔犲瘑瀛楃涓� + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return md5Str.toUpperCase(); // 杈撳嚭澶у啓鐨勫姞瀵嗕覆 + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java new file mode 100644 index 0000000..e4fe075 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/ParameterizedTypeImpl.java @@ -0,0 +1,43 @@ +package com.hdl.sdk.connect.cloud; + +import java.io.Serializable; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +/** + * Created by Tong on 2021/11/8. + */ +public class ParameterizedTypeImpl implements ParameterizedType, Serializable { + + private final Type[] actualTypeArguments; + private final Type ownerType; + private final Type rawType; + + /** + * @param rawType 鍘熷绫诲瀷 + * @param actualTypeArguments 瀹為檯鐨勬硾鍨嬪弬鏁扮被鍨� + * @param ownerType 鎷ユ湁鑰呯被鍨� + */ + public ParameterizedTypeImpl(Type rawType, Type[] actualTypeArguments, Type ownerType) { + this.actualTypeArguments = actualTypeArguments; + this.ownerType = ownerType; + this.rawType = rawType; + } + + @Override + public Type[] getActualTypeArguments() { + return actualTypeArguments; + } + + @Override + public Type getOwnerType() { + return ownerType; + } + + @Override + public Type getRawType() { + return rawType; + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java new file mode 100644 index 0000000..9a83b75 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/EncryptInterceptor.java @@ -0,0 +1,175 @@ +package com.hdl.sdk.connect.cloud.interceptor; + +import android.net.Uri; +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.cloud.GsonUtils; +import com.hdl.sdk.connect.cloud.MD5Utils; + +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import okhttp3.FormBody; +import okhttp3.Headers; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okio.Buffer; + +/** + * Created by Tong on 2021/11/4. + * 鍔犲瘑骞惰嚜鍔ㄨˉ鍏呭弬鏁�,appKey銆乼imestamp + * 鍙敮鎸佽〃鍗曘�乯son + * 鏈�缁坖son鏂瑰紡鎻愪氦 + */ +public class EncryptInterceptor implements Interceptor { + + + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request request = chain.request(); + Headers headers = request.headers(); + if (!isIgnoreSignHeader(headers)) { + return chain.proceed(encrypt(request)); + } + + return chain.proceed(request); + } + + + /** + * 娣诲姞sign瀛楁 + */ + private Request encrypt(Request request) { + final String timestamp = String.valueOf(System.currentTimeMillis()); + final String appKey = HDLLink.getInstance().getAppKey(); + final String appSecret = HDLLink.getInstance().getAppSecret(); + final JsonObject json = getBodyJson(request); + if (json != null) { + json.addProperty("appKey", appKey); + json.addProperty("timestamp", timestamp); + json.addProperty("sign", getSign(json, appSecret)); + final RequestBody requestBody = RequestBody.create(json.toString(), MediaType.parse("application/json;charset=UTF-8")); + return request.newBuilder().post(requestBody) + .build(); + } + return request; + } + + /** + * 闇�瑕佹寜瀛楁瘝鎺掑簭 + * + * @param json 鎵�鏈夊瓧娈典娇鐢╱rlParameter鎷兼帴锛岄櫎浜哸ppSecret + */ + private String getSign(JsonObject json, String appSecret) { + String builder = jsonToUrlParameter(json) + + appSecret; + return MD5Utils.encodeMD5(builder); + } + + + /** + * 鏄惁蹇界暐鑷畾涔夌殑鍔犲瘑澶� + */ + private boolean isIgnoreSignHeader(Headers headers) { + String signHeader = headers.get(SmartHeader.IGNORE_SIGN_HEADER); + return !TextUtils.isEmpty(signHeader); + } + + private JsonObject getBodyJson(Request request) { + RequestBody body = request.body(); + if (body instanceof FormBody) { + JsonObject object = new JsonObject(); + FormBody formBody = (FormBody) body; + for (int i = 0; i < formBody.size(); i++) { + object.addProperty(formBody.name(i), formBody.value(i)); + } + return object; + } else { + //json鏍煎紡 + try { + String bodyString = getBodyString(request); + if (!TextUtils.isEmpty(bodyString)) { + final JsonElement parseString = JsonParser.parseString(bodyString); + return parseString.getAsJsonObject(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + return null; + } + + private String getBodyString(Request request) { + try { + RequestBody body = request.body(); + if (body != null) { + Buffer buffer = new Buffer(); + body.writeTo(buffer); + Charset charset = Charset.forName("UTF-8"); + MediaType contentType = body.contentType(); + charset = contentType.charset(charset); + return buffer.readString(charset); + } + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + + + + + private String jsonToUrlParameter(JsonObject object) { + final Map<String, String> map = GsonUtils.getGson().fromJson(object, new TypeToken<Map<String, String>>() { + }.getType()); + final Uri.Builder builder = new Uri.Builder(); + List<String> list = new ArrayList<>(map.keySet()); + Collections.sort(list); + for (String key : list) { + String value = map.get(key); + if (valueNeedSign(value)) { + builder.appendQueryParameter(key, value); + } + } + return builder.build().getQuery(); + } + + + /** + * 鍒ゆ柇褰撳墠鍊兼槸鍚﹂渶瑕佸弬涓庣鍚嶏紝淇濇寔璺熶簯绔竴鑷� + * 绌哄瓧绗︿覆涓嶅弬涓� + * 鏁扮粍,闆嗗悎涓嶅弬涓� + * + * @return ture 闇�瑕佸姞瀵� + */ + private static boolean valueNeedSign(String valueStr) { + try { + if (TextUtils.isEmpty(valueStr)) return false; + final char[] strChar = URLDecoder.decode(valueStr, "utf-8") + .substring(0, 1).toCharArray(); + final char firstChar = strChar[0]; + return firstChar != '{' && firstChar != '['; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java new file mode 100644 index 0000000..8c1616b --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeader.java @@ -0,0 +1,16 @@ +package com.hdl.sdk.connect.cloud.interceptor; + +/** + * Created by Tong on 2021/11/8. + * 鎷︽埅鍣ㄦ爣璇� + */ +public class SmartHeader { + + //榛樿鎼哄甫鍔犲瘑銆佽В瀵嗕互鍙婃椂闂存埑锛屼娇鐢�"IGNORE_SIGN_HEADER"鍙互灞忚斀 + public static final String IGNORE_SIGN_HEADER = "IgnoreSignHeader"; + + //鍦ㄥ埛鏂癟oken + public static final String REFRESH_TOKEN_HEADER = "RefreshTokenHeader"; + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java new file mode 100644 index 0000000..9f7107d --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/cloud/interceptor/SmartHeaderInterceptor.java @@ -0,0 +1,27 @@ +package com.hdl.sdk.connect.cloud.interceptor; + +import androidx.annotation.NonNull; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +/** + * Created by Tong on 2021/11/9. + * 鍒犻櫎鑷畾涔夊ご + */ +public class SmartHeaderInterceptor implements Interceptor { + + + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request request = chain.request().newBuilder() + .removeHeader(SmartHeader.IGNORE_SIGN_HEADER) + .removeHeader(SmartHeader.REFRESH_TOKEN_HEADER).build(); + return chain.proceed(request); + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java index bfe3d60..5ccf25d 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java @@ -19,13 +19,17 @@ 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"; + public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key"; private String localSecret;//鏈湴鍔犲瘑瀵嗛挜 private String gatewayId; private String ipAddress; private GatewaySearchBean currentGateway;//褰撳墠缃戝叧 + private String networkName; private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//褰撳墠璁惧鍩烘湰淇℃伅 + private AuthenticateRequest.RequestBean requestBean;//褰撳墠璁惧鍩烘湰淇℃伅 + private AuthenticateRequest.AuthBean authBean;//褰撳墠璁惧璁よ瘉淇℃伅 /** * instance @@ -105,9 +109,10 @@ */ public boolean checkIfCertified() { //localSecret涓嶄负绌哄苟涓旈暱搴︾瓑浜�16 缃戝叧id涓嶈兘涓虹┖ - return !TextUtils.isEmpty(localSecret) - && localSecret.length() == 16 - && !TextUtils.isEmpty(gatewayId); + return !TextUtils.isEmpty(gatewayId); +// return !TextUtils.isEmpty(localSecret) +// && localSecret.length() == 16 +// && !TextUtils.isEmpty(gatewayId); } public void setLocalSecret(String localSecret) { @@ -131,6 +136,14 @@ } public void setIpAddress(String ipAddress){ this.ipAddress = ipAddress; + } + + public String getNetworkName() { + return networkName; + } + + public void setNetworkName(String networkName) { + this.networkName = networkName; } public GatewaySearchBean getCurrentGateway() { @@ -175,10 +188,28 @@ } public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() { - return deviceInfoBean; + AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY); + return infoBean; } public void setDeviceInfoBean(AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean) { this.deviceInfoBean = deviceInfoBean; + SPUtils.saveSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY, deviceInfoBean); + } + + public AuthenticateRequest.RequestBean getRequestBean() { + return requestBean; + } + + public void setRequestBean(AuthenticateRequest.RequestBean requestBean) { + this.requestBean = requestBean; + } + + public AuthenticateRequest.AuthBean getAuthBean() { + return authBean; + } + + public void setAuthBean(AuthenticateRequest.AuthBean authBean) { + this.authBean = authBean; } } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java index edb326e..4e2cbb0 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java @@ -1,25 +1,38 @@ package com.hdl.sdk.connect.protocol; -import android.annotation.TargetApi; import android.os.Build; +import android.text.TextUtils; 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.google.gson.reflect.TypeToken; +import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; +import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.ByteUtils; +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.common.utils.SPUtils; +import com.hdl.sdk.common.utils.gson.GsonConvert; +import com.hdl.sdk.connect.HDLLink; import com.hdl.sdk.connect.bean.LinkResponse; +import com.hdl.sdk.connect.bean.request.AuthenticateRequest; +import com.hdl.sdk.connect.bean.response.DeviceDeleteResponse; +import com.hdl.sdk.connect.bean.response.DeviceInfoResponse; +import com.hdl.sdk.connect.callback.HDLLinkCallBack; +import com.hdl.sdk.connect.config.HDLLinkConfig; +import com.hdl.sdk.connect.socket.HDLAuthSocket; +import com.hdl.sdk.connect.socket.HDLSocket; import com.hdl.sdk.connect.utils.AesUtil; -import com.hdl.sdk.connect.utils.ProtocolParse; import com.hdl.sdk.socket.codec.ByteToMessageDecoder; import java.util.ArrayList; -import java.util.Base64; import java.util.List; + +import android.util.Base64; + +import kotlin.ParameterName; /** * Created by Tong on 2021/9/22. @@ -111,15 +124,16 @@ } list.clear(); - for(int i=0;i<tempList.size();i++){ + for (int i = 0; i < tempList.size(); i++) { list.add(tempList.get(i)); } } } + @RequiresApi(api = Build.VERSION_CODES.O) @Override - protected synchronized LinkResponse decoder(Object msg,String ipaddress) throws Exception { + protected synchronized LinkResponse decoder(Object msg, String ipaddress) throws Exception { if (msg instanceof byte[]) { bytes.addAll(ByteUtils.toByteList((byte[]) msg)); //濡傛灉澶氭潯鍛戒护鎵撳寘鍦ㄤ竴鏉℃暟鎹腑锛岄兘闇�瑕佸鐞嗗畬 @@ -169,7 +183,7 @@ //涔嬪墠鐨勭増鏈繖鍧楁槸鏄庢枃鐨� if (!topic.contains("heartbeat_reply")) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.getEncoder().encodeToString(body)); + LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.encodeToString(body, Base64.NO_WRAP)); else { LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + new String(body, "utf-8")); } @@ -181,77 +195,80 @@ String bodyString = new String(body, "utf-8"); response.setData(bodyString); - LogUtils.i( "鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData()); + LogUtils.i("鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData()); + + String updateLocalSecret = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getGatewayId()); + String deleteNetwork = ""; + if (HDLLinkConfig.getInstance().getDeviceInfoBean() != null) { + deleteNetwork = String.format(TopicConstant.DELETE_NOTIFY, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); + } + + if (response.getTopic().equals("/user/all/custom/gateway/search")) { + HDLAuthSocket.getInstance().UploadGatewayInfo(new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + LogUtils.i("UploadGatewayInfo onSucceed"); + } + + @Override + public void onError(HDLLinkException e) { + LogUtils.i("UploadGatewayInfo onError"); + } + }); + } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) { + try { + DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() { + }.getType()); + + if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) { + byte[] baseBytes = Base64.decode(deviceInfoResponse.getObjects().getLocalSecret(), Base64.NO_WRAP); + String mackey = ""; + if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) { + mackey = SPUtils.getString("auth_mackey_key", ""); + byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16)); + String localSecret = new String(bodyBytes, "utf-8"); + Log.d("panlili", "鏇存柊瀵嗛挜----->localSecret= " + localSecret); + HDLLinkConfig.getInstance().setLocalSecret(localSecret); + } + } + } catch (Exception e) { + LogUtils.i("LinkMessageDecoder.java:getLocalSecret----->e= " + e.getMessage()); + } + } else if (response.getTopic().equals(deleteNetwork)) { + try { + DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceDeleteResponse>() { + }.getType()); + HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + LogUtils.i("deleteNetwork onSucceed"); + if (HDLLink.getInstance().listener != null) { + HDLLink.getInstance().listener.onSuccess(msg); + } + } + + @Override + public void onError(HDLLinkException e) { + LogUtils.i("deleteNetwork onError"); + if (HDLLink.getInstance().listener != null) { + HDLLink.getInstance().listener.onFailure(); + } + } + }); + } catch (Exception e) { + LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage()); + } + } + //闈炴甯告暟鎹紝杩斿洖 - if (!((bodyString.startsWith("{") &&bodyString.endsWith("}")) - || (bodyString.startsWith("[")&&bodyString.endsWith("]")))) { + if (!((bodyString.startsWith("{") && bodyString.endsWith("}")) + || (bodyString.startsWith("[") && bodyString.endsWith("]")))) { continue; } //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆� EventDispatcher.getInstance().post(response.getTopic(), response); } return null; - -// //瑙f瀽娴� -// byte[] data = (byte[]) msg; -// bytes.addAll(ByteUtils.toByteList(data)); -// -// byte[] byteArray = ByteUtils.toByteArray(bytes); -// int headIndex = ByteUtils.getByteIndexOf(byteArray, head); -// if (headIndex > 0) { -// //绉诲姩鍒癶ead 寮�濮嬩綅缃� -// bytes.subList(0, headIndex).clear(); -// byteArray = ByteUtils.toByteArray(bytes); -// } -// -// int bodyIndex = ByteUtils.getByteIndexOf(byteArray, body); -// if (bodyIndex < 0) { -// //澶撮儴鏈幏鍙栧畬鎴� -// return null; -// } -// int bodyStartIndex = bodyIndex + body.length; -// -// //瑙f瀽澶撮儴 -// ProtocolParse parse = new ProtocolParse(byteArray); -// response.setTopic(parse.getTopic()); -// -// int bodyLength = parse.getLength(); -// if (bodyLength > 0) { -// if (byteArray.length >= bodyLength + bodyStartIndex) { -// byte[] body = ByteUtils.getRangeBytes(bytes, bodyStartIndex, bodyStartIndex + bodyLength); -// -// if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) { -// //闇�瑕佽В瀵� -// byte[] bodyBytes = AesUtil.aesDecrypt(body, HDLLinkConfig.getInstance().getLocalSecret()); -//// byte[] bodyBytes = AESUtils.decryptAES(body,AuthenticateConfig.getInstance().getLocalSecret()); -// if (bodyBytes != null) { -// response.setData(new String(bodyBytes, "utf-8")); -//// LogUtils.i("TAG", "瑙e瘑 涓婚锛�"+response.getTopic()+ " body: "+response.getData()); -// } else { -// //瑙e瘑澶辫触锛岃繑鍥炲師鏁版嵁 -// response.setData(new String(body, "utf-8")); -// } -// -// } else { -// response.setData(new String(body, "utf-8")); -// } -// -// if (byteArray.length >= bodyLength + bodyStartIndex) { -// //淇濆瓨浣欑暀 -// byte[] remaining = ByteUtils.getRangeBytes(bytes, bodyStartIndex + bodyLength, byteArray.length); -// bytes.clear(); -// for (byte b : remaining) { -// bytes.add(b); -// } -// } -// //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆� -// EventDispatcher.getInstance().post(response.getTopic(), response); -// return response; -// } -// } else if (bodyLength == 0) { -// //body涓虹┖ -// return response; -// } } return null; diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java index 033c552..595c20b 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java @@ -1,33 +1,38 @@ package com.hdl.sdk.connect.socket; +import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST; + import android.text.TextUtils; +import android.util.Log; import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.common.HDLSdk; +import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.common.exception.HDLLinkCode; 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.ThreadToolUtils; -import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.common.utils.gson.GsonConvert; +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.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.GatewayInfoRequest; import com.hdl.sdk.connect.bean.response.AuthenticateResponse; +import com.hdl.sdk.connect.bean.response.BaseLocalResponse; +import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse; import com.hdl.sdk.connect.callback.BaseCallBack; 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.common.config.TopicConstant; -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.bean.request.AuthenticateRequest; -import com.hdl.sdk.connect.bean.response.BaseLocalResponse; -import com.hdl.sdk.connect.bean.request.DeviceControlRequest; -import com.hdl.sdk.connect.bean.response.GatewaySearchBean; -import com.hdl.sdk.connect.bean.LinkRequest; -import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; import com.hdl.sdk.socket.client.UdpClient; @@ -35,12 +40,9 @@ 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; - -import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST; /** * Created by jlchen on 11/11/21. @@ -68,7 +70,7 @@ /** * instance */ - private static final HDLAuthSocket instance=new HDLAuthSocket(); + private static final HDLAuthSocket instance = new HDLAuthSocket(); private HDLAuthSocket() { initListenerGatewayEvent(); @@ -84,7 +86,7 @@ * * @return HDLAuthSocket */ - public static HDLAuthSocket getInstance() { + public static HDLAuthSocket getInstance() { // if (instance == null) { // synchronized (HDLAuthSocket.class) { // if (instance == null) { @@ -115,12 +117,18 @@ if (udpSocketBoot == null) { udpSocketBoot = UdpClient.init(UDP_PORT, getUdpOptions()); udpSocketBoot.bind(); + + LogUtils.i("鍒濆鍖朣ocket udp"); } } catch (Exception e) { - LogUtils.e("鍒濆鍖朣ocket udp寮傚父"+e.getMessage()); + LogUtils.e("鍒濆鍖朣ocket udp寮傚父" + e.getMessage()); } return udpSocketBoot; + } + + public void init() { + getUdpBoot(); } /** @@ -146,6 +154,7 @@ //绉婚櫎鐩戝惉 EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress()); + HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress()); String ipStr = bean.getIPAddress(); if (!TextUtils.isEmpty(ipStr)) { sendAuthenticateRequest(ipStr, request, callBack); @@ -162,6 +171,64 @@ public void endAuthenticateRequest() { //绉婚櫎鐩戝惉 EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); + } + + /** + * 涓婃姤浠庣綉鍏充俊鎭� + * + * @param callBack 鍥炶皟 + */ + public void UploadGatewayInfo(HDLLinkCallBack callBack) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<GatewayInfoRequest> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + + final GatewayInfoRequest request = new GatewayInfoRequest(); + AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel()); + request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC()); + request.setDevice_name(authenticateDeviceInfoBean.getDeviceName()); + request.setGateway_type(authenticateDeviceInfoBean.getGateway_type()); + request.setAccess_mode(authenticateDeviceInfoBean.getAccessMode()); + request.setOid(authenticateDeviceInfoBean.getOID()); + request.setSid(authenticateDeviceInfoBean.getSid()); + request.setSupplier(authenticateDeviceInfoBean.getSupplier()); + + if (authenticateDeviceInfoBean.getSupplier() == null) { + AuthenticateRequest.RequestBean requestBean = HDLLinkConfig.getInstance().getRequestBean(); + request.setSupplier(requestBean.getSupplier()); + } + + request.setHw_version(authenticateDeviceInfoBean.getHw_version()); + request.setFw_version(HDLSdk.getInstance().getVersion());//sdk鐗堟湰 + request.setIp_address(authenticateDeviceInfoBean.getIPAddress()); + request.setMaster("false"); + request.setLocalEncrypt(false); + + data.setObjects(request); + + String topic = HDLLinkConfig.getInstance().getFullTopic(TopicConstant.GATEWAY_SEARCH_REPLY); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String ip = IpUtils.getBroadcastAddress(); + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("涓婃姤鎴愬姛"); + LogUtils.i("UploadGatewayInfo onSucceed = " + msg); + } + + @Override + public void onFailure() { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UPLOAD_GATEWAYINFO_FAILURE_ERROR)); + LogUtils.i("UploadGatewayInfo onFailure"); + } + }); + } /** @@ -198,25 +265,105 @@ gatewayId = bean.getObjects().getGatewayID(); ipAddress = bean.getObjects().getIPAddress(); } + if (ipAddress == null) { + ipAddress = bean.getIp_address(); + } + HDLLinkConfig.getInstance().setAuthBean(request.getAuth()); + //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� - if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) { + Log.d("panlili", "璁よ瘉鎴愬姛----->localSecret= " + localSecret); + if (TextUtils.isEmpty(localSecret) && TextUtils.isEmpty(gatewayId)) { //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔� callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED)); } else { HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress); + HDLLinkConfig.getInstance().setRequestBean(request.getAuth().getRequest()); callBack.onSuccess("璁よ瘉鎴愬姛"); + +// UploadDeviceAuth(request.getObjects().getDeviceMAC(), "0", "success", bean.getCode(), null); } - } else if (bean.getCode().equals("14013")){ + } else if (bean.getCode().equals("14013")) { //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪 callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_MAC_KEY_ERROR_)); - } else{ + +// UploadDeviceAuth(request.getObjects().getDeviceMAC(), "-1", "fail", bean.getCode(), null); + } else if (bean.getCode().equals("124013")) { + //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪 + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_124013_ERROR)); + + } else if (bean.getCode().equals("124015")) { + //璁よ瘉澶辫触锛岃澶囧巶瀹朵笉鍖归厤 + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_124015_ERROR)); + + } else { //璁よ瘉澶辫触锛岄敊璇爜锛� LogUtils.e("璁よ瘉澶辫触锛岄敊璇爜锛�" + bean.getCode()); callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR)); + +// UploadDeviceAuth(request.getObjects().getDeviceMAC(), "-1", "fail", bean.getCode(), null); } } else { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } + } catch (Exception e) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); + } + } + + @Override + public void onFailure() { + LogUtils.i(TAG, "onFailure: "); + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_TIMEOUT_ERROR)); + } + }); + } + + public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) { + HDLSocket.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + if (callBack != null) { + callBack.onSuccess(msg); + } + LogUtils.i(TAG, "onSuccess: " + msg); + } + + @Override + public void onError(HDLLinkException e) { + if (callBack != null) { + callBack.onError(e); + } + LogUtils.i(TAG, "onError: " + e.getMsg() + " " + e.getCode()); + } + }); + } + + + public void linkBroadcast(String oid, HDLLinkCallBack callBack) { + if (TextUtils.isEmpty(oid)) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + } + + Gson gs = new Gson(); + JsonArray jsonArray = new JsonArray(); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("oid", oid); + jsonArray.add(jsonObject); + String requestStr = gs.toJson(jsonArray); + + String topic = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); + LinkRequest message = new LinkRequest(topic, requestStr); + + String ip = IpUtils.getBroadcastAddress(); + + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + try { + callBack.onSuccess("鏇存柊鎴愬姛"); + LogUtils.i(TAG, "onSucceed: msg= " + msg); } catch (Exception e) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } @@ -360,12 +507,12 @@ * 閫氱敤鍙戦�佹寚浠� * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� * @param broadcast 鏄惁瑕佸箍鎾� - * @param callBack 鍥炶皟 + * @param callBack 鍥炶皟 */ - public void udpSendMsg(String topic, String bodyStr,boolean broadcast, HDLLinkResponseCallBack callBack) { + public void udpSendMsg(String topic, String bodyStr, boolean broadcast, HDLLinkResponseCallBack callBack) { if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { if (callBack != null) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); @@ -382,7 +529,7 @@ LinkRequest message = new LinkRequest(topic, bodyStr); String ip = HDLLinkConfig.getInstance().getIpAddress(); - if(broadcast) { + if (broadcast) { ip = IpUtils.getBroadcastAddress(); } HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { @@ -404,13 +551,13 @@ /** * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� * @param broadcast 鏄惁骞挎挱 */ - public void udpSendMsg(String topic, String bodyStr,boolean broadcast) { + public void udpSendMsg(String topic, String bodyStr, boolean broadcast) { if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { - LogUtils.e( "鍙傛暟涓嶈兘涓虹┖锛屼笉鑳藉彂閫乁DP鏁版嵁"); + LogUtils.e("鍙傛暟涓嶈兘涓虹┖锛屼笉鑳藉彂閫乁DP鏁版嵁"); return; } if (!HDLLinkConfig.getInstance().checkIfCertified()) { @@ -419,7 +566,7 @@ } LinkRequest message = new LinkRequest(topic, bodyStr); String ip = HDLLinkConfig.getInstance().getIpAddress(); - if(broadcast) { + if (broadcast) { ip = IpUtils.getBroadcastAddress(); } HdlSocketHelper.sendUdpOne(getUdpBoot(), ip, UDP_PORT, message); @@ -493,9 +640,10 @@ final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() { }.getType()); GatewaySearchBean searchBean = response.getObjects(); + if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) { searchBean.setIp_address(linkResponse.getSource_ipAddress()); - if (searchBean.getGatewayId().contains(searchGatewayId)&&!TextUtils.isEmpty(searchGatewayId)) { + if (searchBean.getGatewayId().contains(searchGatewayId) && !TextUtils.isEmpty(searchGatewayId)) { removeSearchGatewayEvent();//绉婚櫎鎼滅储缃戝叧鐩戝惉 isSearchGatewaySuccess.set(true);//鎼滅储鎴愬姛鏍囪 searchGatewayCount.set(11);//娆℃暟鏍囪 @@ -508,7 +656,7 @@ } } } catch (Exception e) { - + LogUtils.i("panlili锛�" + e.toString()); } } }; @@ -534,8 +682,9 @@ //涓荤綉鍏冲苟涓旀槸褰撳墠缁戝畾鐨勭綉鍏� if ("true".equals(gateway.getMaster().toLowerCase()) && gateway.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) { HDLLinkConfig.getInstance().setCurrentGateway(gateway);//璁剧疆褰撳墠缃戝叧 - if(!TextUtils.isEmpty( gateway.getIp_address())) { + if (!TextUtils.isEmpty(gateway.getIp_address())) { HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address()); + LogUtils.i("鎺ユ敹鍒扮綉鍏充俊鎭細" + HDLLinkConfig.getInstance().getIpAddress()); } //鏇存柊褰撳墠缃戝叧鐨勪俊鎭� HDLLinkConfig.getInstance().reSaveConfig(); @@ -544,7 +693,7 @@ } } } catch (Exception e) { - + LogUtils.i("panlili锛�" + e.toString()); } } }; @@ -593,7 +742,8 @@ LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�"); //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃� callBackSearchGatewayTimeout(); - }catch (Exception e){} + } catch (Exception e) { + } } } }).start(); diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java index 23f1583..977fa55 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java @@ -1,9 +1,16 @@ package com.hdl.sdk.connect.socket; +import static com.hdl.sdk.connect.config.HDLLinkConfig.AUTHENTICATE_IS_DEVICEINFO_KEY; + +import android.os.Build; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.RequiresApi; + import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.common.HDLSdk; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; @@ -11,20 +18,33 @@ 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.SPUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.LoginRequest; +import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.BroadcastRequest; +import com.hdl.sdk.connect.bean.request.DeviceAuthRequest; +import com.hdl.sdk.connect.bean.request.GatewayInfoRequest; +import com.hdl.sdk.connect.bean.request.ListOidRequest; +import com.hdl.sdk.connect.bean.request.ListOidRequest2; +import com.hdl.sdk.connect.bean.request.ListUploadRequest; +import com.hdl.sdk.connect.bean.response.AuthenticateResponse; +import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest; import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.bean.request.PropertyReadRequest; +import com.hdl.sdk.connect.bean.response.DeviceInfoResponse; 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.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; +import com.hdl.sdk.connect.utils.AesUtil; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.client.IHeartbeat; @@ -34,6 +54,7 @@ import com.hdl.sdk.socket.listener.SendListener; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -59,7 +80,7 @@ statusListener = new ConnectStatusListener() { @Override public void onConnecting() { - broadcastRequest(); + //broadcastRequest(); } @Override @@ -74,43 +95,76 @@ }; } + public boolean isBroadcast = false; + + /** * 骞挎挱鑷韩淇℃伅缁欎富缃戝叧 */ - private void broadcastRequest() { + public void broadcastRequest() { + new Thread(new Runnable() { @Override public void run() { - try { - LogUtils.i("骞挎挱璁惧鏈韩淇℃伅"); + while (true) { + try { + Thread.sleep(1000); +// LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected); + try { + if (!HDLLink.getInstance().checkIfCertified() || (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected)) { + continue; + } + } catch (Exception e) { - String time = String.valueOf(System.currentTimeMillis()); - if (null == HDLLinkConfig.getInstance().getDeviceInfoBean()) { - LogUtils.i("DeviceInfoBean涓虹┖锛岃璁剧疆褰撳墠瀵硅薄"); - return; + } + LogUtils.i("骞挎挱璁惧鏈韩淇℃伅"); + String time = String.valueOf(System.currentTimeMillis()); + if (null == HDLLinkConfig.getInstance().getDeviceInfoBean()) { + LogUtils.i("DeviceInfoBean涓虹┖锛岃璁剧疆褰撳墠瀵硅薄"); + continue; + } + BroadcastRequest request = new BroadcastRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), "200"); + HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true, new HDLLinkResponseCallBack() { + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public void onSuccess(LinkResponse msg) { + String data = msg.getData(); + if (!TextUtils.isEmpty(data)) { + DeviceInfoResponse response = GsonConvert.getGson().fromJson(data, new TypeToken<DeviceInfoResponse>() { + }.getType()); + + if ((response == null) || (response.getObjects() == null) || (response.getObjects().getIPAddress() == null)) + return; + + HDLLinkConfig.getInstance().setIpAddress(response.getObjects().getIPAddress()); + LogUtils.i("---getIpAddress=" + HDLLinkConfig.getInstance().getIpAddress()); + + HDLLinkConfig.getInstance().reSaveConfig(); + } + + isBroadcast = true; + getTcp(); + LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧鎴愬姛锛�"); + } + + @Override + public void onError(HDLLinkException e) { + isBroadcast = false; + LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧澶辫触锛�---onError=" + e.toString()); + } + }); +// HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true); + //HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true); + } catch (Exception e) { + LogUtils.e("骞挎挱璁惧鏈韩淇℃伅澶辫触锛屽け璐ヤ俊鎭細" + e.getMessage()); } - BroadcastRequest request = new BroadcastRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), "200"); - HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true, new HDLLinkResponseCallBack() { - @Override - public void onSuccess(LinkResponse msg) { - LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧鎴愬姛锛�"); - } - - @Override - public void onError(HDLLinkException e) { - LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧澶辫触锛�"); - } - }); - HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true); - HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true); - } catch (Exception e) { - LogUtils.e("骞挎挱璁惧鏈韩淇℃伅澶辫触锛屽け璐ヤ俊鎭細" + e.getMessage()); } + } }).start(); } -// private static class SingletonInstance { + // private static class SingletonInstance { // } private static final HDLSocket instance = new HDLSocket(); @@ -119,8 +173,9 @@ } SocketOptions options; + private SocketOptions getTcpOptions() { - if(null!=options){ + if (null != options) { return options; } options = new SocketOptions(); @@ -423,13 +478,13 @@ throw new RuntimeException("璇锋悳绱㈢綉鍏�"); } //濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲 - 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; } @@ -438,6 +493,10 @@ JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("id", IdUtils.getUUId()); jsonObject.addProperty("time_stamp", time); + + if (HDLLinkConfig.getInstance().getRequestBean() != null) { + jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC()); + } String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); @@ -493,8 +552,56 @@ } /** - * 鍦烘櫙鎺у埗 - * @param sids 鍦烘櫙sid鍒楄〃 + * 鑾峰彇鍦烘櫙鍒楄〃 + */ + public void getScene(List<String> sids, HDLLinkCallBack callBack) { + if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<PropertyReadRequest>> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + + List<PropertyReadRequest> list = new ArrayList<>(); + for (String s : sids) { + list.add(new PropertyReadRequest(s)); + } + data.setObjects(list); + + String topic = String.format(TopicConstant.SCENE_GET, getGatewayId()); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String replyTopic = topic + "_reply"; + try { + sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() { + @Override + public void onSucceed() { + + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR)); + } + } + }); + } catch (Exception e) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR)); + } + } + } else { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR)); + } + } + } + + /** + * 鍦烘櫙鎺у埗 + * + * @param sids 鍦烘櫙sid鍒楄〃 * @param callBack 鍥炶皟 */ public void controlScene(List<String> sids, HDLLinkCallBack callBack) { @@ -535,6 +642,287 @@ } } } else { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } + + /** + * 涓婃姤oid鍒楄〃 + * + * @param request 璁惧淇℃伅 + * @param callBack 鍥炶皟 + */ + public void UploadOidList(ListUploadRequest request, HDLLinkCallBack callBack) { + if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<ListUploadRequest>> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + + List<ListUploadRequest> list = new ArrayList<>(); + list.add(request); + + data.setObjects(list); + + String topic = String.format(TopicConstant.LIST_UPLOAD, getGatewayId()); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String replyTopic = topic + "_reply"; + try { + sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() { + @Override + public void onSucceed() { + + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } catch (Exception e) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } else { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } + + /** + * 涓婃姤鍏ョ綉璁よ瘉缁撴灉 + * + * @param mac mac + * @param result 缁撴灉0/-1 + * @param message 璁よ瘉淇℃伅 + * @param auth_code 浜戠璁よ瘉code + * @param callBack 缁撴灉鍥炶皟 + */ + public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) { + if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<DeviceAuthRequest>> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + + DeviceAuthRequest deviceAuthRequest = new DeviceAuthRequest(); + deviceAuthRequest.setMac(mac); + deviceAuthRequest.setResult(result); + deviceAuthRequest.setMessage(message); + deviceAuthRequest.setAuth_code(auth_code); + + List<DeviceAuthRequest> list = new ArrayList<>(); + list.add(deviceAuthRequest); + + data.setObjects(list); + + String topic = String.format(TopicConstant.DEIVCE_AUTH_RESULT_NOTIFY, getGatewayId()); + LinkRequest linkRequest = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String replyTopic = topic + "_reply"; + try { + sendMsg(linkRequest.getSendBytes(), replyTopic, callBack, new SendListener() { + @Override + public void onSucceed() { + + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } catch (Exception e) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } else { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } + + + /** + * tcp鐧诲綍鏂逛究鑾峰彇鐘舵�� + * + * @param clientType 瀹㈡埛绔被鍨� + * 搴旂敤锛歛pp锛� + * 璋冭瘯杞欢锛歱rogram锛� + * 绗笁鏂癸細third_party锛� + * 缃戝叧锛歡ateway锛� + * 鍏跺畠锛歰ther + * @param version 鍗忚鐗堟湰 + */ + public void tcpLogin(String clientType, String version, HDLLinkCallBack callBack) { + final String msgId = IdUtils.getUUId(); + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<LoginRequest> data = new BaseLocalResponse<>(); + data.setId(msgId); + data.setTime_stamp(time); + + final LoginRequest request = new LoginRequest(); + request.setVersion(version); + request.setClientType(clientType); + + data.setObjects(request); + + String topic = String.format(TopicConstant.GATEWAY_LOGIN, HDLLinkConfig.getInstance().getGatewayId()); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String replyTopic = topic + "_reply"; + try { + sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() { + @Override + public void onSucceed() { + LogUtils.i("tcpLogin onSucceed"); + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } catch (Exception e) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } + + + /** + * 閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧 + * + * @param oid 浠庣綉鍏筹紙璁惧锛塷id + * @param isForce 鏄惁寮哄埗閫�缃� + * @param callBack 缁撴灉鍥炶皟 + */ + public void deleteNetwork(String oid, boolean isForce, HDLLinkCallBack callBack) { + if (TextUtils.isEmpty(oid)) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + } + + final String msgId = IdUtils.getUUId(); + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<ListOidRequest2>> data = new BaseLocalResponse<>(); + data.setId(msgId); + data.setTime_stamp(time); + + final ListOidRequest2 request = new ListOidRequest2(); + request.setOid(oid); + List<ListOidRequest2> list = new ArrayList<>(); + list.add(request); + + data.setObjects(list); + + String topic = String.format(TopicConstant.DELETE_REQUEST, HDLLinkConfig.getInstance().getGatewayId()); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String replyTopic = topic + "_reply"; + + if (isForce) {//寮哄埗閫�缃戯紝涓嶇瓑缃戝叧鍥炲鐩存帴娓呴櫎鏁版嵁 + HDLLinkConfig.getInstance().clearConfig(); + } + + try { + sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() { + @Override + public void onSucceed() { + if (callBack == null) return; + try { + callBack.onSuccess("閫�缃戞垚鍔�"); + HDLLinkConfig.getInstance().clearConfig(); + + } catch (Exception e) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); + } + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } catch (Exception e) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + } + + /** + * 閫氱煡鍒犻櫎骞堕��缃戝瓙璁惧鎷撴墤鍏崇郴 + * + * @param oid 浠庣綉鍏筹紙璁惧锛塷id + * @param callBack 缁撴灉鍥炶皟 + */ + public void deleteNetwork(String oid, HDLLinkCallBack callBack) { + if (TextUtils.isEmpty(oid)) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + } + + final String msgId = IdUtils.getUUId(); + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalCodeResponse<List<ListOidRequest>> data = new BaseLocalCodeResponse<>(); + data.setId(msgId); + data.setTime_stamp(time); + data.setCode("0"); + + final ListOidRequest request = new ListOidRequest(); + request.setOid(oid); + List<ListOidRequest> list = new ArrayList<>(); + list.add(request); + + data.setObjects(list); + + String topic = String.format(TopicConstant.DELETE_NOTIFY_REPLY, HDLLinkConfig.getInstance().getGatewayId()); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + +// String replyTopic = topic + "_reply"; + + try { + sendMsg(message.getSendBytes(), topic, callBack, new SendListener() { + @Override + public void onSucceed() { + if (callBack == null) return; + try { + callBack.onSuccess("閫�缃戞垚鍔�"); + HDLLinkConfig.getInstance().clearConfig(); + + } catch (Exception e) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); + } + } + + @Override + public void onError() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } catch (Exception e) { if (callBack != null) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); } @@ -584,19 +972,19 @@ /** * 閫氱敤TCP鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� * - * @param topic 鍙戦�佹暟鎹� - * @param bodyStr 鍥炲鐨勪富棰� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� */ public void tcpSendMsg(String topic, String bodyStr) { try { if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { - LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖"); + LogUtils.e("tcpSendMsg", "鍙傛暟涓嶈兘涓虹┖"); return; } 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 +995,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); diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/.DS_Store b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/.DS_Store new file mode 100644 index 0000000..7062e40 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/.DS_Store Binary files differ diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketBoot.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketBoot.java new file mode 100644 index 0000000..3a1647c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketBoot.java @@ -0,0 +1,270 @@ +package com.hdl.sdk.socket; + +import android.text.TextUtils; + +import com.hdl.sdk.common.HDLSdk; +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.common.utils.ThreadToolUtils; +import com.hdl.sdk.connect.socket.HDLSocket; +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.client.TcpClient; +import com.hdl.sdk.socket.listener.SendListener; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingDeque; + +/** + * Created by Tong on 2021/9/26. + * Tcp/Udp 鍚姩鍣� + */ +public class SocketBoot { + + private ExecutorService connectThread; + private ExecutorService sendThread; + private ExecutorService receiveThread; + private ExecutorService heartbeatThread; + + private final IClient client; + private IHeartbeat iHeartbeat; + + public void SetHeartbeat(IHeartbeat iHeartbeat) { + this.iHeartbeat = iHeartbeat; + } + + /** + * 褰撳墠鎺ユ敹鍒版暟鎹殑鏃堕棿 + */ + private static long time = System.currentTimeMillis(); + + /** + * tcp鏄惁宸茬粡杩炴帴 + */ + public boolean connected = false; + + public IClient getClient() { + return client; + } + + private final BlockingQueue<SocketRequest> mMessageQueue = new LinkedBlockingDeque<>(); + + private final ConcurrentMap<String, SendListener> sendMap = new ConcurrentHashMap<>(); + + public SocketBoot(IClient client) { + this.client = client; + initConnectThread(); + initReceiveThread(); + initSendThread(); + initHeartbeat(); + } + + /** + * 杩炴帴tcp锛屽唴閮ㄧ淮鎶ゆ帀锛屽彲浠ヤ笉鐢ㄥ紑鏀惧閮紝鏍规嵁杩欎釜涓氬姟鎴戠壒鎬у鐞嗗ソ + */ + private synchronized void connect() { + try { + LogUtils.i("TCP杩炴帴"); + client.onConnectStatus(ConnectStatus.CONNECTING); + Thread.sleep(1000); + client.connect(); + connected = true; + HDLSocket.getInstance().tcpLogin("third_party", HDLSdk.getInstance().getVersion(),null); + LogUtils.i("TCP杩炴帴鎴愬姛"); + client.onConnectStatus(ConnectStatus.CONNECTED); + } catch (Exception e) { + LogUtils.e("杩炴帴寮傚父" + e.getMessage()); + } + } + + + /** + * 鍒濆鍖栧彂閫佺嚎绋嬶紝鍙渶瑕佸垵濮嬪寲涓�娆� + */ + private void initSendThread() { + if (sendThread == null) { + sendThread = ThreadToolUtils.getInstance().newFixedThreadPool(1); + sendThread.execute(new Runnable() { + @Override + public void run() { + while (true) { + try { + if (!connected) { + Thread.sleep(200); + continue; + } + SocketRequest socketRequest = mMessageQueue.take(); +// final String sendStr = new String(socketRequest.getData(), 0, socketRequest.getData().length); +// LogUtils.i("鍙戦�佹暟鎹細" + sendStr); + if (System.currentTimeMillis() - socketRequest.getTime() > 10000) { + continue; + } + final String action = socketRequest.getAction(); + try { + + client.sendMsg(socketRequest.getData()); + if (!TextUtils.isEmpty(action)) { + SendListener sendListener = sendMap.get(action); + if (sendListener != null) { + sendListener.onSucceed(); + } + } + } catch (Exception e) { + HDLSocket.getInstance().isBroadcast=false; + connected = false; + + LogUtils.e("鍙戦�佸け璐�:" + e.getMessage()); + if (!TextUtils.isEmpty(action)) { + SendListener sendListener = sendMap.get(action); + if (sendListener != null) { + sendListener.onError(); + } + } + } + } catch (Exception e) { + + } + } + } + }); + } + } + + /** + * 鍒濆鍖栨帴鏀剁嚎绋嬶紝鍙渶瑕佸垵濮嬪寲涓�娆� + */ + public void initReceiveThread() { + if (receiveThread == null) { + receiveThread = ThreadToolUtils.getInstance().newFixedThreadPool(1); + receiveThread.execute(new Runnable() { + @Override + public void run() { + while (true) { + try { + if (connected) { + //璇诲彇鏁版嵁 + client.onHandleResponse(); + time = System.currentTimeMillis(); + } else { + try { + Thread.sleep(1000); + } catch (Exception ee) { + + } + } + } catch (Exception e) { + HDLSocket.getInstance().isBroadcast= false; + connected = false; + + LogUtils.e("鎺ユ敹鏁版嵁绾跨▼寮傚父" + e.getMessage()); + } + } + } + }); + } + } + + /** + * 鍒濆鍖栭噸鏂拌繛鎺ョ嚎绋� + */ + private void initConnectThread() { + if (connectThread == null) { + connectThread = ThreadToolUtils.getInstance().newFixedThreadPool(1); + //涓�瀹氭椂闂存娴嬩竴娆¤繛鎺ユ儏鍐碉紝娌℃湁杩炴帴灏辨墽琛岃繛鎺ワ紝杩炴帴缁熶竴鐢辫繖閲岀淮鎶� + connectThread.execute(new Runnable() { + @Override + public void run() { + while (true) { + try { +// LogUtils.i("initConnectThread: connected=" + connected + " isBroadcast=" + HDLSocket.getInstance().isBroadcast); + if (!connected && HDLSocket.getInstance().isBroadcast) { + reconect(); + } + Thread.sleep(3 * 1000); + } catch (Exception e) { + LogUtils.e("瀹氭椂杩炴帴澶辫触:" + e.getMessage()); + } + } + } + }); + } + } + + /** + * 鍒濆鍖栭噸鏂板績璺崇嚎绋� + */ + private void initHeartbeat() { + if (heartbeatThread == null) { + heartbeatThread = ThreadToolUtils.getInstance().newFixedThreadPool(1); + heartbeatThread.execute(new Runnable() { + @Override + public void run() { + while (true) { + try { + //10绉� + if (connected && 10 * 1000 < (System.currentTimeMillis() - time)) { + time = System.currentTimeMillis(); + //蹇冭烦妫�娴� + if (iHeartbeat != null) + iHeartbeat.heartbeat(); + } + Thread.sleep(1000); + } catch (Exception e) { + LogUtils.e("瀹氭椂蹇冭烦妫�娴嬬綉鍏冲紓甯革細" + e.getMessage()); + } + } + } + }); + } + } + + + /** + * 閲嶆柊杩炴帴 + */ + private void reconect() { + disconnect(); + connect(); + } + + /** + * 鍙戦�佹棤闇�鍥炶皟 + * + * @param msg 鍙戦�佺殑鏁版嵁 + */ + public void sendMsg(byte[] msg) { + sendMsg(msg, null); + } + + + /** + * @param listener 涓�鑸儏鍐垫棤闇�鐩戝惉 + */ + public void sendMsg(byte[] msg, SendListener listener) { + try { + SocketRequest request = new SocketRequest(msg); + if (listener != null && !TextUtils.isEmpty(request.getAction())) { + sendMap.put(request.getAction(), listener); + } + mMessageQueue.put(request); + } catch (Exception e) { + LogUtils.e("鍙戦�佹暟鎹け璐ワ細" + e.getMessage()); + } + } + + /** + * 鍏抽棴杩炴帴 + */ + private synchronized void disconnect() { + try { + client.disconnect(); + //鏂紑杩炴帴 + client.onConnectStatus(ConnectStatus.DISCONNECT); + } catch (Exception e) { + + } + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketOptions.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketOptions.java new file mode 100644 index 0000000..1e300d5 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketOptions.java @@ -0,0 +1,75 @@ +package com.hdl.sdk.socket; + + +import com.hdl.sdk.socket.codec.IHandleMessage; +import com.hdl.sdk.socket.listener.ConnectStatusListener; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Tong on 2021/9/22. + * socket閰嶇疆 + */ +public class SocketOptions { + + //鍙戦�佺洰鏍囧湴鍧�IP + private String ip=""; + private int port; + + //澶勭悊鏁版嵁 + private IHandleMessage handleMessage; + + //鐩戝惉鐘舵�� + private List<ConnectStatusListener> mConnectStatusListener; + + + public String getIp() { + return ip; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public IHandleMessage getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(IHandleMessage handleMessage) { + this.handleMessage = handleMessage; + } + + public void clearConnectStatusListener() { + if (mConnectStatusListener != null && !mConnectStatusListener.isEmpty()) { + mConnectStatusListener.clear(); + } + } + + public void addConnectStatusListener(ConnectStatusListener connectStatusListener) { + if (mConnectStatusListener == null) { + mConnectStatusListener = new ArrayList<>(); + } + mConnectStatusListener.add(connectStatusListener); + } + + public void removeConnectStatusListener(ConnectStatusListener connectStatusListener) { + if (mConnectStatusListener != null) { + mConnectStatusListener.remove(connectStatusListener); + } + } + + public List<ConnectStatusListener> getConnectStatusListener() { + return mConnectStatusListener; + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketPool.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketPool.java new file mode 100644 index 0000000..cf07185 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketPool.java @@ -0,0 +1,51 @@ +package com.hdl.sdk.socket; + +import com.hdl.sdk.socket.client.IClient; + +import java.net.DatagramSocket; +import java.net.InetSocketAddress; +import java.net.SocketException; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by Tong on 2021/10/19. + * 璁″垝鍙傝�僩eneric-pool銆丆ommons Pool杩涜瀹屽杽 + */ +public class SocketPool { + + private final ConcurrentHashMap<String, IClient> mPool; + private final ConcurrentHashMap<String, DatagramSocket> mUdpClientPool; + + private SocketPool() { + mPool = new ConcurrentHashMap<>(); + mUdpClientPool = new ConcurrentHashMap<>(); + } + + private static final SocketPool instance = new SocketPool(); + + public static SocketPool getInstance() { + return instance; + } + + public void clear() { + mPool.clear(); + mUdpClientPool.clear(); + } + + public synchronized DatagramSocket getUdpSocket(InetSocketAddress address) throws SocketException { + DatagramSocket socket; + final String key = address.toString(); + if (mUdpClientPool.containsKey(key)) { + socket = mUdpClientPool.get(key); + if (socket != null && !socket.isClosed()) { + return socket; + } else { + socket = new DatagramSocket(address); + } + } else { + socket = new DatagramSocket(address); + } + mUdpClientPool.put(address.toString(), socket); + return socket; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketRequest.java new file mode 100644 index 0000000..eaa81fc --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/SocketRequest.java @@ -0,0 +1,41 @@ +package com.hdl.sdk.socket; + +import java.util.UUID; + +/** + * Created by Tong on 2021/9/22. + */ +public class SocketRequest { + + private String action; + + private byte[] data; + + private long time = System.currentTimeMillis(); + + public SocketRequest(byte[] data) { + this.data = data; + + action = UUID.randomUUID().toString(); + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public byte[] getData() { + return data; + } + + public void setData(byte[] data) { + this.data = data; + } + + public long getTime() { + return time; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java new file mode 100644 index 0000000..24f6c5c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java @@ -0,0 +1,24 @@ +package com.hdl.sdk.socket.annotation; + + +/** + * Created by Tong on 2021/9/22. + */ + +public class ConnectStatus { + + /** + * 杩炴帴涓� + */ + public static final int CONNECTING = 0; + + /** + * 杩炴帴鎴愬姛 + */ + public static final int CONNECTED = 1; + + /** + * 杩炴帴鍏抽棴 + */ + public static final int DISCONNECT = 2; +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IClient.java new file mode 100644 index 0000000..8fa126e --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IClient.java @@ -0,0 +1,32 @@ +package com.hdl.sdk.socket.client; + + +import com.hdl.sdk.socket.SocketOptions; + +/** + * Created by Tong on 2021/9/22. + */ +public interface IClient { + + void connect() throws Exception; + + void disconnect(); + + + SocketOptions getOptions(); + + /** + * 鐩戝惉鏁版嵁 + */ + void onHandleResponse() throws Exception; + + /** + * 鍙戦�佹秷鎭� + */ + void sendMsg(byte[] msg) throws Exception; + + /** + * 杩炴帴鐘舵�� + */ + void onConnectStatus(int status); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java new file mode 100644 index 0000000..a86a092 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java @@ -0,0 +1,8 @@ +package com.hdl.sdk.socket.client; + +/** + * Created by hxb on 2022/2/16. + */ +public interface IHeartbeat { + void heartbeat(); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java new file mode 100644 index 0000000..0e6e5d6 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java @@ -0,0 +1,42 @@ +package com.hdl.sdk.socket.client; + +import com.hdl.sdk.socket.SocketOptions; +import com.hdl.sdk.socket.udp.UdpSocketOptions; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; + +/** + * Created by hxb on 2021/12/12. + */ +public interface IUdpClient { + + /** + * 缁戝畾绔彛 + */ + void bind() throws Exception; + + /** + * 鍏抽棴褰撳墠杩炴帴 + * @return + */ + boolean close(); + + + UdpSocketOptions getOptions(); + + /** + * 鐩戝惉鏁版嵁 + */ + void onHandleResponse() throws Exception; + + /** + * 鍙戦�佹暟鎹� + * @param ipAddress 鐩爣IP + * @param port 绔彛 + * @param msg 鍙戦�佹暟鎹� + * @throws Exception + */ + void sendMsg(String ipAddress,int port, byte[] msg) throws Exception; + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/TcpClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/TcpClient.java new file mode 100644 index 0000000..7469cc3 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/TcpClient.java @@ -0,0 +1,199 @@ +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; +import com.hdl.sdk.socket.SocketOptions; +import com.hdl.sdk.socket.annotation.ConnectStatus; +import com.hdl.sdk.socket.codec.IHandleMessage; +import com.hdl.sdk.socket.listener.ConnectStatusListener; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.StandardSocketOptions; +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by Tong on 2021/9/15. + */ +public final class TcpClient implements IClient { + + + private SocketOptions socketOptions; + + private final String ip; + private final int port; + + private Socket mSocket; + + private final static List<TcpClient> tcpClientList = new ArrayList(); + + /** + * 浠庤繛鎺ユ睜涓壘鍑哄綋鍓岻P鍙婄鍙g殑杩炴帴瀹㈡埛绔� + * @param ipAdderss 杩炴帴IP鍦板潃 + * @param port 杩炴帴绔彛 + * @return + */ + public static TcpClient getTcpClientByIP(String ipAdderss,int port) { + for(TcpClient tcpClient:tcpClientList){ + if(tcpClient.ip.equals(ipAdderss)&&tcpClient.port==port) + { + return tcpClient; + } + } + return null; + } + + private byte[] readBuffer = new byte[4*1024]; + + private TcpClient(String ip, int port, SocketOptions socketOptions) { + this.socketOptions = socketOptions; + this.ip = ip; + this.port = port; + socketOptions.setIp(ip); + socketOptions.setPort(port); + } + + public static SocketBoot init(String ip, int port, SocketOptions options) { + return new SocketBoot(new TcpClient(ip, port, options)); + } + + + @Override + public void connect() throws Exception { + + mSocket = getSocket(); +// SocketOptions options = getOptions(); + mSocket.connect(new InetSocketAddress(ip, port), 3 * 1000); + mSocket.setTcpNoDelay(true); + mSocket.setReuseAddress(true); +// mSocket.setKeepAlive(true); + mSocket.setSoTimeout(25 * 1000); + + tcpClientList.add(this); + } + + + + + @Override + public void disconnect() { + if (mSocket != null) { + try { + mSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public synchronized SocketOptions getOptions() { + if (socketOptions == null) { + socketOptions = new SocketOptions(); + } + return socketOptions; + } + + @Override + 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("鎺ユ敹寮傚父锛屾帴鏀舵暟鎹暱搴en="+len); + } + + IHandleMessage handleMessage = getOptions().getHandleMessage(); + if (handleMessage != null) { + byte []bytes = new byte[len]; + System.arraycopy(readBuffer,0,bytes,0,len); + //瀹屾暣鐨勬暟鎹墠鍥炶皟 + handleMessage.read(bytes,ip); + } + } + } + } + + @Override + 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(); + } + } + + + /** + * 澶勭悊杩炴帴鐘舵�� + */ + public void onConnectStatus(int status) { + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + final List<ConnectStatusListener> list = getOptions().getConnectStatusListener(); + if (list != null && !list.isEmpty()) { + for (ConnectStatusListener listener : list) { + switch (status) { + case ConnectStatus + .CONNECTING: + listener.onConnecting(); + break; + case ConnectStatus + .CONNECTED: + listener.onConnected(); + break; + case ConnectStatus + .DISCONNECT: + listener.onConnectFailed(); + break; + } + } + } + } + }); + } + + + private synchronized Socket getSocket() { + return new Socket(); + } + + private InputStream getInputStream() { + if (mSocket != null && mSocket.isConnected() && !mSocket.isClosed()) { + try { + return mSocket.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + + + private OutputStream getOutStream() { + if (mSocket != null && mSocket.isConnected() && !mSocket.isClosed()) { + try { + return mSocket.getOutputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java new file mode 100644 index 0000000..c6a3aff --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java @@ -0,0 +1,176 @@ +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.socket.SocketBoot; +import com.hdl.sdk.socket.SocketOptions; +import com.hdl.sdk.socket.SocketPool; +import com.hdl.sdk.socket.udp.UdpSocketBoot; +import com.hdl.sdk.socket.udp.UdpSocketOptions; +import com.hdl.sdk.socket.codec.IHandleMessage; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.concurrent.atomic.AtomicBoolean; + + +/** + * Created by hxb on 2021/12/12. + */ +public class UdpClient implements IUdpClient { + + /** + * 褰撳墠socket + */ + private DatagramSocket mSocket; + + /** + * 鎺ユ敹鏁版嵁鍖� + */ + private DatagramPacket receivePacket; + + /** + * 缂撳啿鍖哄ぇ灏� + */ + private final int BUFFER = 2 * 1024; + + /** + * 鏈湴鐩戝惉IP鍦板潃 + */ + private String ipAddress; + /** + * 鏈湴鐩戝惉绔彛 + */ + private int port; + + /** + * socket閰嶇疆淇℃伅 + */ + private UdpSocketOptions socketOptions; + + /** + * 鍒濆鍖栧弬鏁� + * @param ipAddress 鏈湴鐩戝惉绔彛 + * @param port 鏈湴鐩戝惉绔彛 + * @param socketOptions + */ + private UdpClient(String ipAddress,int port, UdpSocketOptions socketOptions) { + this.ipAddress = ipAddress; + this.port = port; + this.socketOptions = socketOptions; + byte[] receiveByte = new byte[BUFFER]; + receivePacket = new DatagramPacket(receiveByte, receiveByte.length); + } + + /** + * 鍒濆鍖栧弬鏁� + * @param ipAddress 鏈湴鐩戝惉IP鍦板潃 + * @param port 鏈湴鐩戝惉绔彛 + * @param options + * @return + */ + public static UdpSocketBoot init(String ipAddress, int port, UdpSocketOptions options) { + return new UdpSocketBoot(new UdpClient(ipAddress, port, options)); + } + + /** + * 鍒濆鍖栧弬鏁� + * @param port 鏈湴鐩戝惉绔彛 + * @param options + * @return + */ + public static UdpSocketBoot init(int port, UdpSocketOptions options) { + return init("0.0.0.0", port, options); + } + + + @Override + public void bind() throws Exception { + try { + //宸茬粡缁戝畾杩囧氨涓嶇敤鍐嶇粦瀹� + if (null != mSocket) { + return; + } + if (TextUtils.isEmpty(ipAddress)) { + mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port)); + }else { + mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress,port)); + } + mSocket.setBroadcast(true); +// mSocket.setReuseAddress(true); + + } catch (Exception e) { + LogUtils.e("鍒濆鍖朣ocket 澶辫触锛�" + e.getMessage()); + throw e; + } + } + + @Override + public boolean close() { + try { + mSocket.close(); + } catch (Exception e) { + + } + mSocket = null; + return true; + } + + @Override + public UdpSocketOptions getOptions() { + return this.socketOptions; + } + + @Override + public void onHandleResponse() throws Exception { + if (mSocket == null) { + return; + } + try { + mSocket.receive(receivePacket); + } catch (IOException e) { + e.printStackTrace(); + } + if (receivePacket.getLength() == 0) { + return; + } + //鎺掗櫎鑷繁鍙戝嚭鍘荤殑 + try { + if (IpUtils.isLocalIpAddress(receivePacket.getAddress().getHostAddress())) + return; + } catch (Exception ignored) { + + } + + try { +// LogUtils.i("鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort()); + + IHandleMessage handleMessage = getOptions().getHandleMessage(); + if (handleMessage != null) { + byte[] data = new byte[receivePacket.getLength()]; + System.arraycopy(receivePacket.getData(), 0, data, 0, data.length); + handleMessage.read(data,receivePacket.getAddress().getHostAddress()); + } + + } catch (Exception e) { + + } + } + + + @Override + public void sendMsg(String ipAddress,int port, byte[] msg) throws Exception { + if (msg == null) { + return; + } + final DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, InetAddress.getByName(ipAddress), port); + mSocket.send(sendPacket); + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java new file mode 100644 index 0000000..4bcbe40 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/ByteToMessageDecoder.java @@ -0,0 +1,20 @@ +package com.hdl.sdk.socket.codec; + +/** + * Created by Tong on 2021/9/22. + */ +public abstract class ByteToMessageDecoder<T> implements IHandleFlow<T> { + + protected abstract T decoder(Object msg,String ipaddress) + throws Exception; + + @Override + public final T read(Object data,String ipaddress) throws Exception { + return decoder(data,ipaddress); + } + + @Override + public final byte[] write(byte[] data) { + return data; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java new file mode 100644 index 0000000..39f1f6c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleFlow.java @@ -0,0 +1,12 @@ +package com.hdl.sdk.socket.codec; + +/** + * Created by Tong on 2021/9/23. + */ +public interface IHandleFlow<T> { + + T read(Object data,String ipaddress) throws Exception; + + byte[] write(byte[] data) throws Exception; + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java new file mode 100644 index 0000000..f86f0b1 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IHandleMessage.java @@ -0,0 +1,10 @@ +package com.hdl.sdk.socket.codec; + +/** + * Created by Tong on 2021/9/27. + */ +public interface IHandleMessage { + void read(byte[] data,String ipaddress) throws Exception; + + byte[] write(byte[] data) throws Exception; +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IMessagePipeLine.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IMessagePipeLine.java new file mode 100644 index 0000000..4fdc975 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/IMessagePipeLine.java @@ -0,0 +1,11 @@ +package com.hdl.sdk.socket.codec; + +/** + * Created by Tong on 2021/9/23. + */ +public interface IMessagePipeLine { + + void add(IHandleFlow flow); + + void clear(); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java new file mode 100644 index 0000000..2f874e0 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java @@ -0,0 +1,51 @@ +package com.hdl.sdk.socket.codec; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * Created by Tong on 2021/9/23. + */ +public class MessagePipeLine implements IMessagePipeLine, IHandleMessage { + + public final List<IHandleFlow> queue = new ArrayList<>(); + + @Override + public void add(IHandleFlow flow) { + queue.add(flow); + } + + @Override + public synchronized void clear() { + queue.clear(); + } + + @Override + 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,ipaddress); + try { + out = Objects.requireNonNull(read); + } catch (Exception ignored) { + } + } + } + + @Override + public byte[] write(byte[] data) throws Exception { + byte[] out = data; + for (int i = 0; i < queue.size(); i++) { + IHandleFlow flow = queue.get(i); + byte[] write = flow.write(out); + try { + out = Objects.requireNonNull(write); + } catch (Exception ignored) { + + } + } + return new byte[0]; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java new file mode 100644 index 0000000..515be13 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/codec/MessageToByteEncoder.java @@ -0,0 +1,24 @@ +package com.hdl.sdk.socket.codec; + + +/** + * Created by Tong on 2021/9/22. + */ +public abstract class MessageToByteEncoder implements IHandleFlow { + + + protected abstract byte[] encode(byte[] data) + throws Exception; + + @Override + public final Object read(Object data,String ipaddress) { + return data; + } + + @Override + public byte[] write(byte[] data) throws Exception { + return encode(data); + } + + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/ConnectStatusListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/ConnectStatusListener.java new file mode 100644 index 0000000..6bd77b1 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/ConnectStatusListener.java @@ -0,0 +1,27 @@ +package com.hdl.sdk.socket.listener; + +/** + * Created by Tong on 2021/9/22. + * 杩炴帴鐘舵�� + */ +public interface ConnectStatusListener { + + /** + * 杩炴帴涓� + */ + default void onConnecting() { + } + + /** + * 杩炴帴鎴愬姛 + */ + default void onConnected() { + } + + /** + * 杩炴帴澶辫触 + */ + default void onConnectFailed() { + } + +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/SendListener.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/SendListener.java new file mode 100644 index 0000000..7f2a9ea --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/listener/SendListener.java @@ -0,0 +1,11 @@ +package com.hdl.sdk.socket.listener; + +/** + * Created by Tong on 2021/9/22. + */ +public interface SendListener { + + void onSucceed(); + + void onError(); +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java new file mode 100644 index 0000000..be4e1a4 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java @@ -0,0 +1,124 @@ +package com.hdl.sdk.socket.udp; + +import android.text.TextUtils; + +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.common.utils.ThreadToolUtils; +import com.hdl.sdk.socket.SocketRequest; +import com.hdl.sdk.socket.client.IUdpClient; +import com.hdl.sdk.socket.listener.SendListener; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Created by hxb on 2021/12/12. + */ +public class UdpSocketBoot { + + private final IUdpClient client; + + private final AtomicBoolean isOpenRetry = new AtomicBoolean(false); + + private final AtomicInteger resendCount = new AtomicInteger(0); + + private ExecutorService receiveThread; + + private final ConcurrentMap<String, SendListener> sendMap = new ConcurrentHashMap<>(); + + public UdpSocketBoot(IUdpClient client) { + this.client = client; + } + + /** + * 缁戝畾 socket + * @throws Exception 鍙兘绔彛鍐茬獊 + */ + public void bind() throws Exception { + client.bind(); + initReceiveThread(); + } + + /** + * 鍒濆鍖栨帴鏀剁嚎绋� + */ + private void initReceiveThread() { + if(null!=receiveThread){ + return; + } + receiveThread = ThreadToolUtils.getInstance().newFixedThreadPool(1); + receiveThread.execute(new Runnable() { + @Override + public void run() { + while (true) { + try { + client.onHandleResponse(); + } catch (Exception e) { + LogUtils.i("鎺ユ敹绾跨▼寮傚父锛�"+e.getMessage()); + } + } + } + }); + } + + + /** + * 鍙戦�佹暟鎹� + * @param ipAddress 鐩殑鐨処P鍦板潃 + * @param port 绔彛 + * @param msg 鍙戦�佹暟鎹� + * @param listener 鍙戦�佸洖璋� + */ + public void sendMsg(String ipAddress,int port,byte[] msg, SendListener listener) { + sendMsg(ipAddress,port, msg, true, listener); + } + + /** + * 鍙戦�佹暟鎹� + * @param ipAddress 鐩殑鐨処P鍦板潃 + * @param port 绔彛 + * @param msg 鍙戦�佹暟鎹� + */ + public void sendMsg(String ipAddress,int port,byte[] msg) { + sendMsg(ipAddress,port, msg, true, null); + } + + /** + * 鍙戦�佹暟鎹� + * @param ipAddress 鐩殑IP鍦板潃 + * @param port 绔彛 + * @param msg 鍙戦�佺殑鏁版嵁 + * @param isRefreshRetry 鏄惁瑕侀噸鍙� + * @param listener 鍙戦�佸洖璋� + */ + public void sendMsg(String ipAddress,int port, byte[] msg, boolean isRefreshRetry, SendListener listener) { + if (isRefreshRetry) { + //閲嶇疆杩炴帴娆℃暟 + resendCount.set(0); + } + try { + SocketRequest request = new SocketRequest(msg); + if (listener != null && !TextUtils.isEmpty(request.getAction())) { + sendMap.put(request.getAction(), listener); + } + LogUtils.i("鍙戦�佺洰鏍嘔P鍜岀鍙�", ipAddress + ":" + port); + client.sendMsg(ipAddress, port, msg); + } catch (Exception e) { + LogUtils.i("鍙戦�佸け璐�:" + e.getMessage()); + } + } + + /** + * 鍏抽棴褰撳墠socket + */ + public synchronized void close() { + isOpenRetry.set(false); + sendMap.clear(); + receiveThread.shutdown(); + receiveThread=null; + client.close(); + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketOptions.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketOptions.java new file mode 100644 index 0000000..e61818c --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/udp/UdpSocketOptions.java @@ -0,0 +1,26 @@ +package com.hdl.sdk.socket.udp; + + +import com.hdl.sdk.socket.codec.IHandleMessage; +import com.hdl.sdk.socket.listener.ConnectStatusListener; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by hxb on 2021/12/12. + */ +public class UdpSocketOptions { + + //澶勭悊鏁版嵁 + private IHandleMessage handleMessage; + + public IHandleMessage getHandleMessage() { + return handleMessage; + } + + public void setHandleMessage(IHandleMessage handleMessage) { + this.handleMessage = handleMessage; + } +} diff --git a/HDLSDK/hdl-socket/build.gradle b/HDLSDK/hdl-socket/build.gradle index 5c35438..8d3b834 100644 --- a/HDLSDK/hdl-socket/build.gradle +++ b/HDLSDK/hdl-socket/build.gradle @@ -11,7 +11,6 @@ versionCode 2 versionName "1.0.15" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java index 92f8f84..3f45e3a 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java @@ -1,13 +1,7 @@ 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.ThreadToolUtils; import com.hdl.sdk.socket.annotation.ConnectStatus; @@ -15,15 +9,11 @@ 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.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; 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. @@ -38,18 +28,20 @@ private final IClient client; private IHeartbeat iHeartbeat; - public void SetHeartbeat(IHeartbeat iHeartbeat){ - this.iHeartbeat=iHeartbeat; + + public void SetHeartbeat(IHeartbeat iHeartbeat) { + this.iHeartbeat = iHeartbeat; } + /** * 褰撳墠鎺ユ敹鍒版暟鎹殑鏃堕棿 */ - private static long time=System.currentTimeMillis(); + private static long time = System.currentTimeMillis(); /** * tcp鏄惁宸茬粡杩炴帴 */ - private boolean connected=false; + private boolean connected = false; public IClient getClient() { return client; @@ -57,7 +49,7 @@ private final BlockingQueue<SocketRequest> mMessageQueue = new LinkedBlockingDeque<>(); - private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>(); + private final ConcurrentMap<String, SendListener> sendMap = new ConcurrentHashMap<>(); public SocketBoot(IClient client) { this.client = client; @@ -76,11 +68,11 @@ client.onConnectStatus(ConnectStatus.CONNECTING); Thread.sleep(1000); client.connect(); - connected=true; + connected = true; LogUtils.i("TCP杩炴帴鎴愬姛"); client.onConnectStatus(ConnectStatus.CONNECTED); - }catch(Exception e) { - LogUtils.e("杩炴帴寮傚父"+e.getMessage()); + } catch (Exception e) { + LogUtils.e("杩炴帴寮傚父" + e.getMessage()); } } @@ -96,11 +88,19 @@ public void run() { while (true) { try { + if (!connected) { + Thread.sleep(200); + continue; + } SocketRequest socketRequest = mMessageQueue.take(); // final String sendStr = new String(socketRequest.getData(), 0, socketRequest.getData().length); // LogUtils.i("鍙戦�佹暟鎹細" + sendStr); + if (System.currentTimeMillis() - socketRequest.getTime() > 5000) { + continue; + } final String action = socketRequest.getAction(); try { + client.sendMsg(socketRequest.getData()); if (!TextUtils.isEmpty(action)) { SendListener sendListener = sendMap.get(action); @@ -141,7 +141,7 @@ if (connected) { //璇诲彇鏁版嵁 client.onHandleResponse(); - time= System.currentTimeMillis(); + time = System.currentTimeMillis(); } else { try { Thread.sleep(1000); @@ -174,7 +174,7 @@ if (!connected) { reconect(); } - Thread.sleep(3*1000); + Thread.sleep(3 * 1000); } catch (Exception e) { LogUtils.e("瀹氭椂杩炴帴澶辫触:" + e.getMessage()); } @@ -223,6 +223,7 @@ /** * 鍙戦�佹棤闇�鍥炶皟 + * * @param msg 鍙戦�佺殑鏁版嵁 */ public void sendMsg(byte[] msg) { diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketRequest.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketRequest.java index 924719e..956f8c9 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketRequest.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketRequest.java @@ -11,8 +11,11 @@ private byte[] data; + private long time = System.currentTimeMillis(); + public SocketRequest(byte[] data) { this.data = data; + action = UUID.randomUUID().toString(); } @@ -31,4 +34,8 @@ public void setData(byte[] data) { this.data = data; } + + public long getTime() { + return time; + } } diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java index 2ec7809..962fb2e 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/annotation/ConnectStatus.java @@ -1,31 +1,24 @@ 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 final int CONNECTING = 0; /** * 杩炴帴鎴愬姛 */ - int CONNECTED = 1; + public static final int CONNECTED = 1; /** * 杩炴帴鍏抽棴 */ - int DISCONNECT = 2; + public static final int DISCONNECT = 2; } diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java index 07d368d..8a78384 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java @@ -87,7 +87,7 @@ * @return */ public static UdpSocketBoot init(int port, UdpSocketOptions options) { - return init(null, port, options); + return init("0.0.0.0", port, options); } @@ -100,9 +100,11 @@ } if (TextUtils.isEmpty(ipAddress)) { mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port)); + }else { + mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress,port)); } mSocket.setBroadcast(true); - mSocket.setReuseAddress(true); +// mSocket.setReuseAddress(true); } catch (Exception e) { LogUtils.e("鍒濆鍖朣ocket 澶辫触锛�" + e.getMessage()); diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java index 17471bb..2d37ac5 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java @@ -2,25 +2,15 @@ import android.text.TextUtils; -import androidx.collection.ArrayMap; - import com.hdl.sdk.common.utils.LogUtils; 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.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; 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 +27,7 @@ private ExecutorService receiveThread; - private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>(); + private final ConcurrentMap<String, SendListener> sendMap = new ConcurrentHashMap<>(); public UdpSocketBoot(IUdpClient client) { this.client = client; diff --git a/HDLSDK/settings.gradle b/HDLSDK/settings.gradle index fc35c16..b974e52 100644 --- a/HDLSDK/settings.gradle +++ b/HDLSDK/settings.gradle @@ -1,6 +1,6 @@ include ':app' -include ':hdl-socket' +//include ':hdl-socket' include ':hdl-connect' -include ':hdl-common' +//include ':hdl-common' include ':com.hdl.sdk' diff --git a/HDLSDK_DEMO.rar b/HDLSDK_DEMO.rar new file mode 100644 index 0000000..c293162 --- /dev/null +++ b/HDLSDK_DEMO.rar Binary files differ diff --git a/HDLSDK_DEMO/.idea/gradle.xml b/HDLSDK_DEMO/.idea/gradle.xml index 3123843..9885452 100644 --- a/HDLSDK_DEMO/.idea/gradle.xml +++ b/HDLSDK_DEMO/.idea/gradle.xml @@ -7,6 +7,7 @@ <option name="testRunner" value="GRADLE" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> + <option name="gradleJvm" value="1.8" /> <option name="modules"> <set> <option value="$PROJECT_DIR$" /> diff --git a/HDLSDK_DEMO/.idea/misc.xml b/HDLSDK_DEMO/.idea/misc.xml index 6852866..1be33d1 100644 --- a/HDLSDK_DEMO/.idea/misc.xml +++ b/HDLSDK_DEMO/.idea/misc.xml @@ -3,6 +3,9 @@ <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.3536458333333333" /> + <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml" value="0.3538301198540907" /> + <entry key="..\:/HDL/ProjectCode/HDLSDK/HDLSDK_A_Android/HDLSDK_DEMO/app/src/main/res/layout/item_devices_list.xml" value="0.3536458333333333" /> <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> diff --git a/HDLSDK_DEMO/app/build.gradle b/HDLSDK_DEMO/app/build.gradle index 51fe626..93ec83c 100644 --- a/HDLSDK_DEMO/app/build.gradle +++ b/HDLSDK_DEMO/app/build.gradle @@ -38,7 +38,12 @@ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6' +<<<<<<< HEAD implementation 'com.google.code.gson:gson:2.8.8' implementation files('libs\\com.hdl.sdk-v1.0.16.aar') +======= +// implementation 'com.google.code.gson:gson:2.8.8' +>>>>>>> not_androidx // implementation project(path: ':hdl-connect') + implementation files('libs\\com.hdl.sdk-v1.1.3.aar') } \ No newline at end of file diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar new file mode 100644 index 0000000..457d626 --- /dev/null +++ b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.3.aar Binary files differ diff --git a/HDLSDK_DEMO/app/src/main/AndroidManifest.xml b/HDLSDK_DEMO/app/src/main/AndroidManifest.xml index 964acd6..f6e37e6 100644 --- a/HDLSDK_DEMO/app/src/main/AndroidManifest.xml +++ b/HDLSDK_DEMO/app/src/main/AndroidManifest.xml @@ -29,6 +29,7 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + </application> </manifest> \ No newline at end of file diff --git a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java index d332fdc..bc5e1a0 100644 --- a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -1,50 +1,49 @@ package com.hdl.hdlsdk; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -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; import android.view.View; +import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; +import androidx.activity.result.ActivityResultCallback; +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 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.DeleteNetworkListener; 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.PropertyReadRequest; +import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListUploadRequest; 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.cloud.CallBackListener; +import com.hdl.sdk.connect.cloud.HDLException; 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; @@ -53,8 +52,6 @@ import java.util.List; import java.util.Map; -import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY; - public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @@ -62,9 +59,12 @@ private RecyclerView rv; private TextView tv; private TextView responseTv; + private TextView localSecret; + private EditText editText; boolean isOn; private EventListener allTopicsListener; - private String testLightSid = "0001010D48C71B02020100010101"; + private String testLightSid = "02010131D9C03D01020300010107"; + private String secret = ""; @Override protected void onDestroy() { @@ -72,22 +72,77 @@ removeAllTopicsListener(); } - void initDeviceInfo() - { + void initDeviceInfo() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); +<<<<<<< HEAD infoBean.setDeviceMAC("AA00000000000100"); infoBean.setIPMAC("AA00000000000100"); +======= + infoBean.setDeviceMAC("f2c5d8bad48f"); + infoBean.setIPMAC("f2c5d8bad48f"); +>>>>>>> not_androidx infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧 infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿 infoBean.setAccessMode("WIFI"); infoBean.setIPGateway("192.168.1.1"); +<<<<<<< HEAD infoBean.setIPAddress("192.168.1.116"); infoBean.setGateway_type("music.standard"); +======= + infoBean.setIPAddress("192.168.1.103"); + infoBean.setGateway_type("screen.touch"); +>>>>>>> not_androidx infoBean.setHw_version("HW2.0"); infoBean.setFw_version("Fw1.0"); infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍� infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� +<<<<<<< HEAD +======= + infoBean.setSupplier("JINMAOYUN"); +>>>>>>> not_androidx HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); + } + + void applyDeviceSecret() { + tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�..."); + responseTv.setText(""); + +// //姝e紡鏈嶅姟鍣� + String appKey = "i8hR07jzrIS";//appkey + String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret + + //娴嬭瘯鏈嶅姟鍣� +// String appKey ="FcRyUJlLJFF"; +// String appSecret = "wz8wn75ABidx8vXcFGUotqhwFkTaYvvJ"; + +// String appKey = "L2OZliZRxHc"; +// String appSecret = "aCIWSvJDOukXfx3kivsKW11x9xdR3IbV"; + String supplier = "JINMAOYUN";//鍘傚晢 +// String mac = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 + String mac = editText.getText().toString(); + String spk = "screen.touch";//浜у搧spk + + if (TextUtils.isEmpty(mac)) { + Toast.makeText(this, "mac涓嶈兘涓虹┖锛�", Toast.LENGTH_SHORT).show(); + return; + } + + HDLLink.getInstance().applyDeviceSecret(this, appKey, appSecret, supplier, mac, spk, new CallBackListener() { + @Override + public void onError(HDLException e) { + tv.setText("鐢宠澶辫触"); + responseTv.setText(e.getMsg()); + secret = ""; + } + + @Override + public void onSuccess(String msg) { + tv.setText("鐢宠鎴愬姛"); + responseTv.setText(msg.toString()); + secret = msg.toString(); + } + }); + } /** @@ -95,47 +150,80 @@ */ void sendAuthenticateRequest() { tv.setText("寮�濮嬪叆缃戣璇�..."); + responseTv.setText(""); //璁よ瘉鎻愪氦鍙傛暟鍑嗗 // -// //娴嬭瘯鏈嶅姟 -// String spkStr = "ir.module";//浜у搧spk +// //娴嬭瘯鏈嶅姟鍣� +// String spkStr = "music.standard";//浜у搧spk // String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 // String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret // 姝e紡鏈嶅姟鍣� +<<<<<<< HEAD String spkStr = "screen.mirror";//浜у搧spk String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret +======= + String spkStr = "screen.touch";//浜у搧spk +// String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 + String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃 +// String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret +>>>>>>> not_androidx String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// String time = String.valueOf(System.currentTimeMillis()); HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); +// HDLLinkConfig.getInstance().setCurrentGateway(infoBean); //1.璁剧疆璁よ瘉淇℃伅 AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); requestBean.setMAC(macStr); - requestBean.setSupplier("WISE"); + requestBean.setSupplier("JINMAOYUN"); requestBean.setFirmwareVersion(versionString); requestBean.setHardwareModel("1956F"); +// HDLLinkConfig.getInstance().setRequestBean(requestBean); + AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); authbean.setSpk(spkStr); authbean.setMACKey(mac_key); authbean.setRequest(requestBean); + HDLLinkConfig.getInstance().setAuthBean(authbean); + //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("璁よ瘉澶辫触"); + tv.setText("璁よ瘉澶辫触" + e.getCode()); responseTv.setText(e.getMsg()); - Log.i("TAG", "onError: 璁よ瘉澶辫触"); + Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode()); } + @RequiresApi(api = Build.VERSION_CODES.O) @Override public void onSuccess(String msg) { tv.setText("璁よ瘉鎴愬姛"); responseTv.setText(msg.toString()); + localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret()); + } + }); + } + + public void UploadDeviceAuth(String mac, String result, String message, String auth_code) { + //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧 + HDLLink.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() { + @Override + public void onSuccess(String s) { + tv.setText("涓婃姤缁撴灉鎴愬姛"); + responseTv.setText(s.toString()); + } + + @Override + public void onError(HDLLinkException e) { + tv.setText("涓婃姤缁撴灉澶辫触"); + responseTv.setText(e.getMsg()); + Log.i(TAG, "onError: 涓婃姤缁撴灉澶辫触"); } }); } @@ -146,13 +234,27 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); responseTv = findViewById(R.id.response_tv); + editText = findViewById(R.id.edittext); + localSecret = findViewById(R.id.local_secret); tv = findViewById(R.id.state_tv); rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); + selectnetwork(); checkIfCertified(); initDeviceInfo();//鍒濆鍖� registerAllTopicsListener(); + HDLLink.getInstance().setDeleteNetworkListener(new DeleteNetworkListener() { + @Override + public void onSuccess(Object msg) { + LogUtils.i("setDeleteNetworkListener onSucceed = " + msg); + } + + @Override + public void onFailure() { + LogUtils.i("setDeleteNetworkListener onFailure"); + } + }); ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @Override @@ -163,9 +265,11 @@ launcher.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}); - final List<DemoBean> beans = new ArrayList<>(); + final List<DemoBean> beans = new ArrayList<DemoBean>(); + beans.add(new DemoBean("鐢宠璁惧瀵嗛挜")); beans.add(new DemoBean("鍏ョ綉璁よ瘉")); beans.add(new DemoBean("鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎")); + beans.add(new DemoBean("涓婃姤oid鍒楄〃")); beans.add(new DemoBean("鑾峰彇鍔熻兘鍒楄〃")); beans.add(new DemoBean("鍔熻兘灞炴�ц鍙�")); beans.add(new DemoBean("璁惧鎺у埗")); @@ -177,6 +281,7 @@ beans.add(new DemoBean("TCP鍙戦��")); beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�")); beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�")); + beans.add(new DemoBean("閫�缃�")); demoAdapter = new DemoAdapter(beans); rv.setAdapter(demoAdapter); @@ -192,56 +297,68 @@ public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) { switch (position) { case 0: + //鐢宠璁惧瀵嗛挜 + applyDeviceSecret(); + break; + case 1: //鍏ョ綉璁よ瘉 sendAuthenticateRequest(); break; - case 1: + case 2: //鎼滅储缃戝叧 searchGatewayBroadcast(); break; - case 2: + case 3: + //涓婃姤oid鍒楄〃 + UploadOidList(); + break; + case 4: //鑾峰彇鍔熻兘鍒楄〃 getFunctionList(); break; - case 3: + case 5: //鍔熻兘灞炴�ц鍙� getFunctionAttribute(); break; - case 4: + case 6: //璁惧鎺у埗 controlDecide(); break; - case 5: + case 7: //璇诲彇鐘舵�� propertyRead(); break; - case 6: + case 8: //鑾峰彇鍦烘櫙鍒楄〃 getSceneList(); break; - case 7: - //鑾峰彇鍦烘櫙鍒楄〃 + case 9: + //鍦烘櫙鎺у埗 controlScene(); break; - case 8: + case 10: //鍔熻兘鍒楄〃 startDevicesListActivity(); break; - case 9: + case 11: //UDP鍙戦�� udpSend(); break; - case 10: + case 12: //TCP鍙戦�� tcpSend(); break; - case 11: + case 13: //UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋� udpSendWithCallback(); break; - case 12: + case 14: //TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋� tcpSendWithCallback(); + break; + case 15: + //閫�缃� + deleteNetwork(); break; } } @@ -251,6 +368,10 @@ public void showToast(String text) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); + } + + void selectnetwork() { + HDLLink.getInstance().selectNetwork("wlan0"); } /** @@ -271,6 +392,9 @@ @Override public void onMessage(Object msg) { LinkResponse response = (LinkResponse) msg; + if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())){ + localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret()); + } } }; HDLLink.getInstance().registerAllTopicsListener(allTopicsListener); @@ -320,7 +444,6 @@ } - String stringToMD5(String text) { byte[] hash; try { @@ -349,6 +472,7 @@ */ void searchGatewayBroadcast() { tv.setText("鎼滅储缃戝叧涓�..."); + responseTv.setText(""); HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() { @Override public void onError(HDLLinkException e) { @@ -391,6 +515,7 @@ */ void getFunctionAttribute() { tv.setText("鍔熻兘灞炴�ц鍙�"); + responseTv.setText(""); List<String> sids = new ArrayList<>(); sids.add(testLightSid); HDLLink.getInstance().getFunctionAttribute(sids, new HDLLinkCallBack() { @@ -412,6 +537,7 @@ */ void propertyRead() { tv.setText("璇诲彇鐘舵�佷腑..."); + responseTv.setText(""); List<String> list = new ArrayList<>(); list.add(testLightSid);//瑕佽鍙栬澶囩殑sid HDLLink.getInstance().propertyRead(list, new HDLLinkCallBack() { @@ -435,6 +561,7 @@ */ void controlDecide() { tv.setText("鎺у埗璁惧"); + responseTv.setText(""); isOn = !isOn; List<DeviceControlRequest> requestList = new ArrayList<>(); DeviceControlRequest request = new DeviceControlRequest(); @@ -464,6 +591,7 @@ */ void getSceneList() { tv.setText("璇诲彇鍦烘櫙鍒楄〃"); + responseTv.setText(""); HDLLink.getInstance().getSceneList(new HDLLinkCallBack() { @Override public void onSuccess(String msg) { @@ -486,6 +614,7 @@ */ void controlScene() { tv.setText("鍦烘櫙鎺у埗"); + responseTv.setText(""); //鎺у埗鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忔帶鍒� List<String> sids = new ArrayList<>(); isOn = !isOn; @@ -518,6 +647,7 @@ */ private void tcpSend() { tv.setText("TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr); @@ -528,6 +658,7 @@ */ private void udpSend() { tv.setText("UDP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr); @@ -560,6 +691,7 @@ */ private void udpSendWithCallback() { tv.setText("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() { @@ -581,6 +713,7 @@ */ private void tcpSendWithCallback() { tv.setText("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"); + responseTv.setText(""); String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId()); String bodyStr = getPropertyDownBodyStr(); HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() { @@ -596,4 +729,54 @@ } }); } + + private void deleteNetwork() { + tv.setText("閫�缃�"); + responseTv.setText(""); + String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID(); + HDLLink.getInstance().deleteNetwork(oid, false, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + responseTv.setText(msg); + //閫�缃戞垚鍔燂紝鍒犻櫎鏁版嵁 + } + + @Override + public void onError(HDLLinkException e) { + responseTv.setText(e.getMsg()); + } + }); + } + + /** + * 涓婃姤oid鍒楄〃 + */ + private void UploadOidList() { + tv.setText("涓婃姤oid鍒楄〃..."); + responseTv.setText(""); + + //1.璁剧疆璁惧淇℃伅 + AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + + ListUploadRequest request = new ListUploadRequest(); + request.setOid(authenticateDeviceInfoBean.getOID()); + request.setDevice_name(authenticateDeviceInfoBean.getDeviceName()); + request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel()); + request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC()); + request.setSrc("LINK");//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK" + request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 + + HDLLink.getInstance().UploadOidList(request, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException error) { + tv.setText(error.getMsg()); + } + + @Override + public void onSuccess(String data) { + tv.setText("涓婃姤oid鍒楄〃鎴愬姛"); + responseTv.setText(data); + } + }); + } } \ No newline at end of file diff --git a/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml b/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml index 6fa6c2b..6bdd2a2 100644 --- a/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml +++ b/HDLSDK_DEMO/app/src/main/res/layout/activity_main.xml @@ -40,10 +40,20 @@ android:layout_height="match_parent" android:orientation="vertical"> + <EditText + android:id="@+id/edittext" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="10dp" + android:hint="璇疯緭鍏ac" + android:text="f2c5d8bad48f" + /> + <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="10dp" + android:layout_marginTop="@dimen/dp_10" android:text="褰撳墠鐘舵�侊細" /> <TextView @@ -66,6 +76,14 @@ android:text="鍝嶅簲锛�" /> <TextView + android:id="@+id/local_secret" + android:paddingStart="10dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="瀵嗛挜锛�" /> + + <TextView android:id="@+id/response_tv" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/HDLSDK_DEMO/config.gradle b/HDLSDK_DEMO/config.gradle index 582d32b..6c1835a 100644 --- a/HDLSDK_DEMO/config.gradle +++ b/HDLSDK_DEMO/config.gradle @@ -1,5 +1,5 @@ ext { - minSdkVersion = 16 + minSdkVersion = 21 targetSdkVersion = 31 compileSdkVersion = 31 versionName = "1.0.0" diff --git a/HDLSDK_DEMO/settings.gradle b/HDLSDK_DEMO/settings.gradle index 5a72944..c31d9c0 100644 --- a/HDLSDK_DEMO/settings.gradle +++ b/HDLSDK_DEMO/settings.gradle @@ -3,4 +3,3 @@ include ':hdl-socket' include ':hdl-connect' include ':hdl-common' - -- Gitblit v1.8.0