From 755e2893c12b79649ee12dec2b7d832d58b9265b Mon Sep 17 00:00:00 2001 From: 562935844@qq.com Date: 星期三, 18 十月 2023 16:19:26 +0800 Subject: [PATCH] 上报oid列表新增parentoid --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java | 10 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java | 28 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java | 13 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java | 333 +++++++---- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 120 ++++ HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 259 ++++++-- HDLSDK/com.hdl.sdk/.DS_Store | 0 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java | 49 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java | 14 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java | 15 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java | 37 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 62 +- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java | 2 HDLSDK_DEMO/app/build.gradle | 3 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java | 19 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java | 24 HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar | 0 HDLSDK/.idea/gradle.xml | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java | 9 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java | 196 +++++++ /dev/null | 0 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java | 107 +++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java | 2 HDLSDK/com.hdl.sdk/build.gradle | 4 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java | 17 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java | 37 + HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 207 ++++--- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java | 30 + 29 files changed, 1,261 insertions(+), 340 deletions(-) diff --git a/HDLSDK/.idea/gradle.xml b/HDLSDK/.idea/gradle.xml index 92c877d..059ae1c 100644 --- a/HDLSDK/.idea/gradle.xml +++ b/HDLSDK/.idea/gradle.xml @@ -7,7 +7,7 @@ <option name="testRunner" value="GRADLE" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> - <option name="gradleJvm" value="JDK" /> + <option name="gradleJvm" value="Embedded JDK" /> <option name="modules"> <set> <option value="$PROJECT_DIR$" /> 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 9764b67..c73aa4c 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -5,7 +5,6 @@ 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; @@ -18,7 +17,6 @@ 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; @@ -31,15 +29,19 @@ 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.AllTopicManagerUtils; 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.AttributesRequest; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListSidRequest; import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; +import com.hdl.sdk.connect.bean.response.DeviceInfoResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; @@ -66,30 +68,6 @@ private EventListener allTopicsListener; private String testLightSid = "02010131D9C03D01020300010107"; private String secret = ""; - - @Override - protected void onDestroy() { - super.onDestroy(); - removeAllTopicsListener(); - } - - void initDeviceInfo() { - AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); - infoBean.setDeviceMAC("f2c5d8bad48f"); - infoBean.setIPMAC("f2c5d8bad48f"); - infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧 - infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿 - infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.1.1"); - infoBean.setIPAddress("192.168.1.103"); - infoBean.setGateway_type("screen.touch");//spk - infoBean.setHw_version("HW2.0"); - infoBean.setFw_version("Fw1.0"); - infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍� - infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� - infoBean.setSupplier("JINMAOYUN"); - HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); - } /*void applyDeviceSecret() { tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�..."); @@ -159,65 +137,6 @@ }*/ - /** - * 鍏ョ綉璁よ瘉 - */ - void sendAuthenticateRequest() { - tv.setText("寮�濮嬪叆缃戣璇�..."); - responseTv.setText(""); - //璁よ瘉鎻愪氦鍙傛暟鍑嗗 -// -// //娴嬭瘯鏈嶅姟鍣� -// String spkStr = "music.standard";//浜у搧spk -// String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 -// String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret - -// 姝e紡鏈嶅姟鍣� - String spkStr = "screen.touch";//浜у搧spk -// String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 - String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃 -// String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret - - String mac_key = stringToMD5(stringToMD5(macStr + secret)); - String versionString = "HDL_V1.0.1";// - String time = String.valueOf(System.currentTimeMillis()); - HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); -// HDLLinkConfig.getInstance().setCurrentGateway(infoBean); - - //1.璁剧疆璁よ瘉淇℃伅 - AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); - requestBean.setMAC(macStr); - 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("璁よ瘉澶辫触" + e.getCode()); - responseTv.setText(e.getMsg()); - 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() { @@ -263,6 +182,8 @@ LogUtils.i("setDeleteNetworkListener onFailure"); } }); + + UploadSidList(); ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @Override @@ -456,6 +377,75 @@ HDLLink.getInstance().removeAllTopicsListener(allTopicsListener); } + void initDeviceInfo() + { + AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); + infoBean.setDeviceMAC("f2c5d8bad48f"); + infoBean.setIPMAC("f2c5d8bad48f"); + infoBean.setDeviceName("榄旈暅");//璁惧鍚嶅瓧 + infoBean.setDeviceModel("HDLSDK");//璁惧鍨嬪彿 + infoBean.setAccessMode("WIFI"); + infoBean.setIPGateway("192.168.1.1"); + infoBean.setIPAddress("192.168.1.116"); + infoBean.setGateway_type("screen.touch"); + infoBean.setHw_version("HW2.0"); + infoBean.setFw_version("Fw1.0"); + infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍� + infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� + infoBean.setSupplier("JINMAOYUN"); + HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); + + } + + /** + * 鍏ョ綉璁よ瘉 + */ + void sendAuthenticateRequest() { + tv.setText("寮�濮嬪叆缃戣璇�..."); + //璁よ瘉鎻愪氦鍙傛暟鍑嗗 + +// 娴嬭瘯鏈嶅姟 +// String spkStr = "ir.module";//浜у搧spk +// String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 +// String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + +// 姝e紡鏈嶅姟鍣� + String spkStr = "screen.mirror";//浜у搧spk + String macStr = "f2c5d8bad48f";//璁惧鍞竴MAC鍦板潃 +// String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + + String mac_key = stringToMD5(stringToMD5(macStr + secret)); + String versionString = "HDL_V1.0.1";// + String time = String.valueOf(System.currentTimeMillis()); + HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); + + //1.璁剧疆璁よ瘉淇℃伅 + AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); + requestBean.setMAC(macStr); + requestBean.setSupplier("JINMAOYUN"); + requestBean.setFirmwareVersion(versionString); + requestBean.setHardwareModel("1956F"); + AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); + authbean.setSpk(spkStr); + authbean.setMACKey(mac_key); + authbean.setRequest(requestBean); + //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ + AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean); + HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException e) { + tv.setText("璁よ瘉澶辫触"); + responseTv.setText(e.getMsg()); + Log.i("TAG", "onError: 璁よ瘉澶辫触"); + } + + @Override + public void onSuccess(String msg) { + tv.setText("璁よ瘉鎴愬姛"); + responseTv.setText(msg.toString()); + } + }); + } String stringToMD5(String text) { byte[] hash; @@ -818,6 +808,47 @@ }); } + private void UploadSidList() { + tv.setText("涓婃姤Sid鍒楄〃..."); + responseTv.setText(""); + + //1.璁剧疆璁惧淇℃伅 + AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + + ListSidRequest request = new ListSidRequest(); + request.setOid(authenticateDeviceInfoBean.getOID()); + request.setName("sid鍚嶇О"); + request.setOmodel(authenticateDeviceInfoBean.getDeviceModel()); + request.setSid("12345678");//褰撳墠sid鐨� + request.setSpk("light.switch");//褰撳墠spk鍚嶇О锛屾牴鎹疄闄呰澶囨潵瀹氫箟 + request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 + + AttributesRequest attributes = new AttributesRequest(); + attributes.setKey("on_off"); + attributes.setData_type("string"); + List<Object> valueList=new ArrayList<>(); + valueList.add("on"); + valueList.add("off"); + attributes.setValue(valueList); + //娣诲姞鏀寔鐨勫睘鎬у垪琛� + List<AttributesRequest> attributesList = new ArrayList<>(); + request.setAttributes(attributesList); + List<ListSidRequest> sidRequestList = new ArrayList<>(); + sidRequestList.add(request); + HDLLink.getInstance().UploadSidList(sidRequestList, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException error) { + tv.setText(error.getMsg()); + } + + @Override + public void onSuccess(String data) { + tv.setText("涓婃姤sid鍒楄〃鎴愬姛"); + responseTv.setText(data); + } + }); + } + /** * 鑾峰彇APP鐗堟湰 * @@ -839,4 +870,10 @@ return versionName; } + @Override + protected void onDestroy() { + super.onDestroy(); + removeAllTopicsListener(); + } + } \ No newline at end of file diff --git a/HDLSDK/com.hdl.sdk/.DS_Store b/HDLSDK/com.hdl.sdk/.DS_Store new file mode 100644 index 0000000..47c4fb9 --- /dev/null +++ b/HDLSDK/com.hdl.sdk/.DS_Store Binary files differ diff --git a/HDLSDK/com.hdl.sdk/build.gradle b/HDLSDK/com.hdl.sdk/build.gradle index e85618c..ac57b55 100644 --- a/HDLSDK/com.hdl.sdk/build.gradle +++ b/HDLSDK/com.hdl.sdk/build.gradle @@ -8,8 +8,8 @@ defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion - versionCode 6 - versionName "1.1.4" + versionCode 117 + versionName "1.1.7" } buildTypes { debug { 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 index 1db547c..05fc32a 100644 --- 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 @@ -1,10 +1,13 @@ package com.hdl.sdk.common; import android.content.Context; +import android.text.TextUtils; import android.util.Log; import com.hdl.sdk.common.config.TopicConstant; +import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.common.exception.HDLLinkException; +import com.hdl.sdk.common.utils.AllTopicManagerUtils; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; @@ -32,7 +35,7 @@ return version; } - private String version = "1.1.0"; + private String version = "1.1.7"; private HDLSdk() { } @@ -46,10 +49,24 @@ } public void init(Context context) { + if (this.context != null) { + return; + } this.context = context.getApplicationContext(); HDLAuthSocket.getInstance().init(); HDLSocket.getInstance().broadcastRequest(); LogUtils.i("HDLSdk Version:" + version); + + //璁㈤槄鎵�鏈夌殑涓婚 + HDLLink.getInstance().registerAllTopicsListener(new EventListener() { + @Override + public void onMessage(Object msg) { + if (msg == null || !(msg instanceof LinkResponse)) { + return; + } + AllTopicManagerUtils.manager((LinkResponse) msg); + } + }); } 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 index 4ad39ac..dd52c06 100644 --- 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 @@ -121,5 +121,22 @@ //椹卞姩涓婃姤oid鍒楄〃鍥炲 public static final String LIST_UPLOAD_REPLY = "/user/%s/custom/device/list/upload_reply"; + /** + * sid鍒楄〃涓婃姤 + */ + public static final String LIST_SID_UPLOAD="/base/%s/thing/topo/list/upload"; + /** + * sid鍒楄〃涓婃姤鍥炲 + */ + public static final String LIST_SID_UPLOAD_REPLY="/base/%s/thing/topo/list/upload_reply"; + + /* + * 缃戝叧缂栬緫鍛戒护 + * 鍐欒繙绋嬩俊鎭殑锛屼緥濡傛湇鍔″櫒鍦板潃銆丠omeId銆佸瘑閽ヤ箣绫� + * 涓庢湇鍔″櫒鐩稿叧鐨� + * */ + public static final String GATEWAY_EDIT_REMOTE = "/user/%s/custom/gateway/remote/edit"; + + public static final String GATEWAY_EDIT_REMOTE_REPLY = "/user/%s/custom/gateway/remote/edit_reply"; } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java new file mode 100644 index 0000000..1908d0a --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java @@ -0,0 +1,196 @@ +package com.hdl.sdk.common.utils; + +import android.text.TextUtils; +import android.util.Base64; +import android.util.Log; + +import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.common.config.TopicConstant; +import com.hdl.sdk.common.exception.HDLLinkException; +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.GatewayRemoteEditRequest; +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; + +/** + * Created by hxb on 2023/9/14. + */ +public class AllTopicManagerUtils { + + /** + * 鍏ㄥ眬涓婚澶勭悊鏂规硶锛屽彲浠ュ鐞嗘墍鏈夋帴鏀跺埌鐨勬暟鎹� + * + * @param linkResponse + */ + public static void manager(LinkResponse linkResponse) { + try { + if (linkResponse == null) { + return; + } + String topic = linkResponse.getTopic(); + if (TextUtils.isEmpty(topic)) { + return; + } + String[] topics = topic.split("/"); + //闈炲綋鍓嶄綇瀹呯綉鍏崇殑鏁版嵁杩斿洖 + if (topics.length < 3) { + return; + } + + String mac_Oid_GatewayId = topics[2]; + + if (!isLocalDevice(mac_Oid_GatewayId)) { + LogUtils.i("涓嶆槸褰撳墠璁惧鐨勭綉鍏矷d锛孖d鏄�" + mac_Oid_GatewayId); + //闈炲綋鍓嶈澶囩殑鏁版嵁 + return; + } + + if (isSameTopic(TopicConstant.GATEWAY_EDIT_REMOTE, topic)) { + gatewayRemoteEditRequest(mac_Oid_GatewayId, linkResponse.getData()); + } else if (isSameTopic(TopicConstant.GATEWAY_SEARCH, topic)) { + HDLAuthSocket.getInstance().UploadGatewayInfo(null); + } else if (isSameTopic(TopicConstant.LINK_BROADCAST, topic)) { + managerLinkBroadcast(linkResponse.getData()); + } else if (isSameTopic(TopicConstant.DELETE_NOTIFY, topic)) { + managerDeleteNofity(linkResponse.getData()); + } + + } catch (Exception e) { + LogUtils.e("鍏ㄥ眬澶勭悊妯″潡寮傚父锛�" + e.getMessage()); + } + } + + /** + * 鏄惁褰撳墠鐨勮澶� + * + * @param mac_Oid_GatewayId + * @return + */ + private static boolean isLocalDevice(String mac_Oid_GatewayId) { + if (TextUtils.isEmpty(mac_Oid_GatewayId)) { + return false; + } + String mac = HDLLinkConfig.getInstance().getDeviceInfoBean().getDeviceMAC(); + String oid = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID(); + String gatewayId = HDLLinkConfig.getInstance().getGatewayId(); + String all = "all"; + + return mac_Oid_GatewayId.equals(mac) || mac_Oid_GatewayId.equals(oid) || mac_Oid_GatewayId.equals(gatewayId) || mac_Oid_GatewayId.toLowerCase().equals(all); + } + + /** + * 鏄惁鐩稿悓涓婚 + * + * @param targetTopic 鐩爣鐨勪富棰� + * @param sourceTopic 鎺ユ敹鐨勪富棰� + * @return + */ + private static boolean isSameTopic(String targetTopic, String sourceTopic) { + if (TextUtils.isEmpty(targetTopic) || TextUtils.isEmpty(sourceTopic)) { + return false; + } + String[] targetTopics = targetTopic.split("/"); + String[] sourceTopics = sourceTopic.split("/"); + + if (targetTopics.length != sourceTopics.length) { + return false; + } + for (int i = 0; i < targetTopics.length; i++) { + if (i == 2) { + //杩欎釜浣嶇疆涓嶅尮閰嶏紝鏄綉鍏砳d + continue; + } + if (!targetTopics[i].equals(sourceTopics[i])) { + return false; + } + } + return true; + } + + /** + * 缃戝叧淇℃伅閰嶇疆 + * + * @param body + */ + private static void gatewayRemoteEditRequest(String mac_Oid_GatewayId, String body) { + if (TextUtils.isEmpty(body)) { + return; + } + GatewayRemoteEditRequest gatewayRemoteEditRequest = GsonConvert.getGson().fromJson(body, new TypeToken<GatewayRemoteEditRequest>() { + }.getType()); + + if (gatewayRemoteEditRequest == null || gatewayRemoteEditRequest.getObjects() == null) { + return; + } + + String homeId = gatewayRemoteEditRequest.getObjects().getHomeId(); + HDLLinkConfig.getInstance().setHomeId(homeId); + + HDLSocket.getInstance().gatewayRemoteEditReply(mac_Oid_GatewayId, gatewayRemoteEditRequest.getId(), null); + } + + /** + * 鏇存柊瀵嗛挜 + * + * @param body + */ + private static void managerLinkBroadcast(String body) { + try { + DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceInfoResponse>() { + }.getType()); + + if (deviceInfoResponse == null || deviceInfoResponse.getObjects() == null) { + return; + } + 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()); + } + } + + /** + * 閫�缃� + * + * @param body + */ + private static void managerDeleteNofity(String body) { + try { + DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceDeleteResponse>() { + }.getType()); + + if (deviceDeleteResponse == null || deviceDeleteResponse.getObjects() == null) { + return; + } + HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + + } + + @Override + public void onError(HDLLinkException e) { + + } + }); + } catch (Exception e) { + LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage()); + } + } +} \ No newline at end of file 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 c39638c..e7a0790 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 @@ -6,6 +6,7 @@ import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListSidRequest; import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; @@ -102,6 +103,10 @@ public void selectNetwork(String networkName) { HDLLinkConfig.getInstance().setNetworkName(networkName); + } + + public void setParentOid(String parentOid) { + HDLLinkConfig.getInstance().setParentOid(parentOid); } /** @@ -306,6 +311,16 @@ } /** + * 涓婃姤sid鍒楄〃 + * + * @param requestList sid鍒楄〃 + * @param callBack 鍥炶皟 + */ + public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) { + HDLSocket.getInstance().UploadSidList(requestList, callBack); + } + + /** * 閫氱敤UDP鍙戦�佹寚浠� * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆� * diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java new file mode 100644 index 0000000..9dbf607 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java @@ -0,0 +1,37 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by hxb on 2023/9/14. + */ +public class AttributesRequest implements Serializable { + private String key;//key鍚嶇О + private String data_type;//鏁版嵁绫诲瀷 + private List<Object> value;//鍊� + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getData_type() { + return data_type; + } + + public void setData_type(String data_type) { + this.data_type = data_type; + } + + public List<Object> getValue() { + return value; + } + + public void setValue(List<Object> value) { + this.value = value; + } +} diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java new file mode 100644 index 0000000..5bebfcc --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java @@ -0,0 +1,30 @@ +package com.hdl.sdk.connect.bean.request; + +import java.io.Serializable; + +/** + * Created by jlchen on 11/15/21. + * + * @Description : BaseResponse + */ +public class BaseRequest implements Serializable { + + private String id; + private String time_stamp; + + 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; + } +} 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 index c750cc2..aa64270 100644 --- 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 @@ -23,6 +23,8 @@ private String master; private boolean isLocalEncrypt; + private String homeId; + public String getOid() { return oid; } @@ -126,4 +128,12 @@ public void setLocalEncrypt(boolean localEncrypt) { isLocalEncrypt = localEncrypt; } + + public String getHomeId() { + return homeId; + } + + public void setHomeId(String homeId) { + this.homeId = homeId; + } } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java new file mode 100644 index 0000000..54681ba --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java @@ -0,0 +1,49 @@ +package com.hdl.sdk.connect.bean.request; + + +import java.io.Serializable; + +/** + * Created by hxb on 2023/9/14. + */ +public class GatewayRemoteEditRequest extends BaseRequest { + private GatewayObjects objects; + + public GatewayObjects getObjects() { + return objects; + } + + public void setObjects(GatewayObjects value) { + this.objects = value; + } + + public static class GatewayObjects implements Serializable { + + /** + * 浣忓畢Id + */ + private String homeId; + /** + * 鏈嶅姟鍣ㄥ湴鍧� + */ + private String server_addr; + + public String getHomeId() { + return homeId; + } + + public void setHomeId(String homeId) { + this.homeId = homeId; + } + + public String getServer_addr() { + return server_addr; + } + + public void setServer_addr(String server_addr) { + this.server_addr = server_addr; + } + } + + +} \ No newline at end of file diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java new file mode 100644 index 0000000..dad2ac4 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java @@ -0,0 +1,107 @@ +package com.hdl.sdk.connect.bean.request; + +import java.util.List; + +/** + * Created by panlili on 2023/1/31 + * description:鑾峰彇sid鍒楄〃 + */ +public class ListSidRequest { + + /** + * 鏄惁鍦ㄧ嚎 + */ + private String online; + /** + * 鐖秓id + */ + private String from; + /** + * 鏀寔鐨勫睘鎬у垪琛� + */ + private List<AttributesRequest> attributes; + /** + * sid + */ + private String sid; + /** + * spk + */ + private String spk; + /** + * 褰撳墠oid + */ + private String oid;//璁惧鐨凮id + /** + * 鍥炶矾澶囨敞 + */ + private String name; + /** + * 妯″潡淇℃伅 + */ + private String omodel; + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public String getOnline() { + return online; + } + + public void setOnline(String online) { + this.online = online; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public List<AttributesRequest> getAttributes() { + return attributes; + } + + public void setAttributes(List<AttributesRequest> attributes) { + this.attributes = attributes; + } + + public String getSid() { + return sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + + public String getSpk() { + return spk; + } + + public void setSpk(String spk) { + this.spk = spk; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOmodel() { + return omodel; + } + + public void setOmodel(String omodel) { + this.omodel = omodel; + } +} 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 index 03e78a2..cf83e88 100644 --- 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 @@ -18,6 +18,7 @@ private String src;//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK" private String from;//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 private List<ImageInfo> image_info; + private String parentOid;//浠庢満闇�瑕佷笂鎶arentoid锛屽唴瀹逛负涓绘満鐨刼id public String getOid() { return oid; @@ -83,6 +84,14 @@ this.from = from; } + public String getParentOid() { + return parentOid; + } + + public void setParentOid(String parentOid) { + this.parentOid = parentOid; + } + public List<ImageInfo> getImage_info() { return image_info; } 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 1efcb5d..3c8e3f3 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 @@ -32,7 +32,7 @@ this.ip_address = ip_address; } - public class Auth implements Serializable { + public static class Auth implements Serializable { private String localSecret; public String getLocalSecret() { return localSecret; } @@ -42,10 +42,12 @@ } - public class GatewayObjects implements Serializable { + public static class GatewayObjects implements Serializable { private String ip_address; private String gatewayId; private String oid; + + private String homeId; public String getIPAddress() { return ip_address; } public void setIPAddress(String value) { @@ -59,6 +61,14 @@ 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; + } } 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 index 1e9d43c..53f5385 100644 --- 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 @@ -19,7 +19,7 @@ this.objects = objects; } - public class GatewayObjects implements Serializable { + public static class GatewayObjects implements Serializable { private String device_name; private String oid; private boolean isSaveOidInfo; 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 index a819363..00349bd 100644 --- 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 @@ -18,7 +18,7 @@ this.objects = value; } - public class GatewayObjects implements Serializable { + public static class GatewayObjects implements Serializable { private String ip_address; private String gatewayId; private String oid; 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 8478008..d2faf10 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 @@ -10,6 +10,11 @@ private String oid; private String homeId; + /** + * 闇�瑕佸叆缃戜粠鏈簃ac + */ + private String slave_mac; + public String getIPAddress() { return ip_address; } public void setIPAddress(String value) { this.ip_address = value; } @@ -18,4 +23,12 @@ public String getHomeID() { return homeId; } public void setHomeID(String value) { this.homeId = value; } + + public String getSlave_mac() { + return slave_mac; + } + + public void setSlave_mac(String slave_mac) { + this.slave_mac = slave_mac; + } } 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 5ccf25d..e1701a7 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 @@ -21,11 +21,15 @@ private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key"; public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key"; + public static final String GATEWAY_REMOTEINFO_KEY="gateway_remoteinfo_key"; + private String localSecret;//鏈湴鍔犲瘑瀵嗛挜 private String gatewayId; private String ipAddress; private GatewaySearchBean currentGateway;//褰撳墠缃戝叧 private String networkName; + private String homeId; + private String parentOid; private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//褰撳墠璁惧鍩烘湰淇℃伅 private AuthenticateRequest.RequestBean requestBean;//褰撳墠璁惧鍩烘湰淇℃伅 @@ -64,10 +68,12 @@ this.gatewayId = ""; this.ipAddress = ""; this.localSecret = ""; + this.homeId=""; SPUtils.remove(AUTHENTICATE_LS_KEY); SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY); SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY); SPUtils.remove(AUTHENTICATE_IS_LS_KEY); + SPUtils.remove(GATEWAY_REMOTEINFO_KEY); } /** @@ -77,6 +83,7 @@ localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, ""); gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, ""); ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, ""); + homeId = SPUtils.getString(GATEWAY_REMOTEINFO_KEY, ""); } /** @@ -93,6 +100,7 @@ SPUtils.put(AUTHENTICATE_LS_KEY, localSecret); SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId); SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress); + } /** @@ -136,6 +144,14 @@ } public void setIpAddress(String ipAddress){ this.ipAddress = ipAddress; + } + + public String getParentOid() { + return parentOid; + } + + public void setParentOid(String parentOid) { + this.parentOid = parentOid; } public String getNetworkName() { @@ -189,6 +205,9 @@ public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY); + if(infoBean==null){ + infoBean= new AuthenticateRequest.AuthenticateDeviceInfoBean(); + } return infoBean; } @@ -212,4 +231,13 @@ public void setAuthBean(AuthenticateRequest.AuthBean authBean) { this.authBean = authBean; } + + public String getHomeId() { + return homeId; + } + + public void setHomeId(String homeId) { + this.homeId = homeId; + SPUtils.put(GATEWAY_REMOTEINFO_KEY, homeId); + } } 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 debec18..792c128 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 @@ -24,8 +24,11 @@ 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.ByteBufferUtils; import com.hdl.sdk.socket.codec.ByteToMessageDecoder; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -38,13 +41,31 @@ */ public class LinkMessageDecoder extends ByteToMessageDecoder<LinkResponse> { - private final List<Byte> bytes; + private static final String TAG = LinkMessageDecoder.class.getName(); + //instance + private volatile static LinkMessageDecoder instance; + + //getInstance + public static synchronized LinkMessageDecoder getInstance() { + if (instance == null) { + synchronized (LinkMessageDecoder.class) { + if (instance == null) { + instance = new LinkMessageDecoder(); + } + } + } + return instance; + } + + /** + * 鎺ユ敹鏁版嵁缂撳啿鍖� + */ + private final ByteBuffer byteBuffer; private final byte[] head = "Topic:".getBytes(); -// private final byte[] body = "\r\n\r\n".getBytes(); public LinkMessageDecoder() { - this.bytes = new ArrayList<>(); + byteBuffer = ByteBuffer.allocate(1024 * 200);//100K } /// <summary> @@ -53,11 +74,16 @@ /// <param name="topMsgs"></param> /// <returns></returns> int getLenght(String[] topMsgs) { - for (int i = 0; i < topMsgs.length; i++) { - String topMsg = topMsgs[i].trim(); - if (topMsg.startsWith("Length:")) { - return Integer.parseInt(topMsg.replace("Length:", "")); + try { + for (int i = 0; i < topMsgs.length; i++) { + String topMsg = topMsgs[i].trim(); + if (topMsg.startsWith("Length:")) { + return Integer.parseInt(topMsg.replace("Length:", "").trim()); + } } + } catch (Exception e) { + LogUtils.e("寮傚父鏁版嵁锛�" + topMsgs[0] + "\r\n" + topMsgs[1]); + return -1; } //鎵句笉鍒伴暱搴� return -1; @@ -82,15 +108,14 @@ /** * 鑾峰彇鏁版嵁鐨勫紑濮嬩綅缃� * - * @param arrayList 鎺ユ敹鍒扮殑鎵�鏈夋暟鎹� * @return 鏁版嵁浣嶇殑寮�濮嬬储寮� */ - int getDataIndex(List<Byte> arrayList) { + int getBodyIndex() { byte r = (byte) '\r'; byte n = (byte) '\n'; - for (int i = 0; i < arrayList.size(); i++) { + for (int i = 0; i < byteBuffer.position(); i++) { //鎵惧嚭鏁版嵁鍐呭鍓嶉潰鐨勪袱涓崲琛� - if (3 <= i && arrayList.get(i - 3) == r && arrayList.get(i - 2) == n && arrayList.get(i - 1) == r && arrayList.get(i) == n) { + if (3 <= i && byteBuffer.get(i - 3) == r && byteBuffer.get(i - 2) == n && byteBuffer.get(i - 1) == r && byteBuffer.get(i) == n) { //鍓╀綑鐨勬暟鎹� return i + 1; } @@ -98,14 +123,73 @@ return -1; } - void initReceiveData(List<Byte> list) { + /** + * 鑾峰彇澶撮儴鏁版嵁 + * + * @return + */ + String getHeader() { + int bodyIndex = getBodyIndex(); + if (bodyIndex < 0) { + //娌℃湁鎵惧埌澶撮儴鏁版嵁 + return null; + } else { + byte bodyBytes[] = ByteBufferUtils.copyBytes(byteBuffer, bodyIndex); + return new String(bodyBytes); + } + } + /** + * 鑾峰彇鏁版嵁鍐呭 + * + * @param lenght + * @return + */ + byte[] getBody(int index, int lenght) { + //鏄惁宸茬粡鑾峰彇瀹屾暣鎵�鏈夌殑鏁版嵁 + byte[] bodyBytes = new byte[lenght]; + if (index < 0 || byteBuffer.position() < index + lenght) { + //褰撳墠鏁版嵁杩樻病鏈夋帴鏀跺畬鎴� + return null; + } + + for (int i = 0; i < bodyBytes.length; i++) { + bodyBytes[i] = byteBuffer.get(index + i); + } + return bodyBytes; + } + + + /** + * 杩欒竟澶勭悊浜嗙紦瀛樻暟鎹矘鍖呯殑鎯呭喌锛屾瘡娆¤姹傞兘闇�瑕佸惂褰撳墠瀹屾暣鐨勬枃浠堕櫎鍘� 浠ヤ究浜庝笅娆$殑杩斿洖 + * tempList鐢ㄤ簬瀛樺偍澶氫綑鐨勬暟鎹� + * contentList鐢ㄤ簬鏈鏁版嵁鐨勫瓨鍌紙鍙戦�佺粰璁㈤槄鐨勬暟鎹級 + */ + byte[] geBody() { + int len = 3 + 4 + 4 + ((byteBuffer.get(7) & 0xFF) * 256 * 256 * 256) + ((byteBuffer.get(8) & 0xFF) * 256 * 256) + ((byteBuffer.get(9) * 256) & 0xFF) + (byteBuffer.get(10) & 0xFf); + byte[] bodyBytes = new byte[len]; + for (int i = 0; i < len; i++) { + bodyBytes[i] = byteBuffer.get(i); + } + + int endIndex = byteBuffer.position(); + byteBuffer.clear(); + for (int i = len; i < endIndex; i++) { + byteBuffer.put(byteBuffer.get(i)); + } + return bodyBytes; + } + + /** + * 绉婚櫎鍙兘瀛樺湪鐨勬棤鏁堟暟鎹� + */ + void removeInVoidBytes() { int index = 0; boolean isMatch = false; - for (; index < list.size() - head.length; index++) { + for (; index < byteBuffer.position() - head.length; index++) { isMatch = true; for (int j = 0, k = 0; j < head.length; j++, k++) { - if (head[j] != list.get(index + k)) { + if (head[j] != byteBuffer.get(index + k)) { isMatch = false; break; } @@ -116,159 +200,148 @@ } if (0 < index && isMatch) { - List<Byte> tempList = new ArrayList<Byte>(); - for (int i = index; i < list.size(); i++) { - tempList.add(list.get(i)); - } - - list.clear(); - for (int i = 0; i < tempList.size(); i++) { - list.add(tempList.get(i)); + int endIndex = byteBuffer.position(); + byteBuffer.clear(); + for (int i = index; i < endIndex; i++) { + byteBuffer.put(byteBuffer.get(i)); } } + } + + /** + * 绉婚櫎鍒版寚瀹氫綅缃墠闈㈢殑鏁版嵁 + * + * @param position 鎸囧畾浣嶇疆 + */ + void remove(int position) { + int endIndex = byteBuffer.position(); + byteBuffer.clear(); + for (int i = position; i < endIndex; i++) { + byteBuffer.put(byteBuffer.get(i)); + } + } + + + int bytes2int(byte[] bytes) { + int result = 0; + if (bytes.length == 2) { + int c = (bytes[0] & 0xff) << 8; + int d = (bytes[1] & 0xff); + result = c | d; + } else if (bytes.length == 4) { + return bytes[3] & 0xFF | // + (bytes[2] & 0xFF) << 8 | // + (bytes[1] & 0xFF) << 16 | // + (bytes[0] & 0xFF) << 24; // + } + return result; + } + + public String byte2hex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + String tmp = null; + for (byte b : bytes) { + //灏嗘瘡涓瓧鑺備笌0xFF杩涜涓庤繍绠楋紝鐒跺悗杞寲涓�10杩涘埗锛岀劧鍚庡�熷姪浜嶪nteger鍐嶈浆鍖栦负16杩涘埗 + tmp = Integer.toHexString(0xFF & b); + if (tmp.length() == 1) { + tmp = "0" + tmp; + } + sb.append(tmp + " "); + } + return sb.toString(); } // @RequiresApi(api = Build.VERSION_CODES.O) @Override protected synchronized LinkResponse decoder(Object msg, String ipaddress) throws Exception { - if (msg instanceof byte[]) { - bytes.addAll(ByteUtils.toByteList((byte[]) msg)); + if (msg == null || !(msg instanceof byte[])) { + return null; + } + + byte[] bytes = (byte[]) msg; + try { + byteBuffer.put(bytes); + } catch (Exception e) { + LogUtils.e("鎺ユ敹鍒版暟鎹紓甯�:\r\n" + e.getMessage()); + byteBuffer.flip(); + byteBuffer.clear(); + } + + try { //濡傛灉澶氭潯鍛戒护鎵撳寘鍦ㄤ竴鏉℃暟鎹腑锛岄兘闇�瑕佸鐞嗗畬 while (true) { - initReceiveData(bytes); - byte[] recevieBytes = ByteUtils.toByteArray(bytes); - String data = new String(recevieBytes); + removeInVoidBytes();//绉婚櫎鍙兘瀛樺湪鐨勬棤鏁堟暟鎹� - String[] topMsgs = data.split("\r\n"); + //澶撮儴鏁版嵁 + String header = getHeader(); + + if (header == null) { + break; + } + String[] topMsgs = header.split("\r\n"); String topic = getTopic(topMsgs); - if (topic == null) { - break; - } - int lenght = getLenght(topMsgs); - - if (lenght <= 0) { - //澶撮儴鏁版嵁杩樻病鏈夋帴鏀跺畬鎴� + if (topic == null || lenght <= 0) { + //鑾峰彇涓嶅埌涓婚鎴栬�呭ご閮ㄦ暟鎹繕娌℃湁鎺ユ敹瀹屾垚 break; } + + int bodyIndex = getBodyIndex(); //鏄惁宸茬粡鑾峰彇瀹屾暣鎵�鏈夌殑鏁版嵁 - byte[] body = new byte[lenght]; - int index = getDataIndex(bytes); - if (bytes.size() < index + lenght) { + byte[] body = getBody(bodyIndex, lenght); + + if (body == null) { //褰撳墠鏁版嵁杩樻病鏈夋帴鏀跺畬鎴� break; } - //澶嶅埗鍑篵ody鏁版嵁 - System.arraycopy(recevieBytes, index, body, 0, body.length); - //淇濈暀鍓╀綑鐨勬暟鎹紝浠ユ鐢� - bytes.clear(); - for (int i = index + lenght; i < recevieBytes.length; i++) { - bytes.add(recevieBytes[i]); + remove(bodyIndex + lenght); + + if (topic.contains("heartbeat_reply")) { +// if (packet.getSocket() != null) { +// packet.getSocket().setSoTimeout(10 * 1000); +// } + continue; } + LinkResponse response = new LinkResponse(); response.setSource_ipAddress(ipaddress); response.setTopic(topic); - if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) { + + if (encrypt(body)) { //闇�瑕佽В瀵� byte[] bodyBytes = AesUtil.aesDecrypt(body, HDLLinkConfig.getInstance().getLocalSecret()); if (bodyBytes != null) { - body = bodyBytes; + response.setData(new String(bodyBytes, StandardCharsets.UTF_8)); } else { - try { - //涔嬪墠鐨勭増鏈繖鍧楁槸鏄庢枃鐨� - if (!topic.contains("heartbeat_reply")) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.encodeToString(body, Base64.NO_WRAP)); - else { - LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + new String(body, "utf-8")); - } - } - } catch (Exception e) { - } + LogUtils.e("瑙e瘑澶辫触\r\n" + topic); + response.setData(new String(body, "utf-8")); + continue; } + } else { + response.setData(new String(body, "utf-8")); } - String bodyString = new String(body, "utf-8"); - response.setData(bodyString); - LogUtils.i("鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData()); + LogUtils.i("鏈湴鎺ユ敹鍒版暟鎹�:\r\n" + response.getTopic() + "\r\n" + response.getData() + "\r\n" + response.getData().length()); - 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("]")))) { - continue; - } //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆� EventDispatcher.getInstance().post(response.getTopic(), response); } - return null; - + } catch (Exception ee) { + LogUtils.e("澶勭悊鎺ユ敹鐨勬暟鎹紓甯�:\r\n" + ee.getMessage()); } return null; } + + //鏄惁鍔犲瘑 + private boolean encrypt(byte[] bytes) { + if (bytes[0] == '{' && bytes[bytes.length - 1] == '}' || (bytes[0] == '[' && bytes[bytes.length - 1] == ']')) { + return false; + } + return true; + } } + + 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 595c20b..a14bc66 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 @@ -148,19 +148,32 @@ EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() { @Override public void onMessage(Object msg) { - LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: "); - NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg); - if (bean != null) { - //绉婚櫎鐩戝惉 - 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); + try { + LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: "); + NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg); + if (bean != null) { + LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress()); + if (!TextUtils.isEmpty(bean.getSlave_mac())) { + if (!bean.getSlave_mac().equals(request.getObjects().getDeviceMAC())) { + LogUtils.i("鍏ョ綉楠岃瘉鐨刴ac鍜屾湰鏈轰笉涓�鏍凤紝璇锋眰鐨凪AC鏄�" + bean.getSlave_mac() + " 鏈満鐨勬槸" + request.getObjects().getDeviceMAC()); + return; + } + } + //绉婚櫎鐩戝惉 + EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); + HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress()); + if (!TextUtils.isEmpty(bean.getOID())) { + HDLLinkConfig.getInstance().setParentOid(bean.getOID()); + } + String ipStr = bean.getIPAddress(); + if (!TextUtils.isEmpty(ipStr)) { + sendAuthenticateRequest(ipStr, request, callBack); + } } - } + } catch (Exception e) { + LogUtils.e("鍏ョ綉楠岃瘉寮傚父", e.getMessage()); + } } }); } @@ -186,6 +199,7 @@ final GatewayInfoRequest request = new GatewayInfoRequest(); AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + if (authenticateDeviceInfoBean == null) return; request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel()); request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC()); request.setDevice_name(authenticateDeviceInfoBean.getDeviceName()); @@ -197,7 +211,9 @@ if (authenticateDeviceInfoBean.getSupplier() == null) { AuthenticateRequest.RequestBean requestBean = HDLLinkConfig.getInstance().getRequestBean(); - request.setSupplier(requestBean.getSupplier()); + if (requestBean != null) { + request.setSupplier(requestBean.getSupplier()); + } } request.setHw_version(authenticateDeviceInfoBean.getHw_version()); @@ -205,6 +221,7 @@ request.setIp_address(authenticateDeviceInfoBean.getIPAddress()); request.setMaster("false"); request.setLocalEncrypt(false); + request.setHomeId(HDLLinkConfig.getInstance().getHomeId()); data.setObjects(request); @@ -213,21 +230,7 @@ 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"); - } - }); + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, null); } @@ -258,16 +261,21 @@ String localSecret = ""; String gatewayId = ""; String ipAddress = ""; + String homeId = ""; if (bean.getAuth() != null) { localSecret = bean.getAuth().getLocalSecret(); } if (bean.getObjects() != null) { gatewayId = bean.getObjects().getGatewayID(); ipAddress = bean.getObjects().getIPAddress(); + homeId = bean.getObjects().getHomeId(); } if (ipAddress == null) { ipAddress = bean.getIp_address(); } + if (!TextUtils.isEmpty(homeId)) { + HDLLinkConfig.getInstance().setHomeId(homeId); + } HDLLinkConfig.getInstance().setAuthBean(request.getAuth()); //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� 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 d5ab577..5b9e0ec 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 @@ -24,6 +24,7 @@ import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest; import com.hdl.sdk.connect.bean.request.ListOidRequest; import com.hdl.sdk.connect.bean.request.ListOidRequest2; +import com.hdl.sdk.connect.bean.request.ListSidRequest; import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.bean.request.PropertyReadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse; @@ -113,7 +114,7 @@ } 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) + // @RequiresApi(api = Build.VERSION_CODES.O) @Override public void onSuccess(LinkResponse msg) { String data = msg.getData(); @@ -649,12 +650,62 @@ data.setId(IdUtils.getUUId()); data.setTime_stamp(time); + //2023.10.18淇敼锛屼笂鎶id鍒楄〃澧炲姞parentOid + if (request!=null && !TextUtils.isEmpty(HDLLinkConfig.getInstance().getParentOid())) { + request.setParentOid(HDLLinkConfig.getInstance().getParentOid()); + } 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)); + } + } + } + + /** + * 涓婃姤Sid鍒楄〃 + * + * @param requestList sid鍒楄〃 + * @param callBack 鍥炶皟 + */ + public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) { + if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<ListSidRequest>> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + + data.setObjects(requestList); + + String topic = String.format(TopicConstant.LIST_SID_UPLOAD, getGatewayId()); LinkRequest message = new LinkRequest(topic, GsonConvert.getGson().toJson(data)); @@ -890,14 +941,13 @@ // String replyTopic = topic + "_reply"; try { - sendMsg(message.getSendBytes(), topic, callBack, new SendListener() { + sendMsg(message.getSendBytes(), topic, null, new SendListener() { @Override public void onSucceed() { + HDLLinkConfig.getInstance().clearConfig(); if (callBack == null) return; try { callBack.onSuccess("閫�缃戞垚鍔�"); - HDLLinkConfig.getInstance().clearConfig(); - } catch (Exception e) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } @@ -936,7 +986,11 @@ public void tcpSendMsg(String topic, String bodyStr, HDLLinkCallBack callBack) { try { LinkRequest message = new LinkRequest(topic, bodyStr); + if (topic != null && topic.endsWith("_reply")) { + callBack = null; + } String replyTopic = topic + "_reply"; + HDLLinkCallBack finalCallBack = callBack; sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() { @Override public void onSucceed() { @@ -945,8 +999,8 @@ @Override public void onError() { - if (callBack != null) { - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + if (finalCallBack != null) { + finalCallBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); } } }); @@ -1005,7 +1059,7 @@ threadPool.scheduleWithFixedDelay(new Runnable() { @Override public void run() { - if (sendCount.get() < 3) { + if (sendCount.get() < 0) { sendCount.set(sendCount.get() + 1); getTcp().sendMsg(data); } else { @@ -1055,4 +1109,56 @@ } + /** + * 鍥炲缃戝叧閰嶇疆鍛戒护 + * + * @param mac_Oid_GatewayId + * @param msgId 娑堟伅Id + * @param callBack + */ + public void gatewayRemoteEditReply(String mac_Oid_GatewayId, String msgId, HDLLinkCallBack callBack) { + if (TextUtils.isEmpty(mac_Oid_GatewayId)) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + } + + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalCodeResponse<List<String>> data = new BaseLocalCodeResponse<>(); + data.setId(msgId); + data.setTime_stamp(time); + data.setCode("0"); + + + String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE_REPLY, mac_Oid_GatewayId); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + + 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)); + } + } + } + } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java index abac95d..58fd289 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java @@ -91,7 +91,7 @@ * 娉ㄥ唽鐩戝惉 */ void registerListener() { - if (!TextUtils.isEmpty(observeTopic)) { + if (listener != null && !TextUtils.isEmpty(observeTopic)) { EventDispatcher.getInstance().register(observeTopic, eventListener); // LogUtils.i("HdlSocketHelper", "register event"); } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java new file mode 100644 index 0000000..032c9d3 --- /dev/null +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java @@ -0,0 +1,37 @@ +package com.hdl.sdk.connect.utils; + +import java.nio.ByteBuffer; + +/** + * Created by hxb on 2022/8/3. + * + */ +public class ByteBufferUtils { + + /** + * 鑾峰彇ByteBuffer鎸囧畾浣嶇疆鏁版嵁 + * + * @param byteBuffer 婧愬璞� + * @param length 鎸囧畾闀垮害 + * @return 鏍规嵁闀垮害鐢熸垚鐨勬暟缁� + */ + public static byte[] copyBytes(ByteBuffer byteBuffer, int length) { + return copyBytes(byteBuffer,0,length); + } + + /** + * 澶嶅埗鎸囧畾浣嶇疆鐨勬暟鎹� + * @param byteBuffer + * @param index + * @param length + * @return + */ + public static byte[] copyBytes(ByteBuffer byteBuffer, int index,int length) { + byte[] bytes = new byte[length]; + for (int i = 0; i < bytes.length; i++) { + bytes[i] = byteBuffer.get(index + i); + } + return bytes; + } + +} 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 index c6a3aff..3980879 100644 --- 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 @@ -29,7 +29,7 @@ /** * 褰撳墠socket */ - private DatagramSocket mSocket; + private DatagramSocket mSocket; /** * 鎺ユ敹鏁版嵁鍖� @@ -57,11 +57,12 @@ /** * 鍒濆鍖栧弬鏁� - * @param ipAddress 鏈湴鐩戝惉绔彛 - * @param port 鏈湴鐩戝惉绔彛 + * + * @param ipAddress 鏈湴鐩戝惉绔彛 + * @param port 鏈湴鐩戝惉绔彛 * @param socketOptions */ - private UdpClient(String ipAddress,int port, UdpSocketOptions socketOptions) { + private UdpClient(String ipAddress, int port, UdpSocketOptions socketOptions) { this.ipAddress = ipAddress; this.port = port; this.socketOptions = socketOptions; @@ -71,8 +72,9 @@ /** * 鍒濆鍖栧弬鏁� + * * @param ipAddress 鏈湴鐩戝惉IP鍦板潃 - * @param port 鏈湴鐩戝惉绔彛 + * @param port 鏈湴鐩戝惉绔彛 * @param options * @return */ @@ -82,7 +84,8 @@ /** * 鍒濆鍖栧弬鏁� - * @param port 鏈湴鐩戝惉绔彛 + * + * @param port 鏈湴鐩戝惉绔彛 * @param options * @return */ @@ -100,8 +103,8 @@ } if (TextUtils.isEmpty(ipAddress)) { mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port)); - }else { - mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress,port)); + } else { + mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress, port)); } mSocket.setBroadcast(true); // mSocket.setReuseAddress(true); @@ -156,7 +159,7 @@ if (handleMessage != null) { byte[] data = new byte[receivePacket.getLength()]; System.arraycopy(receivePacket.getData(), 0, data, 0, data.length); - handleMessage.read(data,receivePacket.getAddress().getHostAddress()); + handleMessage.read(data, receivePacket.getAddress().getHostAddress()); } } catch (Exception e) { @@ -166,11 +169,12 @@ @Override - public void sendMsg(String ipAddress,int port, byte[] msg) throws Exception { + 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); + if (sendPacket == null) return; mSocket.send(sendPacket); } } diff --git a/HDLSDK_DEMO/app/build.gradle b/HDLSDK_DEMO/app/build.gradle index 1116a77..1f6a2a1 100644 --- a/HDLSDK_DEMO/app/build.gradle +++ b/HDLSDK_DEMO/app/build.gradle @@ -38,7 +38,8 @@ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6' + // implementation 'com.google.code.gson:gson:2.8.8' // implementation project(path: ':hdl-connect') - implementation files('libs\\com.hdl.sdk-v1.1.4.aar') + implementation files('libs\\com.hdl.sdk-v1.1.6.aar') } \ No newline at end of file diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar deleted file mode 100644 index 83c01e8..0000000 --- a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar +++ /dev/null Binary files differ diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar new file mode 100644 index 0000000..f9edf02 --- /dev/null +++ b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar Binary files differ 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 31f1ab6..c22310e 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,8 +1,10 @@ package com.hdl.hdlsdk; import android.Manifest; +import android.content.Context; import android.content.Intent; -import android.os.Build; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -15,7 +17,6 @@ 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; @@ -28,15 +29,19 @@ 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.AllTopicManagerUtils; 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.AttributesRequest; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.request.ListSidRequest; import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; +import com.hdl.sdk.connect.bean.response.DeviceInfoResponse; import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; @@ -68,24 +73,6 @@ protected void onDestroy() { super.onDestroy(); removeAllTopicsListener(); - } - - void initDeviceInfo() { - AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); - infoBean.setDeviceMAC("f2c5d8bad48f"); - infoBean.setIPMAC("f2c5d8bad48f"); - infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧 - infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿 - infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.1.1"); - infoBean.setIPAddress("192.168.1.103"); - infoBean.setGateway_type("screen.touch"); - infoBean.setHw_version("HW2.0"); - infoBean.setFw_version("Fw1.0"); - infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍� - infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� - infoBean.setSupplier("JINMAOYUN"); - HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); } /*void applyDeviceSecret() { @@ -128,66 +115,33 @@ } }); - }*/ + } - /** - * 鍏ョ綉璁よ瘉 - */ - void sendAuthenticateRequest() { - tv.setText("寮�濮嬪叆缃戣璇�..."); + void checkAppVersion() { + tv.setText("寮�濮嬫娴嬫洿鏂�..."); responseTv.setText(""); - //璁よ瘉鎻愪氦鍙傛暟鍑嗗 -// -// //娴嬭瘯鏈嶅姟鍣� -// String spkStr = "music.standard";//浜у搧spk -// String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 -// String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret -// 姝e紡鏈嶅姟鍣� - String spkStr = "screen.touch";//浜у搧spk -// String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃 - String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃 -// String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret +// //姝e紡鏈嶅姟鍣� + String appKey = "i8hR07jzrIS";//appkey + String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret - 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); + String appCode = "1697150870315999233";//appCode - //1.璁剧疆璁よ瘉淇℃伅 - AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); - requestBean.setMAC(macStr); - 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() { + HDLLink.getInstance().checkAppVersion(this, appKey, appSecret, getAppVersionName(this), appCode, new CheckAppVersionListener() { @Override - public void onError(HDLLinkException e) { - tv.setText("璁よ瘉澶辫触" + e.getCode()); - responseTv.setText(e.getMsg()); - Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode()); + public void onSuccess(UpdateInfo info) { + tv.setText("鏈夋柊鏇存柊"); + responseTv.setText(info.toString()); } - @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 onError(HDLException e) { + tv.setText("妫�娴嬫洿鏂板け璐�"); + responseTv.setText(e.getMsg()); } }); - } + + }*/ public void UploadDeviceAuth(String mac, String result, String message, String auth_code) { //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧 @@ -235,6 +189,8 @@ } }); + UploadSidList(); + ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @Override public void onActivityResult(Map<String, Boolean> result) { @@ -261,6 +217,7 @@ 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); @@ -313,7 +270,7 @@ break; case 9: //鍦烘櫙鎺у埗 - controlScene(); + getScene(); break; case 10: //鍔熻兘鍒楄〃 @@ -338,6 +295,10 @@ case 15: //閫�缃� deleteNetwork(); + break; + case 16: + //妫�娴嬫洿鏂� +// checkAppVersion(); break; } } @@ -371,7 +332,7 @@ @Override public void onMessage(Object msg) { LinkResponse response = (LinkResponse) msg; - if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())){ + if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())) { localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret()); } } @@ -422,6 +383,75 @@ HDLLink.getInstance().removeAllTopicsListener(allTopicsListener); } + void initDeviceInfo() + { + AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); + infoBean.setDeviceMAC("f2c5d8bad48f"); + infoBean.setIPMAC("f2c5d8bad48f"); + infoBean.setDeviceName("榄旈暅");//璁惧鍚嶅瓧 + infoBean.setDeviceModel("HDLSDK");//璁惧鍨嬪彿 + infoBean.setAccessMode("WIFI"); + infoBean.setIPGateway("192.168.1.1"); + infoBean.setIPAddress("192.168.1.116"); + infoBean.setGateway_type("screen.touch"); + infoBean.setHw_version("HW2.0"); + infoBean.setFw_version("Fw1.0"); + infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍� + infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� + infoBean.setSupplier("JINMAOYUN"); + HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); + + } + + /** + * 鍏ョ綉璁よ瘉 + */ + void sendAuthenticateRequest() { + tv.setText("寮�濮嬪叆缃戣璇�..."); + //璁よ瘉鎻愪氦鍙傛暟鍑嗗 + +// 娴嬭瘯鏈嶅姟 +// String spkStr = "ir.module";//浜у搧spk +// String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 +// String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + +// 姝e紡鏈嶅姟鍣� + String spkStr = "screen.touch";//浜у搧spk + String macStr = "f2c5d8bad48f";//璁惧鍞竴MAC鍦板潃 + String secret = "7728691efecc3853";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + + String mac_key = stringToMD5(stringToMD5(macStr + secret)); + String versionString = "HDL_V1.0.1";// + String time = String.valueOf(System.currentTimeMillis()); + HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); + + //1.璁剧疆璁よ瘉淇℃伅 + AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); + requestBean.setMAC(macStr); + requestBean.setSupplier("JINMAOYUN"); + requestBean.setFirmwareVersion(versionString); + requestBean.setHardwareModel("1956F"); + AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); + authbean.setSpk(spkStr); + authbean.setMACKey(mac_key); + authbean.setRequest(requestBean); + //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ + AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean); + HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException e) { + tv.setText("璁よ瘉澶辫触"); + responseTv.setText(e.getMsg()); + Log.i("TAG", "onError: 璁よ瘉澶辫触"); + } + + @Override + public void onSuccess(String msg) { + tv.setText("璁よ瘉鎴愬姛"); + responseTv.setText(msg.toString()); + } + }); + } String stringToMD5(String text) { byte[] hash; @@ -575,6 +605,7 @@ @Override public void onSuccess(String msg) { responseTv.setText(msg); + Log.d("panlili", "MainActivity.java:getSceneList-----> " + msg); } @Override @@ -586,6 +617,30 @@ //鍦烘櫙鍒楄〃 // {"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()); + } + }); + } /** * 鎺у埗鍦烘櫙 @@ -758,4 +813,66 @@ } }); } + + private void UploadSidList() { + tv.setText("涓婃姤Sid鍒楄〃..."); + responseTv.setText(""); + + //1.璁剧疆璁惧淇℃伅 + AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); + + ListSidRequest request = new ListSidRequest(); + request.setOid(authenticateDeviceInfoBean.getOID()); + request.setName("sid鍚嶇О"); + request.setOmodel(authenticateDeviceInfoBean.getDeviceModel()); + request.setSid("12345678");//褰撳墠sid鐨� + request.setSpk("light.switch");//褰撳墠spk鍚嶇О锛屾牴鎹疄闄呰澶囨潵瀹氫箟 + request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁 + + AttributesRequest attributes = new AttributesRequest(); + attributes.setKey("on_off"); + attributes.setData_type("string"); + List<Object> valueList=new ArrayList<>(); + valueList.add("on"); + valueList.add("off"); + attributes.setValue(valueList); + //娣诲姞鏀寔鐨勫睘鎬у垪琛� + List<AttributesRequest> attributesList = new ArrayList<>(); + request.setAttributes(attributesList); + List<ListSidRequest> sidRequestList = new ArrayList<>(); + sidRequestList.add(request); + HDLLink.getInstance().UploadSidList(sidRequestList, new HDLLinkCallBack() { + @Override + public void onError(HDLLinkException error) { + tv.setText(error.getMsg()); + } + + @Override + public void onSuccess(String data) { + tv.setText("涓婃姤sid鍒楄〃鎴愬姛"); + 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 -- Gitblit v1.8.0