From af2cbc2a24b3724e7fc3e6b42e134b21a3144c75 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 17 二月 2022 15:33:19 +0800 Subject: [PATCH] 过滤掉非json数据不传给三方使用 --- HDLSDK/hdl-common/build.gradle | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java | 2 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java | 8 + HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java | 30 ++-- HDLSDK/hdl-socket/build.gradle | 2 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java | 8 + HDLSDK/app/build.gradle | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java | 14 + HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java | 51 ++++++++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 92 +++++++++----- HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 43 ++++--- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java | 6 HDLSDK/hdl-connect/build.gradle | 2 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java | 2 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java | 11 + HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 8 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java | 4 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 54 ++++----- 18 files changed, 224 insertions(+), 117 deletions(-) diff --git a/HDLSDK/app/build.gradle b/HDLSDK/app/build.gradle index 22b041f..399b7ea 100644 --- a/HDLSDK/app/build.gradle +++ b/HDLSDK/app/build.gradle @@ -6,7 +6,7 @@ compileSdk 31 defaultConfig { - applicationId "com.hdl.hdlsdk" + applicationId "com.hdl.hdlsdk1" minSdk 21 targetSdk 31 versionCode 1 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 aed7414..571b025 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -4,12 +4,14 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.Manifest; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -27,6 +29,7 @@ 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; @@ -45,15 +48,18 @@ 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 java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.Map; import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY; +import static java.util.Base64.*; public class MainActivity extends AppCompatActivity { @@ -71,10 +77,12 @@ super.onDestroy(); removeAllTopicsListener(); } -void init(){ - HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600"); - HDLLinkConfig.getInstance().setGatewayId("1473119283609321473"); +void init() { +// HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600"); +// HDLLinkConfig.getInstance().setGatewayId("1473119283609321473"); +// HDLLinkConfig.getInstance().setLocalEncrypt(true); } + @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -83,6 +91,7 @@ tv = findViewById(R.id.state_tv); rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); + init(); checkIfCertified(); initDeviceInfo(); @@ -257,18 +266,18 @@ void initDeviceInfo() { AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); - infoBean.setDeviceMAC("123456789"); - infoBean.setIPMAC("12345678900"); + infoBean.setDeviceMAC("AA000000000000AF"); + infoBean.setIPMAC("AA000000000000AF"); infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧 infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿 infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.88.1"); - infoBean.setIPAddress("192.168.88.100"); + infoBean.setIPGateway("192.168.1.1"); + infoBean.setIPAddress("192.168.1.101"); infoBean.setGateway_type("music.standard"); infoBean.setHw_version("HW2.0"); infoBean.setFw_version("Fw1.0"); - infoBean.setOID("010105000000FE08"); - infoBean.setSid("010105000000FE08110100000000"); + infoBean.setOID("010105000000FE10");//姣忎釜璁惧oid閮借涓嶄竴鏍� + infoBean.setSid("110105000000FE08110100000000");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍� HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); } @@ -281,8 +290,8 @@ //娴嬭瘯鏈嶅姟 String spkStr = "ir.module";//浜у搧spk - String macStr = "AA000000000000BB";//璁惧鍞竴MAC鍦板潃 - String secret = "87ae414b7a853f65";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃 + String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret // //姝e紡鏈嶅姟鍣� // String spkStr = "screen.mirror";//浜у搧spk @@ -292,35 +301,20 @@ String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// String time = String.valueOf(System.currentTimeMillis()); + HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr); //1.璁剧疆璁よ瘉淇℃伅 AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); requestBean.setMAC(macStr); - requestBean.setSupplier("raysgem"); + requestBean.setSupplier("WISE"); requestBean.setFirmwareVersion(versionString); requestBean.setHardwareModel("1956F"); AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); authbean.setSpk(spkStr); authbean.setMACKey(mac_key); authbean.setRequest(requestBean); - - //2.璁剧疆璁惧淇℃伅 - AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); - infoBean.setDeviceMAC(macStr); - infoBean.setIPMAC(macStr); - infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧 - infoBean.setDeviceModel("HDL");// - infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.88.1"); - infoBean.setIPAddress(IpUtils.getIP(this));//鏍规嵁鐪熷疄鐨処P鍦板潃濉啓 - - infoBean.setOID("010105000000FE08"); - infoBean.setSid("010105000000FE08110100000000"); - infoBean.setHw_version("1.0"); - infoBean.setFw_version("1.0"); -// infoBean.set - - AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, 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) { diff --git a/HDLSDK/hdl-common/build.gradle b/HDLSDK/hdl-common/build.gradle index 3a82524..ae48686 100644 --- a/HDLSDK/hdl-common/build.gradle +++ b/HDLSDK/hdl-common/build.gradle @@ -9,7 +9,7 @@ minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode 2 - versionName "1.0.5" + versionName "1.0.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" 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 30fe78c..3c11a89 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 @@ -11,6 +11,16 @@ private Context context; + /** + * 鑾峰彇褰撳墠鐗堟湰 + * @return + */ + public String getVersion() { + return version; + } + + private String version="1.0.6"; + private HDLSdk() { } @@ -24,6 +34,7 @@ public void init(Context context) { this.context = context.getApplicationContext(); + LogUtils.i("Version:" + version); } public Context getContext() { diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java index 9f4a148..4046a29 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java @@ -87,4 +87,12 @@ */ public static final String BROADCAST_REPLY="/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"; } diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java index 2f2f010..97620f2 100644 --- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java +++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java @@ -19,21 +19,21 @@ * @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(); - } +// 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"; } diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle index ce517bb..e9f6bea 100644 --- a/HDLSDK/hdl-connect/build.gradle +++ b/HDLSDK/hdl-connect/build.gradle @@ -9,7 +9,7 @@ minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode 2 - versionName "1.0.5" + versionName "1.0.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" 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 f3b663b..9a9b5ae 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 @@ -88,11 +88,13 @@ String headString = "Topic:" + getTopic() + "\r\n" + "Length:" + dataBytes.length + "\r\n" + "\r\n"; byte[] headBytes = headString.getBytes("utf-8"); byte[] sendBytes = ByteUtils.concatBytes(headBytes, dataBytes); - LogUtils.i(headString + "\r\n" + data); + LogUtils.i("鍙戦�佹暟鎹細\r\n" + headString + "\r\n" + data); return sendBytes; } else { - return this.toString().getBytes("utf-8"); + String sendString = this.toString(); + LogUtils.i("鍙戦�佹暟鎹細\r\n" + sendString); + return sendString.getBytes("utf-8"); } } catch (Exception e) { 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 949b7e9..7988290 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 @@ -168,7 +168,7 @@ return (!topicStr.contains(TopicConstant.GATEWAY_AUTH_BROADCAST) //缃戝叧骞挎挱鍏ョ綉鎸囦护 && !topicStr.contains(TopicConstant.DEIVCE_AUTH_REQUEST) //鍏ョ綉璁よ瘉 && !topicStr.contains(TopicConstant.GATEWAY_SEARCH) //鎼滅储缃戝叧涓婚 - && !topicStr.equals(TopicConstant.BROADCAST) + && !topicStr.contains(TopicConstant.BROADCAST) && isLocalEncrypt//鍚敤鍔犲瘑鏍囧織 ); } 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 0d20188..31e03b1 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,6 +1,7 @@ package com.hdl.sdk.connect.protocol; +import android.annotation.TargetApi; import android.os.Build; import android.util.Log; @@ -116,7 +117,7 @@ } } - @RequiresApi(api = Build.VERSION_CODES.O) + @Override protected synchronized LinkResponse decoder(Object msg) throws Exception { if (msg instanceof byte[]) { @@ -164,19 +165,24 @@ body = bodyBytes; } else { try { - LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.getEncoder().encodeToString(body)); + LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + LogUtils.e(Base64.getEncoder().encodeToString(body)); + else { + LogUtils.e(new String(body, "utf-8")); + } } catch (Exception e) { } } } String bodyString = new String(body, "utf-8"); + response.setData(bodyString); + LogUtils.i( "鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData()); //闈炴甯告暟鎹紝杩斿洖 if (!(bodyString.startsWith("{") || bodyString.startsWith("["))) { continue; } - response.setData(bodyString); - LogUtils.i( "LinkMessageDecoder->decoder:" + response.getTopic() + "\r\n" + response.getData()); //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆� EventDispatcher.getInstance().post(response.getTopic(), response); } 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 3c8363f..908ed83 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 @@ -141,15 +141,15 @@ public void onMessage(Object msg) { NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg); if (bean != null) { - LogUtils.i(TAG, "缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress()); + //绉婚櫎鐩戝惉 + EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); + LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress()); String ipStr = bean.getIPAddress(); if (!TextUtils.isEmpty(ipStr)) { sendAuthenticateRequest(ipStr, request, callBack); } } - //绉婚櫎鐩戝惉 - EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); - LogUtils.i(TAG, "绉婚櫎鐩戝惉 authEvent"); + } }); } 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 dedba8a..57a322f 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 @@ -27,6 +27,7 @@ import com.hdl.sdk.connect.protocol.LinkMessageEncoder; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; +import com.hdl.sdk.socket.client.IHeartbeat; import com.hdl.sdk.socket.client.TcpClient; import com.hdl.sdk.socket.codec.MessagePipeLine; import com.hdl.sdk.socket.listener.ConnectStatusListener; @@ -413,6 +414,27 @@ //濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲 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) { + LogUtils.i("DeviceInfoBean涓虹┖锛岄渶瑕佽缃墠鑳芥甯稿績璺�"); + return; + } + + String time = String.valueOf(System.currentTimeMillis()); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("id", IdUtils.getUUId()); + jsonObject.addProperty("time_stamp", time); + + String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); + + LinkRequest message = new LinkRequest(topic, + jsonObject.toString()); + sendMsg(message.getSendBytes(), null, null, null); + } + }); } return tcpBoot; @@ -574,46 +596,48 @@ public void sendMsg(byte[] data, String eventTag, HDLLinkCallBack callBack, SendListener sendListener) { try { - final AtomicInteger sendCount = new AtomicInteger(0); + if(eventTag!=null) { + final AtomicInteger sendCount = new AtomicInteger(0); - final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1); - final EventListener eventListener = new EventListener() { - @Override - public void onMessage(Object msg) { - if (msg instanceof LinkResponse) { - LogUtils.i("sendMsg onSuccess"); - threadPool.shutdownNow(); - LogUtils.i("sendMsg eventListener remove"); - EventDispatcher.getInstance().remove(eventTag, this); - if (callBack != null) { - callBack.onSuccess(msg.toString()); + final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1); + final EventListener eventListener = new EventListener() { + @Override + public void onMessage(Object msg) { + if (msg instanceof LinkResponse) { + LogUtils.i("sendMsg onSuccess"); + threadPool.shutdownNow(); + LogUtils.i("sendMsg eventListener remove"); + EventDispatcher.getInstance().remove(eventTag, this); + if (callBack != null) { + callBack.onSuccess(msg.toString()); + } } } - } - }; + }; - threadPool.scheduleWithFixedDelay(new Runnable() { - @Override - public void run() { - if (sendCount.get() < 3) { - sendCount.set(sendCount.get() + 1); - getTcp().sendMsg(data); - } else { - threadPool.shutdownNow(); - LogUtils.e("sendMsg eventListener remove"); - EventDispatcher.getInstance().remove(eventTag, eventListener); - ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { - @Override - public void run() { - if (callBack != null) { - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + threadPool.scheduleWithFixedDelay(new Runnable() { + @Override + public void run() { + if (sendCount.get() < 3) { + sendCount.set(sendCount.get() + 1); + getTcp().sendMsg(data); + } else { + threadPool.shutdownNow(); + LogUtils.e("sendMsg eventListener remove"); + EventDispatcher.getInstance().remove(eventTag, eventListener); + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } } - } - }); + }); + } } - } - }, 1000, 500, TimeUnit.MILLISECONDS); - EventDispatcher.getInstance().register(eventTag, eventListener); + }, 1000, 500, TimeUnit.MILLISECONDS); + EventDispatcher.getInstance().register(eventTag, eventListener); + } //鍏堝彂閫佷竴娆� getTcp().sendMsg(data, new SendListener() { @Override 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 4bcc51e..7776163 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 @@ -21,7 +21,7 @@ */ public class HdlSocketHelper { - private static final Long DEF_SEND_TIMEOUT = 500L; + private static final Long DEF_SEND_TIMEOUT = 1000L; private static final int DEF_MAX_RETRY = 4; private static final int DEF_SEND_ONE = 1; diff --git a/HDLSDK/hdl-socket/build.gradle b/HDLSDK/hdl-socket/build.gradle index e4bdbc4..60ad903 100644 --- a/HDLSDK/hdl-socket/build.gradle +++ b/HDLSDK/hdl-socket/build.gradle @@ -9,7 +9,7 @@ minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode 2 - versionName "1.0.5" + versionName "1.0.6" 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 74e0940..5da2b6b 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 @@ -5,13 +5,18 @@ 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; import com.hdl.sdk.socket.client.IClient; +import com.hdl.sdk.socket.client.IHeartbeat; import com.hdl.sdk.socket.listener.SendListener; import java.net.ConnectException; +import java.util.Date; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingDeque; @@ -29,8 +34,17 @@ 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鏄惁宸茬粡杩炴帴 @@ -50,6 +64,7 @@ initConnectThread(); initReceiveThread(); initSendThread(); + initHeartbeat(); } /** @@ -125,6 +140,7 @@ if (connected) { //璇诲彇鏁版嵁 client.onHandleResponse(); + time= System.currentTimeMillis(); } else { try { Thread.sleep(1000); @@ -157,7 +173,7 @@ if (!connected) { reconect(); } - Thread.sleep(10*1000); + Thread.sleep(3*1000); } catch (Exception e) { } @@ -166,6 +182,39 @@ }); } } + + /** + * 鍒濆鍖栭噸鏂板績璺崇嚎绋� + */ + 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(); + //蹇冭烦妫�娴� + try { + if (iHeartbeat != null) + iHeartbeat.heartbeat(); + } catch (Exception e) { + } + } + Thread.sleep(1000); + } catch (Exception e) { + + } + } + } + }); + } + } + + /** * 閲嶆柊杩炴帴 */ diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java new file mode 100644 index 0000000..a86a092 --- /dev/null +++ b/HDLSDK/hdl-socket/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-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java index db3bbcc..9bc8781 100644 --- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java +++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java @@ -17,6 +17,7 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; +import java.net.StandardSocketOptions; import java.util.ArrayList; import java.util.List; @@ -75,7 +76,7 @@ mSocket.connect(new InetSocketAddress(ip, port), 3 * 1000); mSocket.setTcpNoDelay(true); mSocket.setReuseAddress(true); - mSocket.setKeepAlive(true); +// mSocket.setKeepAlive(true); mSocket.setSoTimeout(20 * 1000); tcpClientList.add(this); @@ -117,7 +118,6 @@ if (handleMessage != null) { byte []bytes = new byte[len]; System.arraycopy(readBuffer,0,bytes,0,len); - LogUtils.i("鏀跺埌TCP鏁版嵁",new String(bytes)); //瀹屾暣鐨勬暟鎹墠鍥炶皟 handleMessage.read(bytes); } 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 2033551..c5c8f1e 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 @@ -72,6 +72,25 @@ removeAllTopicsListener(); } + void initDeviceInfo() + { + AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); + infoBean.setDeviceMAC("123456789"); + infoBean.setIPMAC("12345678900"); + infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧 + infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿 + infoBean.setAccessMode("WIFI"); + infoBean.setIPGateway("192.168.88.1"); + infoBean.setIPAddress("192.168.88.100"); + infoBean.setGateway_type("music.standard"); + infoBean.setHw_version("HW2.0"); + infoBean.setFw_version("Fw1.0"); + infoBean.setOID("010105000000FE08"); + infoBean.setSid("010105000000FE08110100000000"); + HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -82,7 +101,7 @@ rv.setLayoutManager(new LinearLayoutManager(this)); checkIfCertified(); - + initDeviceInfo(); registerAllTopicsListener(); ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() { @@ -262,7 +281,7 @@ String macStr = "AA000000000000BB";//璁惧鍞竴MAC鍦板潃 String secret = "87ae414b7a853f65";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret - //姝e紡鏈嶅姟鍣� +// //姝e紡鏈嶅姟鍣� // String spkStr = "screen.mirror";//浜у搧spk // String macStr = "AA000000000000AC";//璁惧鍞竴MAC鍦板潃 // String secret = "ee62124c151b737c";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret @@ -270,6 +289,7 @@ 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(); @@ -281,23 +301,8 @@ authbean.setSpk(spkStr); authbean.setMACKey(mac_key); authbean.setRequest(requestBean); - - //2.璁剧疆璁惧淇℃伅 - AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean(); - infoBean.setDeviceMAC(macStr); - infoBean.setIPMAC(macStr); - infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧 - infoBean.setDeviceModel("HDL");// - infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.88.1"); - infoBean.setIPAddress(IpUtils.getIP(this)); - - infoBean.setOID("010105000000FE08"); - infoBean.setSid("010105000000FE08110100000000"); -// infoBean.set - AuthenticateRequest.VersionBean[] versionBeans = new AuthenticateRequest.VersionBean[]{new AuthenticateRequest.VersionBean("FW", versionString), new AuthenticateRequest.VersionBean("HW", "1956F")}; - infoBean.setVersions(versionBeans); - AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, 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) { -- Gitblit v1.8.0