From 17b81245f31d032d5eed69c190e42edb1949f46b Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期二, 12 四月 2022 16:37:39 +0800
Subject: [PATCH] 修复接听后闪退的问题
---
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 70 +++++++++++++++++++++-------------
1 files changed, 43 insertions(+), 27 deletions(-)
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 010263f..0016adc 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
@@ -68,7 +68,7 @@
/**
* instance
*/
- private volatile static HDLAuthSocket instance;
+ private static final HDLAuthSocket instance=new HDLAuthSocket();
private HDLAuthSocket() {
initListenerGatewayEvent();
@@ -84,14 +84,14 @@
*
* @return HDLAuthSocket
*/
- public static synchronized HDLAuthSocket getInstance() {
- if (instance == null) {
- synchronized (HDLLinkConfig.class) {
- if (instance == null) {
- instance = new HDLAuthSocket();
- }
- }
- }
+ public static HDLAuthSocket getInstance() {
+// if (instance == null) {
+// synchronized (HDLAuthSocket.class) {
+// if (instance == null) {
+// instance = new HDLAuthSocket();
+// }
+// }
+// }
return instance;
}
@@ -110,14 +110,14 @@
*
* @return 杩斿洖褰撳墠瀵硅薄
*/
- private UdpSocketBoot getUdpBoot() {
+ private synchronized UdpSocketBoot getUdpBoot() {
try {
if (udpSocketBoot == null) {
udpSocketBoot = UdpClient.init(UDP_PORT, getUdpOptions());
udpSocketBoot.bind();
}
} catch (Exception e) {
-// return null;
+ LogUtils.e("鍒濆鍖朣ocket udp寮傚父"+e.getMessage());
}
return udpSocketBoot;
@@ -136,20 +136,22 @@
//2.鏋勫缓鐩戝惉Listener
// authEvent =
//3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
+ EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() {
@Override
public void onMessage(Object msg) {
+ LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: ");
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");
+
}
});
}
@@ -228,6 +230,7 @@
}
});
}
+
// /**
// * 鍙戦�佸叆缃戝強璁よ瘉璇锋眰
@@ -359,9 +362,10 @@
*
* @param topic 鍙戦�佹暟鎹�
* @param bodyStr 鍥炲鐨勪富棰�
+ * @param broadcast 鏄惁瑕佸箍鎾�
* @param callBack 鍥炶皟
*/
- public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) {
+ public void udpSendMsg(String topic, String bodyStr,boolean broadcast, HDLLinkResponseCallBack callBack) {
if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
if (callBack != null) {
callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
@@ -378,6 +382,9 @@
LinkRequest message = new LinkRequest(topic, bodyStr);
String ip = HDLLinkConfig.getInstance().getIpAddress();
+ if(broadcast) {
+ ip = IpUtils.getBroadcastAddress();
+ }
HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
@Override
public void onSucceed(Object msg) {
@@ -399,18 +406,22 @@
*
* @param topic 鍙戦�佹暟鎹�
* @param bodyStr 鍥炲鐨勪富棰�
+ * @param broadcast 鏄惁骞挎挱
*/
- public void udpSendMsg(String topic, String bodyStr) {
+ public void udpSendMsg(String topic, String bodyStr,boolean broadcast) {
if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
- LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖");
+ LogUtils.e( "鍙傛暟涓嶈兘涓虹┖锛屼笉鑳藉彂閫乁DP鏁版嵁");
return;
}
if (!HDLLinkConfig.getInstance().checkIfCertified()) {
- LogUtils.e("udpSendMsg", "鏈璇侊紝璇峰厛璁よ瘉");
+ LogUtils.e("鏈璇侊紝璇峰厛璁よ瘉鍐嶈皟鐢║DP鍙戦�佹柟娉�");
return;
}
LinkRequest message = new LinkRequest(topic, bodyStr);
- String ip = HDLLinkConfig.getInstance().getIpAddress();// IpUtils.getBroadcastAddress();
+ String ip = HDLLinkConfig.getInstance().getIpAddress();
+ if(broadcast) {
+ ip = IpUtils.getBroadcastAddress();
+ }
HdlSocketHelper.sendUdpOne(getUdpBoot(), ip, UDP_PORT, message);
}
@@ -483,12 +494,12 @@
}.getType());
GatewaySearchBean searchBean = response.getObjects();
if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) {
- if (searchBean.getGatewayId().contains(searchGatewayId)) {
+ searchBean.setIp_address(linkResponse.getSource_ipAddress());
+ if (searchBean.getGatewayId().contains(searchGatewayId)&&!TextUtils.isEmpty(searchGatewayId)) {
removeSearchGatewayEvent();//绉婚櫎鎼滅储缃戝叧鐩戝惉
isSearchGatewaySuccess.set(true);//鎼滅储鎴愬姛鏍囪
searchGatewayCount.set(11);//娆℃暟鏍囪
HDLLinkConfig.getInstance().setCurrentGateway(searchBean);//璁剧疆褰撳墠缃戝叧
- HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑
if (mSearchGatewayCallBack != null) {
mSearchGatewayCallBack.onSuccess(searchBean);
}
@@ -518,11 +529,14 @@
}.getType());
GatewaySearchBean gateway = response.getObjects();
if (gateway != null && !TextUtils.isEmpty(gateway.getGatewayId())) {
+ //鍙兘缃戝叧甯﹁繃鏉ョ殑ip涓嶅
+ gateway.setIp_address(linkResponse.getSource_ipAddress());
//涓荤綉鍏冲苟涓旀槸褰撳墠缁戝畾鐨勭綉鍏�
if ("true".equals(gateway.getMaster().toLowerCase()) && gateway.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) {
HDLLinkConfig.getInstance().setCurrentGateway(gateway);//璁剧疆褰撳墠缃戝叧
- HDLLinkConfig.getInstance().setLocalEncrypt(gateway.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑
- HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address());
+ if(!TextUtils.isEmpty( gateway.getIp_address())) {
+ HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address());
+ }
//鏇存柊褰撳墠缃戝叧鐨勪俊鎭�
HDLLinkConfig.getInstance().reSaveConfig();
}
@@ -575,9 +589,11 @@
}
if (!isSearchGatewaySuccess.get()) {
- //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
- callBackSearchGatewayTimeout();
- LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+ try {
+ LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+ //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
+ callBackSearchGatewayTimeout();
+ }catch (Exception e){}
}
}
}).start();
--
Gitblit v1.8.0