From 27a0768b0e0a042911b7f299fcc599d2da4e7fc0 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期一, 13 十二月 2021 10:36:52 +0800
Subject: [PATCH] 更改了udp测试后版本
---
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java | 56 ++++++++++++++----
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java | 30 ++++++---
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 30 +++++-----
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java | 6 +
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java | 19 +++--
HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java | 2
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 9 +-
7 files changed, 99 insertions(+), 53 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 ed94f66..1148624 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
@@ -71,8 +71,8 @@
private volatile static HDLAuthSocket instance;
private HDLAuthSocket() {
- initSearchGatewayEvent();
initListenerGatewayEvent();
+ initSearchGatewayEvent();
}
// public interface CallBack extends BaseCallBack {
@@ -89,8 +89,6 @@
synchronized (HDLLinkConfig.class) {
if (instance == null) {
instance = new HDLAuthSocket();
- //1.鍚姩Socket 寮�鍚洃鍚�
- instance.getUdpBoot();
}
}
}
@@ -132,6 +130,8 @@
*/
public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
HDLLinkConfig.getInstance().clearConfig();
+ //1.鍚姩Socket 寮�鍚洃鍚�
+ getUdpBoot();
//2.鏋勫缓鐩戝惉Listener
// authEvent =
//3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
@@ -177,7 +177,7 @@
String requestStr = gs.toJson(request);
LinkRequest message = new LinkRequest(topic, requestStr);
- HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+ HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
@Override
public void onSucceed(Object msg) {
if (callBack == null) return;
@@ -293,7 +293,7 @@
* @param callBack 鍥炶皟
*/
public void searchGatewayMulticast(SearchGatewayCallBack callBack) {
- searchGateway(HDLLinkConfig.getInstance().getGatewayId(), InetSocketAddress.createUnresolved(UDP_GROUP_IP,UDP_PORT), callBack);
+ searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP,UDP_PORT, callBack);
}
/**
@@ -303,7 +303,7 @@
*/
public void searchGatewayBroadcast(SearchGatewayCallBack callBack) {
String ip = IpUtils.getBroadcastAddress();
- searchGateway(HDLLinkConfig.getInstance().getGatewayId(), InetSocketAddress.createUnresolved(ip,UDP_PORT), callBack);
+ searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip,UDP_PORT, callBack);
}
@@ -321,7 +321,7 @@
GsonConvert.getGson().toJson(data));
String ip = IpUtils.getBroadcastAddress();
- HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+ HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
@Override
public void onSucceed(Object msg) {
if (callBack == null) return;
@@ -353,8 +353,8 @@
return;
}
LinkRequest message = new LinkRequest(topic, bodyStr);
- String ip = HDLLinkConfig.getInstance().getIpAddress(); IpUtils.getBroadcastAddress();
- HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+ String ip = HDLLinkConfig.getInstance().getIpAddress();
+ HdlSocketHelper.send(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
@Override
public void onSucceed(Object msg) {
if (callBack == null) return;
@@ -383,7 +383,7 @@
}
LinkRequest message = new LinkRequest(topic, bodyStr);
String ip = HDLLinkConfig.getInstance().getIpAddress();// IpUtils.getBroadcastAddress();
- getUdpBoot().sendMsg( InetSocketAddress.createUnresolved(ip,UDP_PORT),message.getSendBytes());
+ getUdpBoot().sendMsg( ip,UDP_PORT,message.getSendBytes());
}
private GatewaySearchBean getGatewaySearchBean(Object msg) {
@@ -513,10 +513,11 @@
* 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
*
* @param gatewayId 缃戝叧id
- * @param desInetSocketAddress 鐩爣鐨勫湴鍧�
+ * @param ipAddress 鐩爣鐨処P鍦板潃
+ * @param port 鐩爣鐨勭鍙�
* @param callBack 鍥炶皟
*/
- public void searchGateway(String gatewayId, InetSocketAddress desInetSocketAddress, SearchGatewayCallBack callBack) {
+ public void searchGateway(String gatewayId, String ipAddress,int port, SearchGatewayCallBack callBack) {
this.searchGatewayId = gatewayId;
this.mSearchGatewayCallBack = callBack;
//閲嶇疆鍙傛暟
@@ -538,7 +539,7 @@
//鎼滅储缃戝叧
searchGatewayCount.set(searchGatewayCount.get() + 1);
LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
- getUdpBoot().sendMsg(desInetSocketAddress,message.getSendBytes());
+ getUdpBoot().sendMsg(ipAddress, port, message.getSendBytes());
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
@@ -548,11 +549,10 @@
if (!isSearchGatewaySuccess.get()) {
//鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
callBackSearchGatewayTimeout();
- LogUtils.e("鎼滅储缃戝叧--", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+ LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
}
}
}).start();
-
}
/**
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 8489b60..b03d0fe 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
@@ -558,14 +558,14 @@
@Override
public void onMessage(Object msg) {
if (msg instanceof LinkResponse) {
- LogUtils.e("sendMsg onSuccess");
+ LogUtils.i("sendMsg onSuccess");
+ threadPool.shutdownNow();
+ LogUtils.i("sendMsg eventListener remove");
+ EventDispatcher.getInstance().remove(eventTag, this);
if (callBack != null) {
callBack.onSuccess(msg.toString());
}
- threadPool.shutdownNow();
}
- LogUtils.e("sendMsg eventListener remove");
- EventDispatcher.getInstance().remove(eventTag, this);
}
};
@@ -591,6 +591,7 @@
}
}, 1000, 500, TimeUnit.MILLISECONDS);
EventDispatcher.getInstance().register(eventTag, eventListener);
+ //鍏堝彂閫佷竴娆�
getTcp().sendMsg(data, new SendListener() {
@Override
public void onSucceed() {
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 ea53e38..387661b 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
@@ -29,7 +29,14 @@
private SocketBoot boot;
private UdpSocketBoot udpSocketBoot;
- private InetSocketAddress inetSocketAddress;
+ /**
+ * 鍙戦�佺殑鐩爣IP
+ */
+ private String ipAddress;
+ /**
+ * 鍙戦�佺殑鐩爣鍦板潃
+ */
+ private int port;
private final LinkRequest linkRequest;
private final EventListener eventListener;
@@ -71,11 +78,12 @@
}
private HdlSocketHelper(Long sendAwaitTime, int maxRetry, UdpSocketBoot udpSocketBoot,
- InetSocketAddress inetSocketAddress, 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;
- this.inetSocketAddress = inetSocketAddress;
+ this.ipAddress = ipAddress;
+ this.port = port;
this.linkRequest = linkRequest;
this.listener = listener;
this.sendNumber = new AtomicInteger(0);
@@ -120,16 +128,17 @@
* Udp鐨勫彂閫佹柟娉�
*
* @param udpSocketBoot Udp褰撳墠瀵规帴
- * @param inetSocketAddress 鍙戦�佺殑鐩爣鍦板潃
+ * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+ * @param port 鐩殑绔彛
* @param linkRequest 鍙戦�佺殑鏁版嵁
* @param observeTopic 鍙戦�佺殑涓婚
* @param listener 鍥炶皟
*/
- public static void send(UdpSocketBoot udpSocketBoot, InetSocketAddress inetSocketAddress, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
+ public static void send(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
if (TextUtils.isEmpty(observeTopic)) {
observeTopic = linkRequest.getTopic() + "_reply";
}
- HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, inetSocketAddress, linkRequest, observeTopic, listener);
+ HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress,port, linkRequest, observeTopic, listener);
socketHelper.send();
}
@@ -137,16 +146,17 @@
* Udp鍙戦�佺殑鏂规硶
*
* @param udpSocketBoot 褰撳墠Udp瀵硅薄
- * @param inetSocketAddress 鍙戦�佺殑鐩爣鍦板潃
+ * @param ipAddress 鍙戦�佺殑鐩爣IP鍦板潃
+ * @param
* @param linkRequest 鍙戦�佺殑瀵硅薄
* @param listener 鍥炶皟
*/
- public static void send(UdpSocketBoot udpSocketBoot, InetSocketAddress inetSocketAddress, LinkRequest linkRequest, HdlSocketListener listener) {
+ public static void send(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, HdlSocketListener listener) {
String observeTopic = null;
if (TextUtils.isEmpty(observeTopic)) {
observeTopic = linkRequest.getTopic() + "_reply";
}
- HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, inetSocketAddress, linkRequest, observeTopic, listener);
+ HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress,port, linkRequest, observeTopic, listener);
socketHelper.send();
}
@@ -166,7 +176,7 @@
}
//濡傛灉鏄痷dp
if (null != udpSocketBoot) {
- udpSocketBoot.sendMsg(inetSocketAddress, linkRequest.getSendBytes());
+ udpSocketBoot.sendMsg(ipAddress,port, linkRequest.getSendBytes());
}
}
} catch (Exception e) {
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
index 0b499a5..7d211f7 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketPool.java
@@ -35,7 +35,7 @@
mUdpClientPool.clear();
}
- public synchronized DatagramSocket getUdpSocket1(InetSocketAddress address) throws SocketException {
+ public synchronized DatagramSocket getUdpSocket(InetSocketAddress address) throws SocketException {
DatagramSocket socket;
final String key = address.toString();
if (mUdpClientPool.containsKey(key)) {
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
index 1fff63f..0e6e5d6 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IUdpClient.java
@@ -4,6 +4,7 @@
import com.hdl.sdk.socket.udp.UdpSocketOptions;
import java.net.InetSocketAddress;
+import java.net.SocketAddress;
/**
* Created by hxb on 2021/12/12.
@@ -31,10 +32,11 @@
/**
* 鍙戦�佹暟鎹�
- * @param inetSocketAddress 鐩爣鍦板潃
+ * @param ipAddress 鐩爣IP
+ * @param port 绔彛
* @param msg 鍙戦�佹暟鎹�
* @throws Exception
*/
- void sendMsg(InetSocketAddress inetSocketAddress, byte[] msg) throws Exception;
+ void sendMsg(String ipAddress,int port, byte[] msg) throws Exception;
}
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
index c2a75a4..bc51943 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -17,6 +17,7 @@
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.SocketAddress;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -98,7 +99,7 @@
return;
}
if (TextUtils.isEmpty(ipAddress)) {
- mSocket = SocketPool.getInstance().getUdpSocket1(new InetSocketAddress(port));
+ mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port));
}
mSocket.setBroadcast(true);
mSocket.setReuseAddress(true);
@@ -122,15 +123,16 @@
@Override
public UdpSocketOptions getOptions() {
- return null;
+ return this.socketOptions;
}
+ @Override
public void onHandleResponse() throws Exception {
if (mSocket == null) {
return;
}
try {
- mSocket.receive(receivePacket);
+ mSocket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
@@ -139,14 +141,14 @@
}
//鎺掗櫎鑷繁鍙戝嚭鍘荤殑
try {
- if (IpUtils.isLocalIpAddress( receivePacket.getAddress().getHostAddress()))
+ if (IpUtils.isLocalIpAddress(receivePacket.getAddress().getHostAddress()))
return;
} catch (Exception ignored) {
}
try {
- LogUtils.i( "鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
+ LogUtils.i("鎺ユ敹鍒癠dp鏁版嵁鍖咃紝缃戠粶鍦板潃锛�" + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
IHandleMessage handleMessage = getOptions().getHandleMessage();
if (handleMessage != null) {
@@ -155,17 +157,18 @@
handleMessage.read(data);
}
- }catch (Exception e){
+ } catch (Exception e) {
}
}
+
@Override
- public void sendMsg(InetSocketAddress inetSocketAddress, 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, inetSocketAddress);
+ final DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, InetAddress.getByName(ipAddress), port);
mSocket.send(sendPacket);
}
}
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
index 5e87c6b..44bbf86 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/udp/UdpSocketBoot.java
@@ -13,7 +13,9 @@
import com.hdl.sdk.socket.listener.SendListener;
import java.net.ConnectException;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.SocketAddress;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingDeque;
@@ -33,6 +35,8 @@
private final AtomicInteger resendCount = new AtomicInteger(0);
+ private ExecutorService receiveThread;
+
private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>();
public UdpSocketBoot(IUdpClient client) {
@@ -44,38 +48,63 @@
* @throws Exception 鍙兘绔彛鍐茬獊
*/
public void bind() throws Exception {
- if (null != client) {
- client.bind();
- }
+ client.bind();
+ initReceiveThread();
}
/**
+ * 鍒濆鍖栨帴鏀剁嚎绋�
+ */
+ private void initReceiveThread() {
+ if(null!=receiveThread){
+ return;
+ }
+ receiveThread = ThreadToolUtils.getInstance().newFixedThreadPool(1);
+ receiveThread.execute(new Runnable() {
+ @Override
+ public void run() {
+ while (true) {
+ try {
+ client.onHandleResponse();
+ } catch (Exception e) {
+ LogUtils.i("鎺ユ敹绾跨▼寮傚父锛�"+e.getMessage());
+ }
+ }
+ }
+ });
+ }
+
+
+ /**
* 鍙戦�佹暟鎹�
- * @param inetSocketAddress 鐩殑鐨処P鍦板潃
+ * @param ipAddress 鐩殑鐨処P鍦板潃
+ * @param port 绔彛
* @param msg 鍙戦�佹暟鎹�
* @param listener 鍙戦�佸洖璋�
*/
- public void sendMsg(InetSocketAddress inetSocketAddress,byte[] msg, SendListener listener) {
- sendMsg(inetSocketAddress, msg, true, listener);
+ public void sendMsg(String ipAddress,int port,byte[] msg, SendListener listener) {
+ sendMsg(ipAddress,port, msg, true, listener);
}
/**
* 鍙戦�佹暟鎹�
- * @param inetSocketAddress 鐩殑鐨処P鍦板潃
+ * @param ipAddress 鐩殑鐨処P鍦板潃
+ * @param port 绔彛
* @param msg 鍙戦�佹暟鎹�
*/
- public void sendMsg(InetSocketAddress inetSocketAddress,byte[] msg) {
- sendMsg(inetSocketAddress, msg, true, null);
+ public void sendMsg(String ipAddress,int port,byte[] msg) {
+ sendMsg(ipAddress,port, msg, true, null);
}
/**
* 鍙戦�佹暟鎹�
- * @param inetSocketAddress 鐩殑IP鍦板潃
+ * @param ipAddress 鐩殑IP鍦板潃
+ * @param port 绔彛
* @param msg 鍙戦�佺殑鏁版嵁
* @param isRefreshRetry 鏄惁瑕侀噸鍙�
* @param listener 鍙戦�佸洖璋�
*/
- public void sendMsg(InetSocketAddress inetSocketAddress, byte[] msg, boolean isRefreshRetry, SendListener listener) {
+ public void sendMsg(String ipAddress,int port, byte[] msg, boolean isRefreshRetry, SendListener listener) {
if (isRefreshRetry) {
//閲嶇疆杩炴帴娆℃暟
resendCount.set(0);
@@ -85,7 +114,7 @@
if (listener != null && !TextUtils.isEmpty(request.getAction())) {
sendMap.put(request.getAction(), listener);
}
- client.sendMsg(inetSocketAddress, msg);
+ client.sendMsg(ipAddress,port, msg);
} catch (Exception e) {
LogUtils.i("鍙戦�佸け璐�:" + e.getMessage());
}
@@ -96,8 +125,9 @@
*/
public synchronized void close() {
isOpenRetry.set(false);
-
sendMap.clear();
+ receiveThread.shutdown();
+ receiveThread=null;
client.close();
}
}
--
Gitblit v1.8.0