From d8bf4f4d66715f002d024cae92862c1d83daa425 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期日, 12 十二月 2021 22:06:35 +0800 Subject: [PATCH] 更改了udp的机制 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 105 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 71 insertions(+), 34 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 46757ec..c823c46 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 @@ -1,6 +1,5 @@ package com.hdl.sdk.connect.socket; -import android.net.ipsec.ike.TunnelModeChildSessionParams; import android.text.TextUtils; import com.google.gson.Gson; @@ -30,15 +29,13 @@ import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; 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.UdpClient; import com.hdl.sdk.socket.codec.MessagePipeLine; -import com.hdl.sdk.socket.listener.SendListener; +import com.hdl.sdk.socket.udp.UdpSocketBoot; +import com.hdl.sdk.socket.udp.UdpSocketOptions; -import java.io.UnsupportedEncodingException; +import java.net.InetSocketAddress; import java.util.List; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -47,7 +44,7 @@ /** * Created by jlchen on 11/11/21. * - * @Description : HDLAuthSocket + * @Description : HDLAuthSocket 鐢变簬鍓嶆湡宸茬粡鍛藉悕濂斤紝涓嶅仛鏇存敼锛屽彲鐢ㄤ綔Udp鏈嶅姟绔娇鐢� */ public class HDLAuthSocket { private static final String TAG = "HDLAuth"; @@ -55,7 +52,10 @@ * udp榛樿绔彛 */ private static final int UDP_PORT = 8585; - private static SocketBoot updBoot; + /** + * 鍥犱负鑰冭檻鍒颁娇鐢ㄤ竴涓鍙o紝瑕佹敮鎸佹帴鏀跺缃戝叧鐨勬暟鎹紝鎵�浠ュ彧鍏佽浣跨敤涓�涓� + */ + private static UdpSocketBoot udpSocketBoot; // private EventListener authEvent; //鎼滅储缃戝叧 private EventListener searchGatewayEvent; @@ -71,6 +71,7 @@ private HDLAuthSocket() { initSearchGatewayEvent(); + initListenerGatewayEvent(); } // public interface CallBack extends BaseCallBack { @@ -87,30 +88,39 @@ synchronized (HDLLinkConfig.class) { if (instance == null) { instance = new HDLAuthSocket(); + //1.鍚姩Socket 寮�鍚洃鍚� + instance.getUdpBoot(); } } } return instance; } - private SocketOptions getUdpOptions() { - final SocketOptions options = new SocketOptions(); + private UdpSocketOptions getUdpOptions() { + final UdpSocketOptions options = new UdpSocketOptions(); final MessagePipeLine pipeLine = new MessagePipeLine(); pipeLine.add(new LinkMessageDecoder()); pipeLine.add(new LinkMessageEncoder()); options.setHandleMessage(pipeLine); - options.setHeartbeatTimeInterval(10*1000L); - options.setHeartbeatData("UDP"); - options.setEnabledHeartbeat(true);//鏄惁寮�鍚績璺冲寘鍙戦�佹娴� return options; } - private SocketBoot getUdpBoot(String ip) { - if (updBoot == null) { - updBoot = UdpClient.init(ip, UDP_PORT, getUdpOptions()); - updBoot.connect(); + + /** + * 鑾峰彇褰撳墠udp瀵硅薄锛屽鏋滀笉瀛樺湪灏卞垱寤� + * @return 杩斿洖褰撳墠瀵硅薄 + */ + private UdpSocketBoot getUdpBoot() { + try { + if (udpSocketBoot == null) { + udpSocketBoot = UdpClient.init(UDP_PORT, getUdpOptions()); + udpSocketBoot.bind(); + } + } catch (Exception e) { + return null; } - return updBoot; + + return udpSocketBoot; } /** @@ -121,8 +131,6 @@ */ public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) { HDLLinkConfig.getInstance().clearConfig(); - //1.鍚姩Socket 寮�鍚洃鍚� - getUdpBoot(IpUtils.getBroadcastAddress()); //2.鏋勫缓鐩戝惉Listener // authEvent = //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠� @@ -168,7 +176,7 @@ String requestStr = gs.toJson(request); LinkRequest message = new LinkRequest(topic, requestStr); - HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { + HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; @@ -284,7 +292,7 @@ * @param callBack 鍥炶皟 */ public void searchGatewayMulticast(SearchGatewayCallBack callBack) { - searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP, callBack); + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), InetSocketAddress.createUnresolved(UDP_GROUP_IP,UDP_PORT), callBack); } /** @@ -294,7 +302,7 @@ */ public void searchGatewayBroadcast(SearchGatewayCallBack callBack) { String ip = IpUtils.getBroadcastAddress(); - searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip, callBack); + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), InetSocketAddress.createUnresolved(ip,UDP_PORT), callBack); } @@ -312,7 +320,7 @@ GsonConvert.getGson().toJson(data)); String ip = IpUtils.getBroadcastAddress(); - HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { + HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; @@ -345,7 +353,7 @@ } LinkRequest message = new LinkRequest(topic, bodyStr); String ip = IpUtils.getBroadcastAddress(); - HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { + HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; @@ -374,7 +382,7 @@ } LinkRequest message = new LinkRequest(topic, bodyStr); String ip = IpUtils.getBroadcastAddress(); - getUdpBoot(ip).sendMsg(message.getSendBytes()); + getUdpBoot().sendMsg( InetSocketAddress.createUnresolved(ip,UDP_PORT),message.getSendBytes()); } private GatewaySearchBean getGatewaySearchBean(Object msg) { @@ -433,7 +441,7 @@ private SearchGatewayCallBack mSearchGatewayCallBack; private void initSearchGatewayEvent() { - LogUtils.i("鎼滅储缃戝叧--", "initSearchGatewayEvent"); + LogUtils.i("鎼滅储缃戝叧", "initSearchGatewayEvent"); searchGatewayEvent = new EventListener() { @Override public void onMessage(Object msg) { @@ -441,7 +449,6 @@ if (msg instanceof LinkResponse) { LinkResponse linkResponse = (LinkResponse) msg; String data = linkResponse.getData(); - LogUtils.i("鎼滅储鍒扮綉鍏�->" + data); if (!TextUtils.isEmpty(data)) { final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() { }.getType()); @@ -467,14 +474,44 @@ }; } + private void initListenerGatewayEvent() { + LogUtils.i( "鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�"); + EventListener gatewayEvent = new EventListener() { + @Override + public void onMessage(Object msg) { + try { + if (msg instanceof LinkResponse) { + LinkResponse linkResponse = (LinkResponse) msg; + String data = linkResponse.getData(); + LogUtils.i("鎺ユ敹鍒扮綉鍏充俊鎭細" + data); + if (!TextUtils.isEmpty(data)) { + final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() { + }.getType()); + GatewaySearchBean searchBean = response.getObjects(); + if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) { + if (searchBean.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) { + HDLLinkConfig.getInstance().setCurrentGateway(searchBean);//璁剧疆褰撳墠缃戝叧 + HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑 + } + } + } + } + } catch (Exception e) { + + } + } + }; + EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, gatewayEvent); + } + /** * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 * * @param gatewayId 缃戝叧id - * @param ip 鎺ユ敹鐩爣鐨刬p鍦板潃 + * @param desInetSocketAddress 鐩爣鐨勫湴鍧� * @param callBack 鍥炶皟 */ - public void searchGateway(String gatewayId, String ip, SearchGatewayCallBack callBack) { + public void searchGateway(String gatewayId, InetSocketAddress desInetSocketAddress, SearchGatewayCallBack callBack) { this.searchGatewayId = gatewayId; this.mSearchGatewayCallBack = callBack; //閲嶇疆鍙傛暟 @@ -495,8 +532,8 @@ try { //鎼滅储缃戝叧 searchGatewayCount.set(searchGatewayCount.get() + 1); - LogUtils.i("鎼滅储缃戝叧--", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�"); - getUdpBoot(ip).sendMsg(message.getSendBytes()); + LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�"); + getUdpBoot().sendMsg(desInetSocketAddress,message.getSendBytes()); Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); @@ -517,7 +554,7 @@ * 娉ㄥ唽鎼滅储缃戝叧鐩戝惉 */ private void registerSearchGatewayEvent() { - LogUtils.i("鎼滅储缃戝叧--", "娉ㄥ唽鎼滅储缃戝叧鐩戝惉"); + LogUtils.i("鎼滅储缃戝叧", "娉ㄥ唽鎼滅储缃戝叧鐩戝惉"); EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent); } @@ -525,7 +562,7 @@ * 绉婚櫎鎼滅储缃戝叧鐩戝惉 */ private void removeSearchGatewayEvent() { - LogUtils.i("鎼滅储缃戝叧--", "绉婚櫎鎼滅储缃戝叧鐩戝惉"); + LogUtils.i("鎼滅储缃戝叧", "绉婚櫎鎼滅储缃戝叧鐩戝惉"); EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent); } -- Gitblit v1.8.0