From 43e38e768360ac8ced4f31fb4a423f2badda5587 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期一, 13 十二月 2021 15:49:05 +0800
Subject: [PATCH] 2021-12-13 1.优化udp发送
---
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java | 118 +++++++++++++----------------
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 121 ++++++++++++++++++++++--------
2 files changed, 141 insertions(+), 98 deletions(-)
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 a175c06..2033551 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -106,6 +106,8 @@
beans.add(new DemoBean("璁惧鍔熻兘鍒楄〃"));
beans.add(new DemoBean("UDP鍙戦��"));
beans.add(new DemoBean("TCP鍙戦��"));
+ beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
+ beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
demoAdapter = new DemoAdapter(beans);
rv.setAdapter(demoAdapter);
@@ -129,12 +131,12 @@
searchGatewayBroadcast();
break;
case 2:
- //鑾峰彇鍔熻兘鍒楄〃
+ //鑾峰彇鍔熻兘鍒楄〃
getFunctionList();
break;
case 3:
//鍔熻兘灞炴�ц鍙�
- getFunctionAttribute();
+ getFunctionAttribute();
break;
case 4:
//璁惧鎺у埗
@@ -164,11 +166,18 @@
//TCP鍙戦��
tcpSend();
break;
+ case 11:
+ //UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
+ udpSendWithCallback();
+ break;
+ case 12:
+ //TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
+ tcpSendWithCallback();
+ break;
}
}
});
}
-
public void showToast(String text) {
@@ -178,9 +187,9 @@
/**
* 妫�娴嬫槸鍚﹁璇佽繃
*/
- void checkIfCertified(){
+ void checkIfCertified() {
boolean isCertified = HDLLink.getInstance().checkIfCertified();
- String mes = isCertified?"宸茬粡璁よ瘉杩�":"鏈璇�";
+ String mes = isCertified ? "宸茬粡璁よ瘉杩�" : "鏈璇�";
showToast(mes);
tv.setText(mes);
}
@@ -188,11 +197,11 @@
/**
* 娉ㄥ唽鎵�鏈変富棰樻暟鎹殑鐩戝惉
*/
- void registerAllTopicsListener(){
+ void registerAllTopicsListener() {
allTopicsListener = new EventListener() {
@Override
public void onMessage(Object msg) {
- LinkResponse response = (LinkResponse)msg;
+ LinkResponse response = (LinkResponse) msg;
}
};
HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
@@ -200,20 +209,21 @@
/**
* 澶勭悊鏀跺埌鐨勪富棰�
+ *
* @param response
*/
- private void handleLinkResponse(LinkResponse response){
+ private void handleLinkResponse(LinkResponse response) {
//缃戝叧鎼滅储鍥炲
- if(response.getTopic().contains("/user/all/custom/gateway/search_reply")){
+ if (response.getTopic().contains("/user/all/custom/gateway/search_reply")) {
String data = response.getData();
if (!TextUtils.isEmpty(data)) {
- Log.i("handleLinkResponse", "data:"+data);
+ Log.i("handleLinkResponse", "data:" + data);
final BaseLocalResponse<GatewaySearchBean> bean = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
}.getType());
GatewaySearchBean searchBean = bean.getObjects();
- Log.i("handleLinkResponse", "GatewaySearchBean: "+searchBean.getGatewayId());
+ Log.i("handleLinkResponse", "GatewaySearchBean: " + searchBean.getGatewayId());
}
- }else{
+ } else {
//鍏跺畠涓婚
}
@@ -236,14 +246,14 @@
/**
* 绉婚櫎鎵�鏈変富棰樻暟鎹殑鐩戝惉
*/
- void removeAllTopicsListener(){
+ void removeAllTopicsListener() {
HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
}
/**
* 鍏ョ綉璁よ瘉
*/
- void sendAuthenticateRequest(){
+ void sendAuthenticateRequest() {
tv.setText("寮�濮嬪叆缃戣璇�...");
//璁よ瘉鎻愪氦鍙傛暟鍑嗗
@@ -330,7 +340,7 @@
* 濡傛灉宸茬粡璁よ瘉鍚庯紝鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎
* 骞挎挱鎼滅储璁よ瘉杩囩殑缃戝叧鏄惁鍦ㄧ嚎
*/
- void searchGatewayBroadcast(){
+ void searchGatewayBroadcast() {
tv.setText("鎼滅储缃戝叧涓�...");
HDLLink.getInstance().searchGatewayBroadcast(new HDLAuthSocket.SearchGatewayCallBack() {
@Override
@@ -338,10 +348,11 @@
tv.setText("缃戝叧涓嶅湪绾�");
responseTv.setText(e.getMsg());
}
+
@Override
public void onSuccess(GatewaySearchBean gatewaySearchBean) {
tv.setText("缃戝叧鍦ㄧ嚎");
- responseTv.setText("鎼滅储鎴愬姛 缃戝叧id锛�"+gatewaySearchBean.getGatewayId());
+ responseTv.setText("鎼滅储鎴愬姛 缃戝叧id锛�" + gatewaySearchBean.getGatewayId());
// LogUtils.i("TAG", "onSuccess: 鎼滅储鎴愬姛锛�"+gatewaySearchBean.getGatewayId());
}
});
@@ -350,7 +361,7 @@
/**
* 鑾峰彇鍔熻兘鍒楄〃
*/
- void getFunctionList(){
+ void getFunctionList() {
tv.setText("鑾峰彇鍔熻兘鍒楄〃涓�...");
responseTv.setText("");
HDLLink.getInstance().getFunctionList(new HDLLinkCallBack() {
@@ -371,7 +382,7 @@
* 鍔熻兘灞炴�ц鍙�
* 鏀寔鎵归噺璇诲彇
*/
- void getFunctionAttribute(){
+ void getFunctionAttribute() {
tv.setText("鍔熻兘灞炴�ц鍙�");
List<String> sids = new ArrayList<>();
sids.add(testLightSid);
@@ -392,7 +403,7 @@
* 璇诲彇璁惧鐘舵��
* 鏀寔鎵归噺璇诲彇
*/
- void propertyRead(){
+ void propertyRead() {
tv.setText("璇诲彇鐘舵�佷腑...");
List<String> list = new ArrayList<>();
list.add(testLightSid);//瑕佽鍙栬澶囩殑sid
@@ -402,6 +413,7 @@
tv.setText("璇诲彇鎴愬姛");
responseTv.setText(data);
}
+
@Override
public void onError(HDLLinkException e) {
tv.setText("璇诲彇澶辫触");
@@ -414,14 +426,14 @@
* 鎺у埗澶辫触
* 鍥炲鍝嶅簲code涓�200 浠h〃鎵ц鎴愬姛
*/
- void controlDecide(){
+ void controlDecide() {
tv.setText("鎺у埗璁惧");
isOn = !isOn;
List<DeviceControlRequest> requestList = new ArrayList<>();
DeviceControlRequest request = new DeviceControlRequest();
request.setSid(testLightSid);
- List<DeviceControlRequest.StatusBean> statusBeanList= new ArrayList<>();
- DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean();
+ List<DeviceControlRequest.StatusBean> statusBeanList = new ArrayList<>();
+ DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean();
bean.setKey("on_off");
bean.setValue(isOn ? "on" : "off");
statusBeanList.add(bean);
@@ -443,7 +455,7 @@
/**
* 鑾峰彇鍦烘櫙鍒楄〃
*/
- void getSceneList(){
+ void getSceneList() {
tv.setText("璇诲彇鍦烘櫙鍒楄〃");
HDLLink.getInstance().getSceneList(new HDLLinkCallBack() {
@Override
@@ -460,21 +472,22 @@
//鍦烘櫙鍒楄〃
// {"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 controlScene(){
+ void controlScene() {
tv.setText("鍦烘櫙鎺у埗");
//鎺у埗鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忔帶鍒�
List<String> sids = new ArrayList<>();
isOn = !isOn;
- if(isOn){
+ if (isOn) {
sids.add("04010560D2C7170A0A0100000000");
- }else{
+ } else {
sids.add("04010560D2C76E0A0A0100010000");
}
- HDLLink.getInstance().controlScene(sids,new HDLLinkCallBack() {
+ HDLLink.getInstance().controlScene(sids, new HDLLinkCallBack() {
@Override
public void onSuccess(String msg) {
responseTv.setText(msg);
@@ -488,7 +501,7 @@
}
- void startDevicesListActivity(){
+ void startDevicesListActivity() {
Intent intent = new Intent(this, DevicesListActivity.class);
startActivity(intent);
}
@@ -497,27 +510,29 @@
* TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
*/
private void tcpSend() {
+ tv.setText("TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
String bodyStr = getPropertyDownBodyStr();
HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr);
}
/**
- * 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
+ * UDP鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�
*/
private void udpSend() {
+ tv.setText("UDP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙�");
String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
String bodyStr = getPropertyDownBodyStr();
HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr);
}
- private String getPropertyDownBodyStr(){
+ private String getPropertyDownBodyStr() {
isOn = !isOn;
List<DeviceControlRequest> requestList = new ArrayList<>();
DeviceControlRequest request = new DeviceControlRequest();
request.setSid(testLightSid);
- List<DeviceControlRequest.StatusBean> statusBeanList= new ArrayList<>();
- DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean();
+ List<DeviceControlRequest.StatusBean> statusBeanList = new ArrayList<>();
+ DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean();
bean.setKey("on_off");
bean.setValue(isOn ? "on" : "off");
statusBeanList.add(bean);
@@ -532,4 +547,46 @@
return GsonConvert.getGson().toJson(data);
}
+
+ /**
+ * UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
+ */
+ private void udpSendWithCallback() {
+ tv.setText("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+ String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
+ String bodyStr = getPropertyDownBodyStr();
+ HDLLink.getInstance().udpSendMsg(propertyDownTopic, bodyStr, new HDLLinkResponseCallBack() {
+ @Override
+ public void onSuccess(LinkResponse msg) {
+ Log.i("udpSendWithCallback", "udpSendWithCallback");
+ responseTv.setText(GsonConvert.getGson().toJson(msg));
+ }
+
+ @Override
+ public void onError(HDLLinkException e) {
+ responseTv.setText(e.getMsg());
+ }
+ });
+ }
+
+ /**
+ * TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�
+ */
+ private void tcpSendWithCallback() {
+ tv.setText("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�");
+ String propertyDownTopic = String.format(TopicConstant.PROPERTY_DOWN, HDLLinkConfig.getInstance().getGatewayId());
+ String bodyStr = getPropertyDownBodyStr();
+ HDLLink.getInstance().tcpSendMsg(propertyDownTopic, bodyStr, new HDLLinkCallBack() {
+ @Override
+ public void onSuccess(String msg) {
+ Log.i("tcpSendWithCallback", "tcpSendWithCallback");
+ responseTv.setText(msg);
+ }
+
+ @Override
+ public void onError(HDLLinkException e) {
+ responseTv.setText(e.getMsg());
+ }
+ });
+ }
}
\ No newline at end of file
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 e5679af..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
@@ -4,6 +4,7 @@
import com.hdl.sdk.common.event.EventDispatcher;
import com.hdl.sdk.common.event.EventListener;
+import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.bean.LinkRequest;
import com.hdl.sdk.socket.SocketBoot;
@@ -48,37 +49,16 @@
private ScheduledExecutorService sendThread;
+ private String observeTopic;
+
public interface HdlSocketListener {
void onSucceed(Object msg);
void onFailure();
}
- private HdlSocketHelper(Long sendAwaitTime, int maxRetry, SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
- this.sendAwaitTime = sendAwaitTime;
- this.maxRetry = maxRetry;
- this.boot = boot;
- this.linkRequest = linkRequest;
- this.listener = listener;
- this.sendNumber = new AtomicInteger(0);
- eventListener = new EventListener() {
- @Override
- public void onMessage(Object msg) {
- isSend.set(true);
- if (listener != null) {
- listener.onSucceed(msg);
- }
- if (sendThread != null) {
- sendThread.shutdownNow();
- }
- EventDispatcher.getInstance().remove(eventListener);
- }
- };
- EventDispatcher.getInstance().register(observeTopic, eventListener);
- }
-
private HdlSocketHelper(Long sendAwaitTime, int maxRetry, UdpSocketBoot udpSocketBoot,
- String ipAddress,int port , LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
+ String ipAddress, int port, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
this.sendAwaitTime = sendAwaitTime;
this.maxRetry = maxRetry;
this.udpSocketBoot = udpSocketBoot;
@@ -86,6 +66,7 @@
this.port = port;
this.linkRequest = linkRequest;
this.listener = listener;
+ this.observeTopic = observeTopic;
this.sendNumber = new AtomicInteger(0);
eventListener = new EventListener() {
@Override
@@ -97,75 +78,79 @@
if (sendThread != null) {
sendThread.shutdownNow();
}
- EventDispatcher.getInstance().remove(eventListener);
+ //绉婚櫎鐩戝惉
+ removeListener();
}
};
- EventDispatcher.getInstance().register(observeTopic, eventListener);
+ //娉ㄥ唽鐩戝惉
+ registerListener();
}
- public static void send(SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener, Long sendAwaitTime, int maxRetry) {
- if (TextUtils.isEmpty(observeTopic)) {
- observeTopic = linkRequest.getTopic() + "_reply";
+
+ /**
+ * 娉ㄥ唽鐩戝惉
+ */
+ void registerListener() {
+ if (!TextUtils.isEmpty(observeTopic)) {
+ EventDispatcher.getInstance().register(observeTopic, eventListener);
+// LogUtils.i("HdlSocketHelper", "register event");
}
- HdlSocketHelper socketHelper = new HdlSocketHelper(sendAwaitTime, maxRetry, boot, linkRequest, observeTopic, listener);
- socketHelper.send();
}
- public static void send(SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
- send(boot, linkRequest, observeTopic, listener, DEF_SEND_TIMEOUT, DEF_MAX_RETRY);
- }
-
-
- public static void send(SocketBoot boot, LinkRequest linkRequest, HdlSocketListener listener) {
- send(boot, linkRequest, "", listener, DEF_SEND_TIMEOUT, DEF_MAX_RETRY);
- }
-
- public static void sendOne(SocketBoot boot, LinkRequest linkRequest, HdlSocketListener listener) {
- send(boot, linkRequest, "", listener, DEF_SEND_TIMEOUT, DEF_SEND_ONE);
+ /**
+ * 绉婚櫎鐩戝惉
+ */
+ void removeListener() {
+ if (!TextUtils.isEmpty(observeTopic)) {
+ EventDispatcher.getInstance().remove(observeTopic, eventListener);
+// LogUtils.i("HdlSocketHelper", "remove event");
+ }
}
/**
* Udp鐨勫彂閫佹柟娉�
*
- * @param udpSocketBoot Udp褰撳墠瀵规帴
- * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
- * @param port 鐩殑绔彛
- * @param linkRequest 鍙戦�佺殑鏁版嵁
- * @param observeTopic 鍙戦�佺殑涓婚
- * @param retry 閲嶅彂鏁版
- * @param listener 鍥炶皟
+ * @param udpSocketBoot Udp褰撳墠瀵规帴
+ * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+ * @param port 鐩殑绔彛
+ * @param linkRequest 鍙戦�佺殑鏁版嵁
+ * @param observeTopic 鍙戦�佺殑涓婚
+ * @param retry 閲嶅彂鏁版
+ * @param listener 鍥炶皟
*/
- public static void sendUdp(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, String observeTopic, int retry,HdlSocketListener listener) {
+ public static void sendUdp(UdpSocketBoot udpSocketBoot, String ipAddress, int port, LinkRequest linkRequest, String observeTopic, int retry, HdlSocketListener listener) {
if (TextUtils.isEmpty(observeTopic)) {
observeTopic = linkRequest.getTopic() + "_reply";
}
- HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, retry, udpSocketBoot, ipAddress,port, linkRequest, observeTopic, listener);
+ HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, retry, udpSocketBoot, ipAddress, port, linkRequest, observeTopic, listener);
socketHelper.send();
}
/**
* Udp鐨勫彂閫佹柟娉�
*
- * @param udpSocketBoot Udp褰撳墠瀵规帴
- * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
- * @param port 鐩殑绔彛
- * @param linkRequest 鍙戦�佺殑鏁版嵁
- * @param listener 鍥炶皟
+ * @param udpSocketBoot Udp褰撳墠瀵规帴
+ * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+ * @param port 鐩殑绔彛
+ * @param linkRequest 鍙戦�佺殑鏁版嵁
+ * @param listener 鍥炶皟
*/
- public static void sendUdp(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, HdlSocketListener listener) {
- sendUdp(udpSocketBoot,ipAddress,port,linkRequest,null,DEF_MAX_RETRY,listener);
+ public static void sendUdp(UdpSocketBoot udpSocketBoot, String ipAddress, int port, LinkRequest linkRequest, HdlSocketListener listener) {
+ sendUdp(udpSocketBoot, ipAddress, port, linkRequest, "", DEF_MAX_RETRY, listener);
}
+
/**
* Udp鐨勫彂閫佹柟娉�
*
- * @param udpSocketBoot Udp褰撳墠瀵规帴
- * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
- * @param port 鐩殑绔彛
- * @param linkRequest 鍙戦�佺殑鏁版嵁
+ * @param udpSocketBoot Udp褰撳墠瀵规帴
+ * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+ * @param port 鐩殑绔彛
+ * @param linkRequest 鍙戦�佺殑鏁版嵁
*/
- public static void sendUdpOne(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest) {
- sendUdp(udpSocketBoot, ipAddress, port, linkRequest, null, DEF_SEND_ONE, null);
+ public static void sendUdpOne(UdpSocketBoot udpSocketBoot, String ipAddress, int port, LinkRequest linkRequest) {
+ HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress, port, linkRequest, null, null);
+ socketHelper.send();
}
private void send() {
@@ -184,7 +169,7 @@
}
//濡傛灉鏄痷dp
if (null != udpSocketBoot) {
- udpSocketBoot.sendMsg(ipAddress,port, linkRequest.getSendBytes());
+ udpSocketBoot.sendMsg(ipAddress, port, linkRequest.getSendBytes());
}
}
} catch (Exception e) {
@@ -219,7 +204,8 @@
* 鍙戦�佸け璐�
*/
private void notifyFailure() {
- EventDispatcher.getInstance().remove(eventListener);
+ //绉婚櫎鐩戝惉
+ removeListener();
if (sendThread != null) {
sendThread.shutdownNow();
sendThread = null;
--
Gitblit v1.8.0