From b1569b789eef12cf5d4252620ca7e7d2d9c8b93a Mon Sep 17 00:00:00 2001 From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com> Date: 星期四, 14 十一月 2024 14:26:03 +0800 Subject: [PATCH] sdk重连优化 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 64 ++++++++++++++++--------------- 1 files changed, 33 insertions(+), 31 deletions(-) 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 14f9b6e..57afa7b 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java @@ -1,16 +1,12 @@ package com.hdl.sdk.connect.socket; -import static com.hdl.sdk.connect.config.HDLLinkConfig.AUTHENTICATE_IS_DEVICEINFO_KEY; - import android.os.Build; import android.text.TextUtils; -import android.util.Log; import androidx.annotation.RequiresApi; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; -import com.hdl.sdk.common.HDLSdk; import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; @@ -18,34 +14,29 @@ import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.LogUtils; -import com.hdl.sdk.common.utils.SPUtils; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.LinkRequest; +import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.bean.LoginRequest; -import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.BroadcastRequest; import com.hdl.sdk.connect.bean.request.DeviceAuthRequest; -import com.hdl.sdk.connect.bean.request.GatewayInfoRequest; +import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +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.response.AuthenticateResponse; +import com.hdl.sdk.connect.bean.request.PropertyReadRequest; import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse; import com.hdl.sdk.connect.bean.response.BaseLocalResponse; -import com.hdl.sdk.connect.bean.request.DeviceControlRequest; -import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest; -import com.hdl.sdk.connect.bean.LinkRequest; -import com.hdl.sdk.connect.bean.LinkResponse; -import com.hdl.sdk.connect.bean.request.PropertyReadRequest; import com.hdl.sdk.connect.bean.response.DeviceInfoResponse; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; -import com.hdl.sdk.connect.utils.AesUtil; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.client.IHeartbeat; @@ -55,7 +46,6 @@ import com.hdl.sdk.socket.listener.SendListener; import java.util.ArrayList; -import java.util.Base64; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -109,10 +99,13 @@ public void run() { while (true) { try { - Thread.sleep(1000); -// LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected); + Thread.sleep(5000); try { - if (!HDLLink.getInstance().checkIfCertified() || (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected)) { + if (!HDLLink.getInstance().checkIfCertified()) { + continue; + } + + if (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected) { continue; } } catch (Exception e) { @@ -473,14 +466,15 @@ } } - public SocketBoot getTcp() throws RuntimeException { - if (TextUtils.isEmpty(getTcpIp())) { + public synchronized SocketBoot getTcp() throws RuntimeException { + String gatewayIpAddress = getTcpIp(); + if (TextUtils.isEmpty(gatewayIpAddress)) { LogUtils.e("璇锋悳绱㈢綉鍏�"); throw new RuntimeException("璇锋悳绱㈢綉鍏�"); } //濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲 - if (tcpBoot == null || !getTcpOptions().getIp().equals(getTcpIp())) { - tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions()); + if (tcpBoot == null || !getTcpOptions().getIp().equals(gatewayIpAddress)) { + tcpBoot = TcpClient.init(gatewayIpAddress, getTcpPort(), getTcpOptions()); tcpBoot.SetHeartbeat(new IHeartbeat() { @Override public void heartbeat() { @@ -662,6 +656,11 @@ 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); @@ -701,8 +700,8 @@ /** * 涓婃姤Sid鍒楄〃 * - * @param requestList sid鍒楄〃 - * @param callBack 鍥炶皟 + * @param requestList sid鍒楄〃 + * @param callBack 鍥炶皟 */ public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) { if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { @@ -949,14 +948,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)); } @@ -995,7 +993,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() { @@ -1004,8 +1006,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)); } } }); @@ -1116,8 +1118,9 @@ /** * 鍥炲缃戝叧閰嶇疆鍛戒护 + * * @param mac_Oid_GatewayId - * @param msgId 娑堟伅Id + * @param msgId 娑堟伅Id * @param callBack */ public void gatewayRemoteEditReply(String mac_Oid_GatewayId, String msgId, HDLLinkCallBack callBack) { @@ -1135,7 +1138,6 @@ String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE_REPLY, mac_Oid_GatewayId); LinkRequest message = new LinkRequest(topic, GsonConvert.getGson().toJson(data)); - try { -- Gitblit v1.8.0